#include <RTClib.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_LINES 2
RTC_DS1307 rtc;
DHT dht(2, DHT22);
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
char daysOfTheWeek[7][3] = {"SUN", "MON", "THU", "WED", "THU", "FRI", "SAT"};
unsigned int displayMode = 1;
unsigned long startTime = 0;
unsigned int switchPin = 4;
unsigned int prevState = 1;
void displayDateTime() {
DateTime now = rtc.now();
String d1 = "Date: " + String(now.year() + 543) + "-" + String(now.month()) + "-" + String(now.day());
String d2 = " (" + String(daysOfTheWeek[now.dayOfTheWeek()]) + ")";
String hh = String(now.hour());
String mm = String(now.minute());
String ss = String(now.second());
lcd.setCursor(0, 0);
lcd.print(d1);
lcd.setCursor(0, 1);
lcd.print("Time: " + hh + ":" + mm + ":" + ss);
}
void displayHumidity() {
int t = dht.readTemperature();
int h = dht.readHumidity();
String message1 = "Temp: ";
message1.concat(t);
String message2 = "Humidity: ";
message2.concat(h);
lcd.setCursor(0, 0);
lcd.print(message1 + "C ");
lcd.setCursor(0, 1);
lcd.print(message2 + "% ");
}
void setup() {
Serial.begin(115200);
if (! rtc.begin()) {
Serial.println("RTC not found");
Serial.flush();
abort();
}
dht.begin();
lcd.begin(LCD_COLUMNS, LCD_LINES);
lcd.backlight();
}
void loop() {
unsigned long currentTime = millis();
if (currentTime - startTime > 5000) {
startTime = currentTime;
if (displayMode == 1) {
displayMode = 2;
} else {
displayMode = 1;
}
}
if (displayMode == 1) {
displayDateTime();
} else {
displayHumidity();
}
}