#include "DHT.h"
#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>
#define Relay1 13
#define vr 35
#define DHTPIN 27
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
RTC_DS3231 rtc;
LiquidCrystal_I2C lcd(0x27, 16, 2);
unsigned long lastActivationTime = 0;
const unsigned long activationInterval = 10 * 1000; // 10 seconds
const unsigned long deactivationDelay = 3 * 1000; // 3 seconds
const unsigned long lcdUpdateInterval = 1000; // Update LCD every 1 second
void setup() {
Serial.begin(9600);
Serial.println(F("DHTxx test!"));
pinMode(Relay1, OUTPUT);
dht.begin();
Wire.begin();
rtc.begin();
lcd.init();
lcd.backlight();
}
void loop() {
unsigned long currentMillis = millis();
float humidity = dht.readHumidity();
int val = analogRead(vr);
float v = (5.0 / 1023.0) * val;
DateTime now = rtc.now();
// Check if it's time to activate the relay
if (currentMillis - lastActivationTime >= activationInterval) {
digitalWrite(Relay1, HIGH); // Activate Relay (assuming it's active-high)
lastActivationTime = currentMillis;
}
// Check if it's time to deactivate the relay
if (currentMillis - lastActivationTime >= deactivationDelay) {
digitalWrite(Relay1, LOW); // Deactivate Relay after delay
}
// Update Serial and LCD status every second
if (currentMillis % lcdUpdateInterval == 0) {
Serial.print("Temperature: ");
Serial.print(dht.readTemperature(), 1); // Print temperature with one decimal place
Serial.print(" °C, Humidity: ");
Serial.print(humidity); // Print humidity without decimal places
Serial.print("%, Potentiometer: ");
Serial.print(v); // Print potentiometer voltage
Serial.print(" V, Time: ");
Serial.print(now.hour(), DEC);
Serial.print(":");
Serial.print(now.minute(), DEC);
Serial.print(":");
Serial.print(now.second(), DEC);
Serial.print(", Relay Status: ");
Serial.println(digitalRead(Relay1) == HIGH ? "ON" : "OFF");
// Map val to 0-100% but cap at 100%
float valPercentage = map(val, 0, 1023, 0, 100);
// Ensure valPercentage doesn't exceed 100%
if (valPercentage > 100) {
valPercentage = 100;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("H:");
lcd.print((int)humidity); // Print humidity without decimal places
lcd.print("% T:");
lcd.print(now.hour(), DEC); // Print hour
lcd.print(":");
lcd.print(now.minute(), DEC); // Print minute
lcd.print(":");
lcd.print(now.second(), DEC); // Print second
lcd.setCursor(0, 1);
lcd.print("Pot:");
lcd.print(valPercentage); // Print potentiometer percentage
lcd.print("% R:");
lcd.print(digitalRead(Relay1) == HIGH ? "ON" : "OFF");
}
}