#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h> // Library for DS1307 RTC
#include "DHT.h"
#define DHTPIN 13 // Pin where the DHT22 is connected
#define DHTTYPE DHT22 // DHT22 sensor
DHT dht(DHTPIN, DHTTYPE);
#define LED1 4 // LED connected to pin 4
#define LED2 16 // LED connected to pin 16
#define LED3 17 // LED connected to pin 17
#define LED4 5 // LED connected to pin 5
LiquidCrystal_I2C lcd(0x27, 20, 4); // Set the LCD address to 0x27 for a 20 chars, 4-line display
RTC_DS1307 rtc; // Initialize RTC
// Timing variables for LED
unsigned long previousMillis = 0;
const long interval = 500; // 500ms delay for LED sequence
void setup() {
// Initialize serial communication for debugging
Serial.begin(115200);
// Initialize the LCD
lcd.init();
lcd.backlight();
// Initialize the DHT22 sensor
dht.begin();
// Initialize the RTC
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
// Check if RTC is running, if not set to compile time
if (!rtc.isrunning()) {
Serial.println("RTC is NOT running, setting the time!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Set RTC to compile date and time
}
// Set LED pins as output
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
}
void loop() {
// LED Sequencing logic
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
// Turn on LEDs from left to right
digitalWrite(LED1, HIGH);
delay(200);
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
delay(200);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
delay(200);
digitalWrite(LED3, LOW);
digitalWrite(LED4, HIGH);
delay(200);
digitalWrite(LED4, LOW);
// Turn on LEDs from right to left
digitalWrite(LED4, HIGH);
delay(200);
digitalWrite(LED4, LOW);
digitalWrite(LED3, HIGH);
delay(200);
digitalWrite(LED3, LOW);
digitalWrite(LED2, HIGH);
delay(200);
digitalWrite(LED2, LOW);
digitalWrite(LED1, HIGH);
delay(200);
digitalWrite(LED1, LOW);
}
// Display date and time on the LCD
DateTime now = rtc.now();
lcd.clear();
// Display date in format: YYYY-MM-DD
lcd.setCursor(0, 0);
lcd.print("Date: ");
lcd.print(now.year());
lcd.print("-");
lcd.print(now.month());
lcd.print("-");
lcd.print(now.day());
// Display time in format: HH:MM:SS
lcd.setCursor(0, 1);
lcd.print("Time: ");
lcd.print(now.hour());
lcd.print(":");
lcd.print(now.minute());
lcd.print(":");
lcd.print(now.second());
// Read DHT22 sensor data
float h = dht.readHumidity();
float t = dht.readTemperature();
// Display temperature and humidity on LCD
lcd.setCursor(0, 2); // Set cursor to the third row
lcd.print("Temp: ");
lcd.print(t);
lcd.print(" C");
lcd.setCursor(0, 3); // Set cursor to the fourth row
lcd.print("Humidity: ");
lcd.print(h);
lcd.print(" %");
delay(1000); // Update every second
}