#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <ESP32Servo.h>
#include "DHTesp.h"
LiquidCrystal_I2C lcd(0x27, 20, 4);
DHTesp dhtSensor;
RTC_DS1307 rtc;
Servo myservo1;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
unsigned long prevMillis = 0;
const long interval = 1000;
const int DHT_PIN = 15;
int a;
void setup () {
Serial.begin(115200);
lcd.init();
lcd.backlight();
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
myservo1.attach(4);
myservo1.write(0);
}
void print2digits(int number) { //Testing on the number before displaying it
if (number >= 0 && number < 10) { //if it's 0<=x<10 we add a 0 before e.g: 4 -> 04
lcd.print('0');
}
lcd.print(number);
}
void jam(){
DateTime now = rtc.now();
lcd.setCursor(0, 0);
//0123456789012345
print2digits(now.day());
lcd.print("/");
print2digits(now.month());
lcd.print("/");
lcd.print(now.year());
lcd.setCursor(11, 0);
//0123456789012345
print2digits(now.hour());
lcd.print(':');
print2digits(now.minute());
lcd.print(':');
print2digits(now.second());
if ((now.hour() == 9) && (now.minute() == 0) && (now.second() == 0)) {
myservo1.write(90);
delay(2000);
myservo1.write(0);
}
else if ((now.hour() == 12) && (now.minute() == 0) && (now.second() == 0)) {
myservo1.write(90);
delay(2000);
myservo1.write(0);
}
else if ((now.hour() == 12) && (now.minute() == 0) && (now.second() == 0)) {
myservo1.write(90);
delay(2000);
myservo1.write(0);
}
else {
myservo1.write(0);
}
String days = daysOfTheWeek[now.dayOfTheWeek()];
if ( days == "Sunday" || days == "Monday" || days == "Friday" ){
lcd.setCursor(6, 2);
lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
}
else if ( days == "Tuesday" || days == "Thursday" || days == "Saturday"){
lcd.setCursor(5, 2);
lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
}
else if ( days == "Wednesday"){
lcd.setCursor(4, 2);
lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
}
}
void dht(){
TempAndHumidity data = dhtSensor.getTempAndHumidity();
lcd.setCursor(0, 1);
//0123456789012345
lcd.print("T:");
lcd.print(data.temperature);
lcd.println("*C");
lcd.setCursor(11, 1);
//0123456789012345
lcd.print("H:");
lcd.print(data.humidity);
lcd.println("%");
}
void loop () {
/*unsigned long currentMillis = millis();
if (currentMillis - prevMillis >= interval) {
prevMillis = currentMillis;
dht();
jam();
//delay(1000);
}*/
dht();
jam();
/*for(a=0;a<=180;a++){
myservo.write(a);
delay(15);
}
delay(1000);
for(a=180;a>=0;a--){
myservo.write(a);
delay(15);
}
delay(1000);*/
}