Arduino ds3231 saat projesi

Reklam Alanı #5

kahraman

Yeni üye
Katılım
2 Kas 2018
Mesajlar
33
Tepkime puanı
2
Puanları
1
Konum
Zonguldak
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;

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;
}
}
 

alponero

Yeni üye
Katılım
26 Eki 2018
Mesajlar
101
Tepkime puanı
15
Puanları
1
Konum
Hollanda
Bu kadar kodu kendin yazdıysan onu da halledersin. Biraz daha gayret.
 

kahraman

Yeni üye
Katılım
2 Kas 2018
Mesajlar
33
Tepkime puanı
2
Puanları
1
Konum
Zonguldak
Bu kadar kodu kendin yazdıysan onu da halledersin. Biraz daha gayret.
Alıntılarla bu iş yürümez. Kendim yazdım ama örneklere bakarak. Elektrik teknikeriyim az çok bilgim var. 2 haftadr uğraşıyorum bulamadım cevabı. Yardım edersiniz diye düşündüm
 

axellis

Yeni üye
Katılım
26 Eki 2018
Mesajlar
101
Tepkime puanı
9
Puanları
1
Konum
İzmir
Serial monitörü çalıştır ve ilk önce 3231 in ürettiği zaman bilgilerini gör.sonra if içine yaz.ayrıca 3231 kütüphanesi zaman bilgisini string tipinde yapıyor olabilir.eğer öyleyse int tipine çevirip karşılaştır
 

Reklam Alanı #6

Reklam Alanı #1

Yeni konular

Reklam Alanı #2

Üst