#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Define pins
#define DHTPIN 2 // DHT sensor pin
#define RELAY_PIN1 5 // Relay pin for heater/fan
#define BUTTON_PIN1 3 // Push button1 pin
#define BUTTON_PIN2 4 // Push button2 pin
// Define the pins
#define DHTTYPE DHT22 // DHT 22 (AM2302)
float currentTemp = 0.0;
float desiredTemp = 35.0; // Default desired temperature
float currentHumidity = 0.0;
float desiredHumidity = 60.0; // Fixed typo
// Initialize the DHT sensor
DHT dht(DHTPIN, DHTTYPE);
// Initialize the LCD (address 0x27, 20 columns and 4 rows)
LiquidCrystal_I2C lcd(0x27, 20, 4);
bool relayState = false;
void setup() {
lcd.init();
lcd.backlight();
dht.begin();
pinMode(13, OUTPUT);
pinMode(RELAY_PIN1, OUTPUT);
pinMode(BUTTON_PIN1, INPUT_PULLUP); // Use internal pull-up resistor
pinMode(BUTTON_PIN2, INPUT_PULLUP); // Use internal pull-up resistor
lcd.setCursor(4, 0);
lcd.print("PV");
lcd.setCursor(12, 0);
lcd.print("SV");
}
void loop() {
// Read current temperature and humidity
currentTemp = dht.readTemperature();
currentHumidity = dht.readHumidity();
// Check if the button is pressed
if (digitalRead(BUTTON_PIN1) == LOW) {
delay(50); // Debounce delay
blinkLCD(6); // Blink the LCD for 5 times
lcd.backlight();
}
if (digitalRead(BUTTON_PIN2) == LOW) {
delay(50); // Debounce delay
desiredTemp += 0.1; // Increase desired temperature by 0.1°C
if (desiredTemp > 50.0) { // Limit to 50°C if it exceeds 50°C
desiredTemp = 50.0;
}
}
// Control the relay based on current temperature
if (currentTemp < desiredTemp) {
digitalWrite(RELAY_PIN1, HIGH); // Turn on heater/fan
relayState = true;
digitalWrite(13, HIGH);
} else {
digitalWrite(RELAY_PIN1, LOW); // Turn off heater/fan
relayState = false;
digitalWrite(13, LOW);
}
// Display the temperature and humidity on the LCD
lcd.setCursor(0, 1);
lcd.print("T: ");
lcd.print(currentTemp);
lcd.setCursor(17, 1);
lcd.print("'C");
lcd.setCursor(0, 2);
lcd.print("H: ");
lcd.print(currentHumidity);
lcd.setCursor(17, 2);
lcd.print(" %");
lcd.setCursor(11, 1);
lcd.print(desiredTemp);
lcd.setCursor(11, 2);
lcd.print(desiredHumidity);
delay(200); // Update every second
}
// Function to blink the LCD
void blinkLCD(int times) {
for (int i = 0; i < times; i++) {
lcd.backlight(); // Turn on backlight
delay(500); // Wait for 500 ms
lcd.noBacklight(); // Turn off backlight
delay(500); // Wait for 500 ms
}
}