- Konuyu başlatan
- #1
Arkadaşlar kendime ds3231 ile dijital saat yaptım. Sonra onu butonlar yardımı ile ayarlamayı da başardım. Şimdi ise iki zaman dilimi belirleyip bu iki zaman arasında ledi yakıp söndürmeyi planlıyorum. Nasıl yapacağım işi içinden çıkamadım. Lütfen yardımcı olur musunuz?
Kodlarım aşağıda yer almaktadır;
Kodlarım aşağıda yer almaktadır;
Kod:
#include <LiquidCrystal_I2C.h>
#include <DS3231.h>
#include <EEPROM.h>
LiquidCrystal_I2C lcd(0x27 , 16 , 2);
DS3231 rtc(SDA, SCL);
const int menu = 22;
const int arti = 24;
const int eksi = 26;
const int led = 50;
int durum_menu;
int durum_arti;
int durum_eksi;
int sayi = 0;
int saat = 0;
int dakika = 0;
int yil = 2017;
int ay = 0;
int gun = 0;
int eesaat = 0;
int eedakika = 0;
int eepromsaat=0;
int eepromdakika=0;
void setup()
{
pinMode(menu , INPUT);
pinMode(arti , INPUT);
pinMode(eksi , INPUT);
pinMode(led , OUTPUT);
lcd.begin();
rtc.begin();
}
void loop()
{
durum_menu = digitalRead(menu);
durum_arti = digitalRead(arti);
durum_eksi = digitalRead(eksi);
eepromsaat = EEPROM.read(1);
eepromdakika = EEPROM.read(2);
if(eepromsaat == rtc.getTimeStr(saat) && eepromdakika == rtc.getTimeStr(dakika))
{
digitalWrite(led, HIGH);
}
if(durum_menu == HIGH)
{
sayi++;
delay(200);
lcd.clear();
}
if(sayi >= 10)
{
sayi = 0;
}
switch(sayi)
{
case 0:
lcd.setCursor(0,0);
lcd.print("TARIH:");
lcd.print(rtc.getDateStr());
lcd.setCursor(0,1);
lcd.print("SAAT:");
lcd.print(rtc.getTimeStr());
break;
case 1:
if(durum_arti == HIGH)
{
saat++;
delay(200);
lcd.clear();
}
else if(durum_eksi == HIGH)
{
saat--;
delay(200);
lcd.clear();
}
lcd.setCursor(0,0);
lcd.print("SAAT= ");
lcd.print(saat);
break;
case 2:
if(durum_arti == HIGH)
{
dakika++;
delay(200);
lcd.clear();
}
else if(durum_eksi == HIGH)
{
dakika--;
delay(200);
lcd.clear();
}
lcd.setCursor(0,0);
lcd.print("DAKIKA=");
lcd.print(dakika);
break;
case 3:
if(durum_arti == HIGH)
{
yil++;
delay(200);
lcd.clear();
}
else if(durum_eksi == HIGH)
{
yil--;
delay(200);
lcd.clear();
}
lcd.setCursor(0,0);
lcd.print("YIL AYARLA=");
lcd.print(yil);
break;
case 4:
if(durum_arti == HIGH)
{
ay++;
delay(200);
lcd.clear();
}
else if(durum_eksi == HIGH)
{
ay--;
delay(200);
lcd.clear();
}
lcd.setCursor(0,0);
lcd.print("AY AYARLA=");
lcd.print(ay);
break;
case 5:
if(durum_arti == HIGH)
{
gun++;
delay(200);
lcd.clear();
}
else if(durum_eksi == HIGH)
{
gun--;
delay(200);
lcd.clear();
}
lcd.setCursor(0,0);
lcd.print("GUN AYARLA=");
lcd.print(gun);
break;
case 6:
lcd.setCursor(0,0);
lcd.print("CIKIS");
lcd.setCursor(0,1);
lcd.print("ARTI`ya BAS");
if(durum_arti == HIGH)
{
rtc.setTime(saat, dakika, 00);
rtc.setDate(gun, ay, yil);
}
break;
case 7:
if(durum_arti == HIGH)
{
eesaat++;
delay(200);
lcd.clear();
}
else if(durum_eksi == HIGH)
{
eesaat--;
delay(200);
lcd.clear();
}
lcd.setCursor(0,0);
lcd.print("Bas. Saat:");
lcd.print(eesaat);
break;
case 8:
if(durum_arti == HIGH)
{
eedakika++;
delay(200);
lcd.clear();
}
else if(durum_eksi == HIGH)
{
eedakika--;
delay(200);
lcd.clear();
}
lcd.setCursor(0,0);
lcd.print("Bas. Dak:");
lcd.print(eedakika);
break;
case 9:
lcd.setCursor(0,0);
lcd.print("BAS. TAMAM");
lcd.setCursor(0,1);
lcd.print("ARTI`ya BAS");
if(durum_arti == HIGH)
{
EEPROM.write(1, eesaat);
EEPROM.write(2, eedakika);
}
break;
}
}