#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <Wire.h>
#include <DHT.h>
#define pinDHT 5
#define typDHT22 DHT22
DHT DHT(pinDHT, typDHT22);
int minutes;
int hours;
bool change = 0;
byte krajta = 0;
DateTime blbec;
uint32_t boze = 0;
LiquidCrystal_I2C lcd(0x27,16,2);
RTC_DS1307 RTC;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
lcd.init();
lcd.backlight();
RTC.begin();
DHT.begin();
pinMode(9, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
RTC.adjust(DateTime(__DATE__, __TIME__));
}
void loop() {
// put your main code here, to run repeatedly:
if (!digitalRead(!change)){
boze = millis();
lcd.backlight();
} else if (millis() - boze > 30000){
lcd.noBacklight();
}
blbec = RTC.now();
float tep = DHT.readTemperature();
if(!digitalRead(11))
{
change = true;
krajta = 1;
minutes = blbec.minute();
hours = blbec.hour();
delay(250);
}
if (!change){
Time();
}
if (change){
switch(krajta){
case 1: eminutes();
break;
case 2: ehours();
break;
case 3: ok();
break;
}
}
}
void Time()
{
float tep = DHT.readTemperature();
lcd.setCursor(0,0);
lcd.print("Time ");
lcd.print(blbec.hour()< 10 ? "0" + String(blbec.hour()) : blbec.hour());
lcd.print(":");
lcd.print(blbec.minute() < 10 ? "0" + String(blbec.minute()) : blbec.minute());
lcd.setCursor(0,1);
lcd.print("Temp ");
lcd.print(tep);
lcd.print(" C");
}
void eminutes(){
boze = millis();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print(" ");
lcd.print("EDITING MINUTES");
lcd.setCursor(0,1);
lcd.print(hours < 10 ? "0" + String(hours) : hours);
lcd.print(":");
lcd.print(minutes < 10 ? "0" + String(minutes) : minutes);
lcd.print(" ");
if (!digitalRead(10)){
minutes--;
minutes < 0 ? minutes = 59 : minutes;
delay (200);
}
if (!digitalRead(9)){
minutes++;
minutes > 59 ? minutes = 0 : minutes;
delay (200);
}
if (!digitalRead(11)){
delay(200);
krajta = 2;
}
}
void ehours(){
boze = millis();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print(" ");
lcd.print("EDITING HOURS ");
lcd.setCursor(0,1);
lcd.print(hours < 10 ? "0" + String(hours) : hours);
lcd.print(":");
lcd.print(minutes < 10 ? "0" + String(minutes) : minutes);
if (!digitalRead(10)) {
hours--;
hours < 0 ? hours = 23 : hours;
hours > 23 ? hours = 0 : hours;
delay (200);
}
if (!digitalRead(9)){
hours++;
hours > 59 ? hours = 0 : hours;
delay (200);
}
if (!digitalRead(11)){
delay(200);
krajta = 3;
}
}
void ok(){
boze = millis();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" OK");
lcd.setCursor(0, 1);
lcd.print(" Got it");
krajta=0;
RTC.adjust(DateTime(blbec.year(), blbec.month(), blbec.day(), hours, minutes, blbec.second()));
delay(1000);
change = false;
lcd.clear();
loop();
}