#include "RTClib.h"
#include "Wire.h"
#include <LiquidCrystal_I2C.h>
#include <Button.h>
#include "EEPROM.h"
#include "DHT22.h"
#define ON 1
#define OFF 0
#define DN_PIN 13
#define UP_PIN 12
#define SET_PIN 11
#define ALR_PIN 10
#define PULLUP true
#define INVERT true
#define DEBOUNCE_MS 20
#define REPEAT_FIRST 500
#define REPEAT_INCR 100
#define DHTPIN A0
#define DHTTYPE DHT22
// Custom character definitions
byte znak_a[8] = {
B00000,
B01110,
B00001,
B01111,
B10001,
B01111,
B00010,
B00001
};//ą
byte znak_l[8] = {
B01100,
B00100,
B00110,
B00100,
B01100,
B00100,
B01110,
B00000
};//ł
byte znak_O[8] = {
B01101,
B10010,
B10101,
B10001,
B10001,
B10001,
B01110,
B00000
};//Ó
byte znak_N[8] = {
B00010,
B10101,
B11001,
B10101,
B10011,
B10001,
B10001,
B00000
};
byte znak_S[8] = {
B00001,
B01110,
B10000,
B10000,
B01110,
B00001,
B11110,
B00000
};//Ś
byte znak_Z[8] = {
B00010,
B11111,
B01001,
B00010,
B00100,
B01000,
B11111,
B00000
};//Ź
String days[] = {
"Niedziela",
"Poniedzi" + String("znak_l") + "ek",
"Wtorek",
String("znak_S") + "roda",
"Czwartek",
"Pi" + String("znak_a") + "tek",
"Sobota"
};
DHT22 dht(DHTPIN);
Button btnUP(UP_PIN);
Button btnDN(DN_PIN);
Button btnSET(SET_PIN);
Button btnALR(ALR_PIN);
enum { WAIT, INCR, DECR };
uint8_t STATE;
int count;
int lastCount = -1;
unsigned long rpt = REPEAT_FIRST;
LiquidCrystal_I2C lcd(0x27, 16, 4);
uint8_t dgrsChar[8] = {0x4, 0xa, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0};
RTC_DS1307 rtc;
DateTime now;
struct Timer {
uint8_t startHH, startMM, finishHH, finishMM;
};
Timer timers[8];
uint8_t hh = 0, mm = 0, ss = 0, dd = 0, bb = 0;
int yy = 0;
String Day = " ";
uint8_t setMode = 0, setAlarm = 0;
uint8_t alarmMode = 1;
bool colonState = true; // Stan migania dwukropków
bool timerMode = false; // Stan trybu timera
uint8_t StartHH, StartMM, FinishHH, FinishMM;
uint8_t StartHH2, StartMM2, FinishHH2, FinishMM2;
uint8_t StartHH3, StartMM3, FinishHH3, FinishMM3;
uint8_t StartHH4, StartMM4, FinishHH4, FinishMM4;
uint8_t StartHH5, StartMM5, FinishHH5, FinishMM5;
uint8_t StartHH6, StartMM6, FinishHH6, FinishMM6;
uint8_t StartHH7, StartMM7, FinishHH7, FinishMM7;
uint8_t StartHH8, StartMM8, FinishHH8, FinishMM8;
void setup() {
Serial.begin(9600);
//delay(500);
timerMode = false; // Ustawienie CLOCK na start
setAlarm = 0;
for (int i = 2; i <= 9; i++) {
pinMode(i, OUTPUT);
digitalWrite(i, OFF);
}
pinMode(UP_PIN, INPUT_PULLUP);
pinMode(DN_PIN, INPUT_PULLUP);
pinMode(SET_PIN, INPUT_PULLUP);
pinMode(ALR_PIN, INPUT_PULLUP);
lcd.begin(16, 4);
lcd.createChar(1, znak_a);
lcd.createChar(2, znak_l);
lcd.createChar(3, znak_N);
lcd.createChar(4, znak_O);
lcd.createChar(5, znak_S);
lcd.createChar(6, znak_Z);
rtc.begin();
lcd.createChar(0, dgrsChar);
lcd.setCursor(0, 1);
lcd.print(F(" TIMER "));
lcd.setCursor(0, 2);//+String("\1")+
lcd.print(" 8 PRZEKA" + String("\6") + "NIK" + String("\4") + "W ");
delay(1000);
lcd.clear();
setAlarm = 0;
// Inicjalizacja zmiennych timerów
StartHH = 0; StartMM = 0; FinishHH = 0; FinishMM = 0;
StartHH2 = 0; StartMM2 = 0; FinishHH2 = 0; FinishMM2 = 0;
StartHH3 = 0; StartMM3 = 0; FinishHH3 = 0; FinishMM3 = 0;
StartHH4 = 0; StartMM4 = 0; FinishHH4 = 0; FinishMM4 = 0;
StartHH5 = 0; StartMM5 = 0; FinishHH5 = 0; FinishMM5 = 0;
StartHH6 = 0; StartMM6 = 0; FinishHH6 = 0; FinishMM6 = 0;
StartHH7 = 0; StartMM7 = 0; FinishHH7 = 0; FinishMM7 = 0;
StartHH8 = 0; StartMM8 = 0; FinishHH8 = 0; FinishMM8 = 0;
ReadEeprom();
}
void loop() {
if (btnALR.pressed()) {
Serial.println("ALR przyciśnięty!"); // Sprawdzenie
if (timerMode) {
timerMode = false;
setAlarm = 0;
} else {
timerMode = true;
setAlarm = 2; // Rozpocznij ustawianie pierwszego timera
}
}
float h = dht.getHumidity();
float t = dht.getTemperature();
DateTime now = rtc.now();
int dayOfWeek = now.dayOfTheWeek();
Day = days[dayOfWeek];
btnUP.read();
btnDN.read();
btnSET.read();
btnALR.read();
if (digitalRead(ALR_PIN) == LOW) { // Aktywny stan niski
delay(50); // Debounce
if (digitalRead(ALR_PIN) == LOW) {
Serial.println("ALR przyciśnięty!");
timerMode = !timerMode;
setAlarm = timerMode ? 2 : 0;
while (digitalRead(ALR_PIN) == LOW); // Czekaj na puszczenie
}
}
if (!timerMode) {
if (setMode == 0) {
hh = now.hour();
mm = now.minute();
ss = now.second();
dd = now.day();
bb = now.month();
yy = now.year();
}
if (isnan(h) || isnan(t)) {
lcd.setCursor(0, 0);
lcd.print(F("DHT Error!"));
} else {
//if (setAlarm < 2) {
ss = now.second(); // Aktualizacja sekund
lcd.setCursor(0, 0);
lcd.print((dd < 10) ? "0" : "");
lcd.print(dd);
lcd.print(".");
lcd.print((bb < 10) ? "0" : "");
lcd.print(bb);
lcd.print(".");
lcd.print(yy);
lcd.print(" ");
lcd.print((hh < 10) ? "0" : "");
lcd.print(hh);
lcd.print(colonState ? ":" : " "); // Migające dwukropki
lcd.print((mm < 10) ? "0" : "");
lcd.print(mm);
lcd.print(".");
lcd.print((ss < 10) ? "0" : "");
lcd.print(ss);
lcd.setCursor(0, 1);
lcd.print(Day);
//}
lcd.setCursor(0, 2);
lcd.print("H:");
lcd.print(h);
lcd.print("%");
lcd.setCursor(11, 2);
lcd.print("T:");
lcd.print(t);
lcd.print((char)0);
lcd.print("C");
lcd.setCursor(0, 3);
lcd.print("T: ");
for (int i = 0; i < 8; i++) {
if (handleTimer(timers[i], i + 2)) {
lcd.print(char(255)); // Wyświetl cyfrę w negatywie
lcd.print(" ");
} else {
lcd.print(i + 1);
lcd.print(" ");
}
}
}
}
colonState = !colonState;
//blinking();
setupClock();
if (timerMode && setAlarm > 1) { // Wywołaj setTimer() tylko, gdy setAlarm > 1
setTimer();
}
delay(1000);
}
bool handleTimer(Timer t, int relayPin) {
if (alarmMode == 1 && hh == t.startHH && mm == t.startMM) {
digitalWrite(relayPin, ON);
return true; // Timer jest aktywny
}
if (alarmMode == 1 && hh == t.finishHH && mm == t.finishMM) {
digitalWrite(relayPin, OFF);
return false; // Timer nie jest aktywny
}
return digitalRead(relayPin) == HIGH; // Zwróć aktualny stan przekaźnika
}
void blinking () {
// BLINKING SCREEN
if (setAlarm < 2 && setMode != 0) {
delay (100);
}
if (setAlarm < 2 && setMode == 1) {
lcd.setCursor(5, 0);
lcd.print(F(" "));
delay(100);
}
if (setAlarm < 2 && setMode == 2 && bb > 9) {
lcd.setCursor(8, 0);
lcd.print(F(" "));
delay(100);
}
if (setAlarm < 2 && setMode == 2 && bb <= 9) {
lcd.setCursor(8, 0);
lcd.print(F(" "));
delay(100);
}
if (setAlarm < 2 && setMode == 3 && bb > 9) {
lcd.setCursor(11, 0);
lcd.print(F(" "));
delay(100);
}
if (setAlarm < 2 && setMode == 3 && bb <= 9) {
lcd.setCursor(10, 0);
lcd.print(F(" "));
delay(100);
}
if (setAlarm < 2 && setMode == 4) {
lcd.setCursor(0, 1);
lcd.print(F(" "));
delay(100);
}
if (setAlarm < 2 && setMode == 5) {
lcd.setCursor(3, 1);
lcd.print(F(" "));
delay(100);
}
if (setAlarm < 2 && setMode == 6) {
lcd.setCursor(6, 1);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm != 0 && setAlarm != 1) {
delay (100);
}
// Relay1
if (setMode == 0 && setAlarm == 2) {
lcd.setCursor(11, 0);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm == 3) {
lcd.setCursor(14, 0);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm == 4) {
lcd.setCursor(11, 1);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm == 5) {
lcd.setCursor(14, 1);
lcd.print(F(" "));
delay(100);
}
// Relay2
if (setMode == 0 && setAlarm == 6) {
lcd.setCursor(11, 0);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm == 7) {
lcd.setCursor(14, 0);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm == 8) {
lcd.setCursor(11, 1);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm == 9) {
lcd.setCursor(14, 1);
lcd.print(F(" "));
delay(100);
}
// Relay3
if (setMode == 0 && setAlarm == 10) {
lcd.setCursor(11, 0);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm == 11) {
lcd.setCursor(14, 0);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm == 12) {
lcd.setCursor(11, 1);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm == 13) {
lcd.setCursor(14, 1);
lcd.print(F(" "));
delay(100);
}
// Relay4
if (setMode == 0 && setAlarm == 14) {
lcd.setCursor(11, 0);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm == 15) {
lcd.setCursor(14, 0);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm == 16) {
lcd.setCursor(11, 1);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm == 17) {
lcd.setCursor(14, 1);
lcd.print(F(" "));
delay(100);
}
// Relay5
if (setMode == 0 && setAlarm == 18) {
lcd.setCursor(11, 0);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm == 19) {
lcd.setCursor(14, 0);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm == 20) {
lcd.setCursor(11, 1);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm == 21) {
lcd.setCursor(14, 1);
lcd.print(F(" "));
delay(100);
}
// Relay6
if (setMode == 0 && setAlarm == 22) {
lcd.setCursor(11, 0);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm == 23) {
lcd.setCursor(14, 0);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm == 24) {
lcd.setCursor(11, 1);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm == 25) {
lcd.setCursor(14, 1);
lcd.print(F(" "));
delay(100);
}
// Relay7
if (setMode == 0 && setAlarm == 26) {
lcd.setCursor(11, 0);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm == 27) {
lcd.setCursor(14, 0);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm == 28) {
lcd.setCursor(11, 1);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm == 29) {
lcd.setCursor(14, 1);
lcd.print(F(" "));
delay(100);
}
// Relay8
if (setMode == 0 && setAlarm == 30) {
lcd.setCursor(11, 0);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm == 31) {
lcd.setCursor(14, 0);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm == 32) {
lcd.setCursor(11, 1);
lcd.print(F(" "));
delay(100);
}
if (setMode == 0 && setAlarm == 33) {
lcd.setCursor(14, 1);
lcd.print(F(" "));
delay(100);
}
}
// Ustawianie zegara, wskazówek, alarmu/timera
void setupClock(void) {
btnUP.read();
btnDN.read();
btnSET.read();
btnALR.read();
if (setMode == 7) {
lcd.setCursor(0, 0);
lcd.print(F("Set Date Finish "));
lcd.setCursor(0, 1);
lcd.print(F("Set Time Finish "));
delay(1000);
rtc.adjust(DateTime(yy, bb, dd, hh, mm, ss));
lcd.clear();
setMode = 0;
}
if (setAlarm == 34) {
lcd.setCursor(0, 0);
lcd.print(F("Set Timer Finish"));
lcd.setCursor(0, 1);
lcd.print(F("-EEPROM Updated-"));
WriteEeprom();
delay(2000);
lcd.clear();
setAlarm = 0;
alarmMode = 1;
}
if (setAlarm > 0) {
alarmMode = 0;
}
switch (STATE) {
case WAIT:
if (btnSET.pressed()) {
if (setAlarm > 1 && setAlarm < 34) {
setAlarm++; // Przejdź do następnego timera/kroku
} else {
setMode = setMode + 1; // Przejdź do następnego trybu ustawiania (zegar/data/etc.)
}
}
if (btnALR.pressed()) {
if (timerMode) {
timerMode = false; // Wyłącz tryb timera
setAlarm = 0; // Wyjdź z ustawiania timera
} else {
setAlarm = 2; // Rozpocznij ustawianie timera 1
timerMode = true;
}
}
if (btnUP.pressed()) {
STATE = INCR;
} else if (btnDN.pressed()) {
STATE = DECR;
} else if (btnUP.released()) {
rpt = REPEAT_FIRST;
} else if (btnDN.released()) {
rpt = REPEAT_FIRST;
}
break;
case INCR:
if (setAlarm < 2 && setMode == 1 && dd < 31)dd = dd + 1;
if (setAlarm < 2 && setMode == 2 && bb < 12)bb = bb + 1;
if (setAlarm < 2 && setMode == 3 && yy < 2050)yy = yy + 1;
if (setAlarm < 2 && setMode == 4 && hh < 23)hh = hh + 1;
if (setAlarm < 2 && setMode == 5 && mm < 59)mm = mm + 1;
if (setAlarm < 2 && setMode == 6 && ss < 59)ss = ss + 1;
// Relay1
if (setMode == 0 && setAlarm == 2 && StartHH < 23)StartHH = StartHH + 1;
if (setMode == 0 && setAlarm == 3 && StartMM < 59)StartMM = StartMM + 1;
if (setMode == 0 && setAlarm == 4 && FinishHH < 23)FinishHH = FinishHH + 1;
if (setMode == 0 && setAlarm == 5 && FinishMM < 59)FinishMM = FinishMM + 1;
// Relay2
if (setMode == 0 && setAlarm == 6 && StartHH2 < 23)StartHH2 = StartHH2 + 1;
if (setMode == 0 && setAlarm == 7 && StartMM2 < 59)StartMM2 = StartMM2 + 1;
if (setMode == 0 && setAlarm == 8 && FinishHH2 < 23)FinishHH2 = FinishHH2 + 1;
if (setMode == 0 && setAlarm == 9 && FinishMM2 < 59)FinishMM2 = FinishMM2 + 1;
// Relay3
if (setMode == 0 && setAlarm == 10 && StartHH3 < 23)StartHH3 = StartHH3 + 1;
if (setMode == 0 && setAlarm == 11 && StartMM3 < 59)StartMM3 = StartMM3 + 1;
if (setMode == 0 && setAlarm == 12 && FinishHH3 < 23)FinishHH3 = FinishHH3 + 1;
if (setMode == 0 && setAlarm == 13 && FinishMM3 < 59)FinishMM3 = FinishMM3 + 1;
// Relay4
if (setMode == 0 && setAlarm == 14 && StartHH4 < 23)StartHH4 = StartHH4 + 1;
if (setMode == 0 && setAlarm == 15 && StartMM4 < 59)StartMM4 = StartMM4 + 1;
if (setMode == 0 && setAlarm == 16 && FinishHH4 < 23)FinishHH4 = FinishHH4 + 1;
if (setMode == 0 && setAlarm == 17 && FinishMM4 < 59)FinishMM4 = FinishMM4 + 1;
// Relay5
if (setMode == 0 && setAlarm == 18 && StartHH5 < 23)StartHH5 = StartHH5 + 1;
if (setMode == 0 && setAlarm == 19 && StartMM5 < 59)StartMM5 = StartMM5 + 1;
if (setMode == 0 && setAlarm == 20 && FinishHH5 < 23)FinishHH5 = FinishHH5 + 1;
if (setMode == 0 && setAlarm == 21 && FinishMM5 < 59)FinishMM5 = FinishMM5 + 1;
// Relay6
if (setMode == 0 && setAlarm == 22 && StartHH6 < 23)StartHH6 = StartHH6 + 1;
if (setMode == 0 && setAlarm == 23 && StartMM6 < 59)StartMM6 = StartMM6 + 1;
if (setMode == 0 && setAlarm == 24 && FinishHH6 < 23)FinishHH6 = FinishHH6 + 1;
if (setMode == 0 && setAlarm == 25 && FinishMM6 < 59)FinishMM6 = FinishMM6 + 1;
// Relay7
if (setMode == 0 && setAlarm == 26 && StartHH7 < 23)StartHH7 = StartHH7 + 1;
if (setMode == 0 && setAlarm == 27 && StartMM7 < 59)StartMM7 = StartMM7 + 1;
if (setMode == 0 && setAlarm == 28 && FinishHH7 < 23)FinishHH7 = FinishHH7 + 1;
if (setMode == 0 && setAlarm == 29 && FinishMM7 < 59)FinishMM7 = FinishMM7 + 1;
// Relay8
if (setMode == 0 && setAlarm == 30 && StartHH8 < 23)StartHH8 = StartHH8 + 1;
if (setMode == 0 && setAlarm == 31 && StartMM8 < 59)StartMM8 = StartMM8 + 1;
if (setMode == 0 && setAlarm == 32 && FinishHH8 < 23)FinishHH8 = FinishHH8 + 1;
if (setMode == 0 && setAlarm == 33 && FinishMM8 < 59)FinishMM8 = FinishMM8 + 1;
STATE = WAIT;
break;
case DECR:
if (setAlarm < 2 && setMode == 1 && dd > 1)dd = dd - 1;
if (setAlarm < 2 && setMode == 2 && bb > 1)bb = bb - 1;
if (setAlarm < 2 && setMode == 3 && yy > 2000)yy = yy - 1;
if (setAlarm < 2 && setMode == 4 && hh > 0)hh = hh - 1;
if (setAlarm < 2 && setMode == 5 && mm > 0)mm = mm - 1;
if (setAlarm < 2 && setMode == 6 && ss > 0)ss = ss - 1;
// Relay1
if (setMode == 0 && setAlarm == 2 && StartHH > 0)StartHH = StartHH - 1;
if (setMode == 0 && setAlarm == 3 && StartMM > 0)StartMM = StartMM - 1;
if (setMode == 0 && setAlarm == 4 && FinishHH > 0)FinishHH = FinishHH - 1;
if (setMode == 0 && setAlarm == 5 && FinishMM > 0)FinishMM = FinishMM - 1;
// Relay2
if (setMode == 0 && setAlarm == 6 && StartHH2 > 0)StartHH2 = StartHH2 - 1;
if (setMode == 0 && setAlarm == 7 && StartMM2 > 0)StartMM2 = StartMM2 - 1;
if (setMode == 0 && setAlarm == 8 && FinishHH2 > 0)FinishHH2 = FinishHH2 - 1;
if (setMode == 0 && setAlarm == 9 && FinishMM2 > 0)FinishMM2 = FinishMM2 - 1;
// Relay3
if (setMode == 0 && setAlarm == 10 && StartHH3 > 0)StartHH3 = StartHH3 - 1;
if (setMode == 0 && setAlarm == 11 && StartMM3 > 0)StartMM3 = StartMM3 - 1;
if (setMode == 0 && setAlarm == 12 && FinishHH3 > 0)FinishHH3 = FinishHH3 - 1;
if (setMode == 0 && setAlarm == 13 && FinishMM3 > 0)FinishMM3 = FinishMM3 - 1;
// Relay4
if (setMode == 0 && setAlarm == 14 && StartHH4 > 0)StartHH4 = StartHH4 - 1;
if (setMode == 0 && setAlarm == 15 && StartMM4 > 0)StartMM4 = StartMM4 - 1;
if (setMode == 0 && setAlarm == 16 && FinishHH4 > 0)FinishHH4 = FinishHH4 - 1;
if (setMode == 0 && setAlarm == 17 && FinishMM4 > 0)FinishMM4 = FinishMM4 - 1;
// Relay5
if (setMode == 0 && setAlarm == 18 && StartHH5 > 0)StartHH5 = StartHH5 - 1;
if (setMode == 0 && setAlarm == 19 && StartMM5 > 0)StartMM5 = StartMM5 - 1;
if (setMode == 0 && setAlarm == 20 && FinishHH5 > 0)FinishHH5 = FinishHH5 - 1;
if (setMode == 0 && setAlarm == 21 && FinishMM5 > 0)FinishMM5 = FinishMM5 - 1;
// Relay6
if (setMode == 0 && setAlarm == 22 && StartHH6 > 0)StartHH6 = StartHH6 - 1;
if (setMode == 0 && setAlarm == 23 && StartMM6 > 0)StartMM6 = StartMM6 - 1;
if (setMode == 0 && setAlarm == 24 && FinishHH6 > 0)FinishHH6 = FinishHH6 - 1;
if (setMode == 0 && setAlarm == 25 && FinishMM6 > 0)FinishMM6 = FinishMM6 - 1;
// Relay7
if (setMode == 0 && setAlarm == 26 && StartHH7 > 0)StartHH7 = StartHH7 - 1;
if (setMode == 0 && setAlarm == 27 && StartMM7 > 0)StartMM7 = StartMM7 - 1;
if (setMode == 0 && setAlarm == 28 && FinishHH7 > 0)FinishHH7 = FinishHH7 - 1;
if (setMode == 0 && setAlarm == 29 && FinishMM7 > 0)FinishMM7 = FinishMM7 - 1;
// Relay8
if (setMode == 0 && setAlarm == 30 && StartHH8 > 0)StartHH8 = StartHH8 - 1;
if (setMode == 0 && setAlarm == 31 && StartMM8 > 0)StartMM8 = StartMM8 - 1;
if (setMode == 0 && setAlarm == 32 && FinishHH8 > 0)FinishHH8 = FinishHH8 - 1;
if (setMode == 0 && setAlarm == 33 && FinishMM8 > 0)FinishMM8 = FinishMM8 - 1;
STATE = WAIT;
break;
}
}
void Timer1 (uint8_t StartHH, uint8_t StartMM, uint8_t FinishHH, uint8_t FinishMM) {
// Timer ON
if (alarmMode == 1 && hh >= StartHH && mm >= StartMM) {
digitalWrite(2, ON);
}
// Timer OFF
if (alarmMode == 1 && hh >= FinishHH && mm >= FinishMM ) {
digitalWrite(2, OFF);
// alarmMode = 0;
}
}
void Timer2 (uint8_t StartHH2, uint8_t StartMM2, uint8_t FinishHH2, uint8_t FinishMM2) {
//T imer ON
if (alarmMode == 1 && hh >= StartHH2 && mm >= StartMM2) {
digitalWrite(3, ON);
}
// Timer OFF
if (alarmMode == 1 && hh >= FinishHH2 && mm >= FinishMM2 ) {
digitalWrite(3, OFF);
// alarmMode = 0;
}
}
void Timer3 (uint8_t StartHH3, uint8_t StartMM3, uint8_t FinishHH3, uint8_t FinishMM3) {
// Timer ON
if (alarmMode == 1 && hh >= StartHH3 && mm >= StartMM3) {
digitalWrite(4, ON);
}
// Timer OFF
if (alarmMode == 1 && hh >= FinishHH3 && mm >= FinishMM3 ) {
digitalWrite(4, OFF);
// alarmMode = 0;
}
}
void Timer4 (uint8_t StartHH4, uint8_t StartMM4, uint8_t FinishHH4, uint8_t FinishMM4) {
// Timer ON
if (alarmMode == 1 && hh >= StartHH4 && mm >= StartMM4) {
digitalWrite(5, ON);
}
// Timer OFF
if (alarmMode == 1 && hh >= FinishHH4 && mm >= FinishMM4 ) {
digitalWrite(5, OFF);
//alarmMode = 0;
}
}
void Timer5 (uint8_t StartHH5, uint8_t StartMM5, uint8_t FinishHH5, uint8_t FinishMM5) {
// Timer ON
if (alarmMode == 1 && hh >= StartHH5 && mm >= StartMM5) {
digitalWrite(6, ON);
}
// Timer OFF
if (alarmMode == 1 && hh >= FinishHH5 && mm >= FinishMM5 ) {
digitalWrite(6, OFF);
// alarmMode = 0;
}
}
void Timer6 (uint8_t StartHH6, uint8_t StartMM6, uint8_t FinishHH6, uint8_t FinishMM6) {
// Timer ON
if (alarmMode == 1 && hh >= StartHH6 && mm >= StartMM6) {
digitalWrite(7, ON);
}
// Timer OFF
if (alarmMode == 1 && hh >= FinishHH6 && mm >= FinishMM6 ) {
digitalWrite(7, OFF);
// alarmMode = 0;
}
}
void Timer7 (uint8_t StartHH7, uint8_t StartMM7, uint8_t FinishHH7, uint8_t FinishMM7) {
// Timer ON
if (alarmMode == 1 && hh >= StartHH7 && mm >= StartMM7) {
digitalWrite(8, ON);
}
// Timer OFF
if (alarmMode == 1 && hh >= FinishHH7 && mm >= FinishMM7 ) {
digitalWrite(8, OFF);
// alarmMode = 0;
}
}
void Timer8 (uint8_t StartHH8, uint8_t StartMM8, uint8_t FinishHH8, uint8_t FinishMM8) {
//Timer ON
if (alarmMode == 1 && hh >= StartHH8 && mm >= StartMM8) {
digitalWrite(9, ON);
}
// Timer OFF
if (alarmMode == 1 && hh >= FinishHH8 && mm >= FinishMM8 ) {
digitalWrite(9, OFF);
// alarmMode = 0;
}
}
void setTimer() {
if (setAlarm > 1) {
int timerIndex = (setAlarm - 2) / 4;
int editMode = (setAlarm - 2) % 4;
lcd.setCursor(0, 0);
lcd.print("K");
lcd.print(timerIndex + 1);
lcd.print(" ");
}
// Relay1
if (setMode == 0 && setAlarm != 0 && setAlarm != 1 && setAlarm >= 2 && setAlarm <= 5 ) {
lcd.setCursor (0, 0);
lcd.print(F("K1 Start :"));
lcd.setCursor (11, 0);
if (StartHH < 10) {
lcd.print(F("0"));
}
lcd.print (StartHH); lcd.print(F(":"));
if (StartMM < 10) {
lcd.print(F("0"));
}
lcd.print (StartMM);
lcd.setCursor (0, 1);
lcd.print(F("K1 Koniec:"));
lcd.setCursor (11, 1);
if (FinishHH < 10) {
lcd.print(F("0"));
}
lcd.print (FinishHH); lcd.print(F(":"));
if (FinishMM < 10) {
lcd.print(F("0"));
}
lcd.print (FinishMM);
}
// Relay2
if (setMode == 0 && setAlarm != 0 && setAlarm != 1 && setAlarm >= 6 && setAlarm <= 9 ) {
lcd.setCursor (0, 0);
lcd.print(F("K2 Start :"));
lcd.setCursor (11, 0);
if (StartHH2 < 10) {
lcd.print(F("0"));
}
lcd.print (StartHH2); lcd.print(F(":"));
if (StartMM2 < 10) {
lcd.print(F("0"));
}
lcd.print (StartMM2);
lcd.setCursor (0, 1);
lcd.print(F("K2 Koniec:"));
lcd.setCursor (11, 1);
if (FinishHH2 < 10) {
lcd.print(F("0"));
}
lcd.print (FinishHH2); lcd.print(F(":"));
if (FinishMM2 < 10) {
lcd.print(F("0"));
}
lcd.print (FinishMM2);
}
// Relay3
if (setMode == 0 && setAlarm != 0 && setAlarm != 1 && setAlarm >= 10 && setAlarm <= 13 ) {
lcd.setCursor (0, 0);
lcd.print(F("K3 Start :"));
lcd.setCursor (11, 0);
if (StartHH3 < 10) {
lcd.print(F("0"));
}
lcd.print (StartHH3); lcd.print(F(":"));
if (StartMM3 < 10) {
lcd.print(F("0"));
}
lcd.print (StartMM3);
lcd.setCursor (0, 1);
lcd.print(F("K3 Koniec:"));
lcd.setCursor (11, 1);
if (FinishHH3 < 10) {
lcd.print(F("0"));
}
lcd.print (FinishHH3); lcd.print(F(":"));
if (FinishMM3 < 10) {
lcd.print(F("0"));
}
lcd.print (FinishMM3);
}
// Relay4
if (setMode == 0 && setAlarm != 0 && setAlarm != 1 && setAlarm >= 14 && setAlarm <= 17 ) {
lcd.setCursor (0, 0);
lcd.print(F("K4 Start :"));
lcd.setCursor (11, 0);
if (StartHH4 < 10) {
lcd.print(F("0"));
}
lcd.print (StartHH4); lcd.print(F(":"));
if (StartMM4 < 10) {
lcd.print(F("0"));
}
lcd.print (StartMM4);
lcd.setCursor (0, 1);
lcd.print(F("K4 Koniec:"));
lcd.setCursor (11, 1);
if (FinishHH4 < 10) {
lcd.print(F("0"));
}
lcd.print (FinishHH4); lcd.print(F(":"));
if (FinishMM4 < 10) {
lcd.print(F("0"));
}
lcd.print (FinishMM4);
}
// Relay5
if (setMode == 0 && setAlarm != 0 && setAlarm != 1 && setAlarm >= 18 && setAlarm <= 21 ) {
lcd.setCursor (0, 0);
lcd.print(F("K5 Start :"));
lcd.setCursor (11, 0);
if (StartHH5 < 10) {
lcd.print(F("0"));
}
lcd.print (StartHH5); lcd.print(F(":"));
if (StartMM5 < 10) {
lcd.print(F("0"));
}
lcd.print (StartMM5);
lcd.setCursor (0, 1);
lcd.print(F("K5 Koniec:"));
lcd.setCursor (11, 1);
if (FinishHH5 < 10) {
lcd.print(F("0"));
}
lcd.print (FinishHH5); lcd.print(F(":"));
if (FinishMM5 < 10) {
lcd.print(F("0"));
}
lcd.print (FinishMM5);
}
// Relay6
if (setMode == 0 && setAlarm != 0 && setAlarm != 1 && setAlarm >= 22 && setAlarm <= 25 ) {
lcd.setCursor (0, 0);
lcd.print(F("K6 Start :"));
lcd.setCursor (11, 0);
if (StartHH6 < 10) {
lcd.print(F("0"));
}
lcd.print (StartHH6); lcd.print(F(":"));
if (StartMM6 < 10) {
lcd.print(F("0"));
}
lcd.print (StartMM6);
lcd.setCursor (0, 1);
lcd.print(F("K6 Koniec:"));
lcd.setCursor (11, 1);
if (FinishHH6 < 10) {
lcd.print(F("0"));
}
lcd.print (FinishHH6); lcd.print(F(":"));
if (FinishMM6 < 10) {
lcd.print(F("0"));
}
lcd.print (FinishMM6);
}
// Relay7
if (setMode == 0 && setAlarm != 0 && setAlarm != 1 && setAlarm >= 26 && setAlarm <= 29 ) {
lcd.setCursor (0, 0);
lcd.print(F("K7 Start :"));
lcd.setCursor (11, 0);
if (StartHH7 < 10) {
lcd.print(F("0"));
}
lcd.print (StartHH7); lcd.print(F(":"));
if (StartMM7 < 10) {
lcd.print(F("0"));
}
lcd.print (StartMM7);
lcd.setCursor (0, 1);
lcd.print(F("K7 Koniec:"));
lcd.setCursor (11, 1);
if (FinishHH7 < 10) {
lcd.print(F("0"));
}
lcd.print (FinishHH7); lcd.print(F(":"));
if (FinishMM7 < 10) {
lcd.print(F("0"));
}
lcd.print (FinishMM7);
}
// Relay8
if (setMode == 0 && setAlarm != 0 && setAlarm != 1 && setAlarm >= 30 && setAlarm <= 33 ) {
lcd.setCursor (0, 0);
lcd.print(F("K8 Start :"));
lcd.setCursor (11, 0);
if (StartHH8 < 10) {
lcd.print(F("0"));
}
lcd.print (StartHH8); lcd.print(F(":"));
if (StartMM8 < 10) {
lcd.print(F("0"));
}
lcd.print (StartMM8);
lcd.setCursor (0, 1);
lcd.print(F("K8 Koniec:"));
lcd.setCursor (11, 1);
if (FinishHH8 < 10) {
lcd.print(F("0"));
}
lcd.print (FinishHH8); lcd.print(F(":"));
if (FinishMM8 < 10) {
lcd.print(F("0"));
}
lcd.print (FinishMM8);
}
}
void ReadEeprom () {
StartHH = EEPROM.read(1);
StartMM = EEPROM.read(2);
FinishHH = EEPROM.read(3);
FinishMM = EEPROM.read(4);
StartHH2 = EEPROM.read(5);
StartMM2 = EEPROM.read(6);
FinishHH2 = EEPROM.read(7);
FinishMM2 = EEPROM.read(8);
StartHH3 = EEPROM.read(9);
StartMM3 = EEPROM.read(10);
FinishHH3 = EEPROM.read(11);
FinishMM3 = EEPROM.read(12);
StartHH4 = EEPROM.read(13);
StartMM4 = EEPROM.read(14);
FinishHH4 = EEPROM.read(15);
FinishMM4 = EEPROM.read(16);
StartHH5 = EEPROM.read(17);
StartMM5 = EEPROM.read(18);
FinishHH5 = EEPROM.read(19);
FinishMM5 = EEPROM.read(20);
StartHH6 = EEPROM.read(21);
StartMM6 = EEPROM.read(22);
FinishHH6 = EEPROM.read(23);
FinishMM6 = EEPROM.read(24);
StartHH7 = EEPROM.read(25);
StartMM7 = EEPROM.read(26);
FinishHH7 = EEPROM.read(27);
FinishMM7 = EEPROM.read(28);
StartHH8 = EEPROM.read(29);
StartMM8 = EEPROM.read(30);
FinishHH8 = EEPROM.read(31);
FinishMM8 = EEPROM.read(32);
}
void WriteEeprom () {
EEPROM.write(1, StartHH);
EEPROM.write(2, StartMM);
EEPROM.write(3, FinishHH);
EEPROM.write(4, FinishMM);
EEPROM.write(5, StartHH2);
EEPROM.write(6, StartMM2);
EEPROM.write(7, FinishHH2);
EEPROM.write(8, FinishMM2);
EEPROM.write(9, StartHH3);
EEPROM.write(10, StartMM3);
EEPROM.write(11, FinishHH3);
EEPROM.write(12, FinishMM3);
EEPROM.write(13, StartHH4);
EEPROM.write(14, StartMM4);
EEPROM.write(15, FinishHH4);
EEPROM.write(16, FinishMM4);
EEPROM.write(17, StartHH5);
EEPROM.write(18, StartMM5);
EEPROM.write(19, FinishHH5);
EEPROM.write(20, FinishMM5);
EEPROM.write(21, StartHH6);
EEPROM.write(22, StartMM6);
EEPROM.write(23, FinishHH6);
EEPROM.write(24, FinishMM6);
EEPROM.write(25, StartHH7);
EEPROM.write(26, StartMM7);
EEPROM.write(27, FinishHH7);
EEPROM.write(28, FinishMM7);
EEPROM.write(29, StartHH8);
EEPROM.write(30, StartMM8);
EEPROM.write(31, FinishHH8);
EEPROM.write(32, FinishMM8);
}
nano:12
nano:11
nano:10
nano:9
nano:8
nano:7
nano:6
nano:5
nano:4
nano:3
nano:2
nano:GND.2
nano:RESET.2
nano:0
nano:1
nano:13
nano:3.3V
nano:AREF
nano:A0
nano:A1
nano:A2
nano:A3
nano:A4
nano:A5
nano:A6
nano:A7
nano:5V
nano:RESET
nano:GND.1
nano:VIN
nano:12.2
nano:5V.2
nano:13.2
nano:11.2
nano:RESET.3
nano:GND.3
relay1:VCC
relay1:GND
relay1:IN
relay1:NC
relay1:COM
relay1:NO
relay2:VCC
relay2:GND
relay2:IN
relay2:NC
relay2:COM
relay2:NO
relay3:VCC
relay3:GND
relay3:IN
relay3:NC
relay3:COM
relay3:NO
relay4:VCC
relay4:GND
relay4:IN
relay4:NC
relay4:COM
relay4:NO
relay5:VCC
relay5:GND
relay5:IN
relay5:NC
relay5:COM
relay5:NO
relay6:VCC
relay6:GND
relay6:IN
relay6:NC
relay6:COM
relay6:NO
relay7:VCC
relay7:GND
relay7:IN
relay7:NC
relay7:COM
relay7:NO
relay8:VCC
relay8:GND
relay8:IN
relay8:NC
relay8:COM
relay8:NO
rtc1:GND
rtc1:5V
rtc1:SDA
rtc1:SCL
rtc1:SQW
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r
btn4:1.l
btn4:2.l
btn4:1.r
btn4:2.r
dht1:VCC
dht1:SDA
dht1:NC
dht1:GND