EEPROM kullanarak rölenin durumunu kaydetmek ve RTC'den zamanı kontrol etmek, sistemin güvenilirliğini artıracaktır.
*****************************************************
#include <EEPROM.h>
#include <DS1302.h>
#include <LiquidCrystal.h>
// DS1302 RTC pinleri
const int DS1302_SCLK_PIN = 5; // SCLK pin
const int DS1302_IO_PIN = 6; // I/O pin
const int DS1302_CE_PIN = 7; // CE pin
// Röle pini
const int RELAY_PIN = 8; // Röle pinini uygun bir GPIO pinine bağlayın
//
Lcd Ekran pini
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// RTC modülü
DS1302 myRTC(DS1302_SCLK_PIN, DS1302_IO_PIN, DS1302_CE_PIN);
void setup() {
// Röle pinini çıkış olarak ayarlayın
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH); // Röleyi başlangıçta Off yap
// LCD ekranı başlatın
lcd.begin(16, 2);
// RTC'yi başlatın
myRTC.halt(false);
myRTC.writeProtect(false);
// Başlangıç mesajı
lcd.setCursor(0, 0);
lcd.print("Saat Ayarlaniyor");
lcd.setCursor(0, 1);
lcd.print("Lutfen Bekleyin");
delay(2000); // 2 saniye bekleyin
lcd.clear();
// EEPROM'dan son durumu geri yükleyin
int relayState = EEPROM.read(0);
if (relayState == 0) {
digitalWrite(RELAY_PIN, LOW); // Röle On
} else {
digitalWrite(RELAY_PIN, HIGH); // Röle Off
}
}
void loop() {
myRTC.updateTime();
if(myRTC.dayofmonth % 2 == 0) {
if(myRTC.hours == 21 && myRTC.minutes == 0) {
digitalWrite(RELAY_PIN, LOW); // Röleyi On
lcd.setCursor(0, 1);
lcd.print("SULAMA YAPILIYOR");
EEPROM.write(0, 0); // Röle On durumunu kaydet
}
if(myRTC.hours == 21 && myRTC.minutes == 10) {
digitalWrite(RELAY_PIN, HIGH); // Röle off
lcd.setCursor(0, 1);
lcd.print(" SULAMA YAPILDI ");
EEPROM.write(0, 1); // Röle Off durumunu kaydet
}
}
delay(60000); // 1 dakika bekleyin
}
*******************************************************