Arduino ds3231 saat projesi

  • Konbuyu başlatan kahraman
  • Başlangıç tarihi
K

kahraman

Ziyaretçi
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;
}
}
 
A

alponero

Ziyaretçi
Bu kadar kodu kendin yazdıysan onu da halledersin. Biraz daha gayret.
 
K

kahraman

Ziyaretçi
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
 
A

axellis

Ziyaretçi
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
 

Robotikforum.net Nedir?

  • Robotikforum.net 2020 yılında kurulup yayın hayatına başlayan ve Türkiye’de robotik kodlama alanının gelişimine katkıda bulunmak için bu alan ile ilgilenen bireylerin bir birleri ile yardımlaşmaları ve fikir danışmalarını sağlayarak daha iyi öğrenmek için her bir bireyin bilgisini ve tecrübesini alarak kendini geliştirebileceği ve sorularına cevap bulabileceği bir platform olarak kurulmuştur.

Bilgilendirme!!!

İçerik sağlayıcı paylaşım sitelerinden biri olan www.robotikforum.net Adresimizde T.C.K 20.ci Madde ve 5651 Sayılı Kanun'un 4.cü maddesinin (2).ci fıkrasına göre TÜM ÜYELERİMİZ yaptıkları paylaşımlardan sorumludur.

Sayfamızı beğendin mi?