Zaman ayarlı role

Focus 2

Üye
Katılım
15 May 2016
Mesajlar
18
Puanları
1
Yaş
42
Herkese merhabalar.Elimde arduıno UNO klon keypad shıed lcd ekran ve ds3231 saat modulu var.Ben bunlarla zamana bağlı role çalıştırmak istiyorum lakin fazlasıyla internetten kodda indirip derleyip çalıştırmak istesemde bi türlü beceredim.Yardımcı olursanız sevinirim.LÜTFEN YARDIM
internetten bu kodu indirdim kendimce üzerinde biraz değişiklikler yaptım ancakbi türlü yükleme yapamıyorum. Şu hatayı veriyor. expected primary-expression before '.' token. düzeltmemi istediği yerde bura( int MinEprAC = (DS3231.read(adrAC) * 60) + DS3231.read(adrAC + 1) nerde hata yapıyorum bilemiyorum. Rica etsem yardımcı ola bilirmisiniz.Teşekkürler


#include <LiquidCrystal.h>
#include <DS3231.h>
#include <virtuabotixRTC.h>


#define relay1 0

#define rtcVCC A5 // Rtc 1302 modülü üzerinde VCC yazan bacak
#define rtcGND A4 // Rtc 1302 modülü üzerinde gnd yazan bacak
#define rtcSCLK A3 // Rtc 1302 modülü üzerinde CLK yazan bacak
#define rtcIO A2 // Rtc 1302 modülü üzerinde DAT yazan bacak
#define rtcCE A1 // Rtc 1302 modülü üzerinde RST yazan bacak


virtuabotixRTC myRTC(rtcSCLK, rtcIO, rtcCE);


#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5

#define modeSETUP 1
#define modeNORMAL 2

int mode = 1;

#define adr1AC 2
#define adr1KAPA 4

int ds3231Min = 0;
int ds3231Hour = 0;

int ds3231HourAC = 0;
int ds3231HourKAPA = 0;
int ds3231MinAC = 0;
int ds3231MinKAPA = 0;

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int lcd_key = 0;
int adc_key_in = 0;

void setup() {


// Digital pinler çıkış olarak ayarlanıyor
for (int i = 0; i <= 13; i++) {
pinMode(i, OUTPUT);
}


pinMode(rtcVCC, OUTPUT);
pinMode(rtcGND, OUTPUT);
pinMode(rtcSCLK, OUTPUT);
pinMode(rtcIO, OUTPUT);
pinMode(rtcCE, OUTPUT);
digitalWrite(rtcVCC, HIGH);
digitalWrite(rtcGND, LOW);

delay(500);

lcd.begin(16, 2);
}

void loop() {

lcd.setCursor(4, 0);

displayTime();

lcd.setCursor(0, 1);
lcd.print("1");
roleEylemi(adr1AC, adr1KAPA, 1, relay1);


if (LCD_Butonlari_Oku() == btnSELECT)
{
while (LCD_Butonlari_Oku() == btnSELECT);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("UP. SAAT AYAR ");
lcd.setCursor(0, 1);
lcd.print("DN. ROLE AYAR ");
while (LCD_Butonlari_Oku() == btnNONE);
if (LCD_Butonlari_Oku() == btnUP) {
while (LCD_Butonlari_Oku() == btnUP);
setRTC(); // RTC ayarlama fonksiyonu çalıştırılıyor
}
else if (LCD_Butonlari_Oku() == btnDOWN) {
while (LCD_Butonlari_Oku() == btnDOWN);
setPin(); // Röle ayarlama fonksiyonu çalıştırılıyor
}
}
}

void roleEylemi(int adrAC, int adrKAPA, int pos, int pin)
{
myRTC.updateTime();
int MinToday = (myRTC.hours * 60) + myRTC.minutes;
int MinEprAC = (DS3231.read(adrAC) * 60) + DS3231.read(adrAC + 1)
int MinEprKAPA = (DS3231.read(adrKAPA) * 60) +DS3231.read(adrKAPA + 1)

lcd.setCursor(pos, 1);
if (MinEprAC == MinEprKAPA) { // röle kullanılmıyor ise
lcd.print(" ");
digitalWrite(pin, LOW);
}
else if (MinEprAC < MinEprKAPA) { // Açık Röle örneğin akşam 20:00 da açılıp 22:00 da kapanacak
if ((MinEprAC <= MinToday) && (MinEprKAPA > MinToday)) {
lcd.print("*");
digitalWrite(pin, LOW);
}
else {
lcd.print("-"); // Kapalı Röle
digitalWrite(pin, HIGH);
}
}
else if (MinEprAC > MinEprKAPA) { // Açık Röle göstergesi örneğin saat gece 01:00 açılan röle sabah 06:00 da kapanacak
if ((MinEprAC >= MinToday) || (MinEprKAPA < MinToday)) {
lcd.print("*");
digitalWrite(pin, LOW);
}
else {
lcd.print("-");
digitalWrite(pin, HIGH);
}
}
}

void setRTC() {

lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SAAT AYARI");
delay(1000);

lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ESKI AYAR ");
setupShowValue(myRTC.hours, myRTC.minutes, 0);

lcd.setCursor(0, 1);
lcd.print("YENI AYAR ");

myRTC.updateTime();
setupShowValue(myRTC.hours, myRTC.minutes, 1);
while (LCD_Butonlari_Oku() == btnNONE);
setupChooseValueSetRTC(myRTC.hours, myRTC.minutes, 1);
lcd.setCursor(0,0);
lcd.clear(); // Saat ayarından hemen sonra ekranda bir önceki ekranın izi kalmasından dolayı orjinal kodlara bu satır eklenmiştir.
lcd.print("AYARLANDI ");// ********Serkan GÜNDOĞDU************
delay(1000);
lcd.clear();
}

void setPin() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ROLE AYARI");
delay(1000);

lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ROLE 1 AC");
ds3231Hour = DS3231 read(adr1AC);
ds3231Min = DS3231 read(adr1AC + 1);
if (ds3231Hour >= 24) ds3231Hour = 0;
if (ds3231Min >= 60) ds3231Min = 0;
setupShowValue(ds3231Hour, ds3231Min, 0);
while (LCD_Butonlari_Oku() == btnNONE);
setupChooseValue(ds3231mHour, ds3231Min, adr1AC, 0);

lcd.setCursor(0, 1);
lcd.print("ROLE 1 KAPA");
ds3231Hour = DS3231 read(adr1KAPA);
ds3231Min = DS3231 read(adr1KAPA + 1);
if (ds3231Hour >= 24) ds3231Hour = 0;
if (ds3231Min >= 60) ds3231Min = 0;
setupShowValue(ds3231Hour, ds3231Min, 1);
while (LCD_Butonlari_Oku() == btnNONE);
setupChooseValue(ds3231Hour, ds3231Min, adr1KAPA, 1);
lcd.clear();
}


void setupChooseValue(int HourNew, int MinNew, byte Address, byte Pos) {
while (LCD_Butonlari_Oku() != btnSELECT) {
if (LCD_Butonlari_Oku() == btnRIGHT) {
if (HourNew < 23) {
HourNew++;
}
}
else if (LCD_Butonlari_Oku() == btnLEFT) {
if (HourNew > 0) {
HourNew--;
}
}
else if (LCD_Butonlari_Oku() == btnUP) {
if (MinNew < 59) {
MinNew++;
}
}
else if (LCD_Butonlari_Oku() == btnDOWN) {
if (MinNew > 0) {
MinNew--;
}
}
setupShowValue(HourNew, MinNew, Pos);
delay(150);
}
while (LCD_Butonlari_Oku() != btnNONE);
DS3231.write(Address, HourNew);
DS3231.write(Address + 1, MinNew);
delay(150);
}

void setupChooseValueSetRTC(int HourNew, int MinNew, byte Pos) {
while (LCD_Butonlari_Oku() != btnSELECT) {
if (LCD_Butonlari_Oku() == btnRIGHT) {
if (HourNew < 23) {
HourNew++;
}
}
else if (LCD_Butonlari_Oku() == btnLEFT) {
if (HourNew > 0) {
HourNew--;
}
}
else if (LCD_Butonlari_Oku() == btnUP) {
if (MinNew < 59) {
MinNew++;
}
}
else if (LCD_Butonlari_Oku() == btnDOWN) {
if (MinNew > 0) {
MinNew--;
}
}
setupShowValue(HourNew, MinNew, Pos);
delay(150);
}
while (LCD_Butonlari_Oku() != btnNONE);
myRTC.setDS3231Time(00, MinNew, HourNew, 6, 10, 1, 2019);
delay(150);
}

void setupShowValue(int Hour, int Min, int Pos) {
lcd.setCursor(11, Pos);
print2digits(Hour);
lcd.print(":");
print2digits(Min);
}

/* ================================================== */
/* LCD Fonksiyonları */
/* ================================================== */

int LCD_Butonlari_Oku()
{
adc_key_in = analogRead(0); // sensörden değeri oku
if (adc_key_in > 1000) return btnNONE;
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 200) return btnUP;
if (adc_key_in < 390) return btnDOWN;
if (adc_key_in < 560) return btnLEFT;
if (adc_key_in < 800) return btnSELECT;
return btnNONE; // diğerleri başarısız olduğunda, bunu geri ver.
}

void ds3231_write_int(int p_address, int p_value) {
byte lowByte = ((p_value >> 0) & 0xFF);
byte highByte = ((p_value >> 8) & 0xFF);

DS3231.write(p_address, lowByte);
DS3231.write(p_address + 1, highByte);
}

unsigned int ds3231_read_int(int p_address) {
byte lowByte = DS3231 read(p_address);
byte highByte = DS3231 read(p_address + 1);

return ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xFF00);
}

void displayTime() {
myRTC.updateTime();
print2digits(myRTC.hours);
lcd.print(":");
print2digits(myRTC.minutes);
lcd.print(":");
print2digits(myRTC.seconds);
}

void print2digits(int number) {
if (number >= 0 && number < 10)
lcd.print('0');
lcd.print(number, DEC);
}
 
DS3231 read yazan satırlarda araya nokta konacak yani DS3231.read şeklinde olması gerek
 

Forum istatistikleri

Konular
127,959
Mesajlar
913,914
Kullanıcılar
449,606
Son üye
rasit.

Yeni konular

Geri
Üst