#include <Wire.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Define the type of sensor and the pin it's connected to
#define DHTPIN 25 // Example pin for DHT22 sensor
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);
// Address for LCD I2C, change according to your module
// Pin Definitions for Relays, Buttons, LEDs, Buzzer
const int relayPins[] = {19, 18, 5, 17}; // Example GPIO pins for relays
const int buttonPins[] = {35, 32, 26, 27}; // Example GPIO pins for buttons
const int ledPins[] = {15, 2, 4, 16}; // Example GPIO pins for LEDs
const int buzzerPin = 15; // Example GPIO pin for buzzer
// Button States
bool buttonState[] = {false, false, false, false};
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
dht.begin();
lcd.begin(16, 2);
lcd.backlight();
// Initialize relay pins as outputs
for (int i = 0; i < 4; i++) {
pinMode(relayPins[i], OUTPUT);
digitalWrite(relayPins[i], LOW); // Initially OFF
}
// Initialize button pins with internal pull-down resistors
for (int i = 0; i < 4; i++) {
pinMode(buttonPins[i], INPUT_PULLUP);
}
// Initialize LED pins as outputs
for (int i = 0; i < 4; i++) {
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW); // Initially OFF
}
// Initialize buzzer pin as output
pinMode(buzzerPin, OUTPUT);
digitalWrite(buzzerPin, LOW); // Initially OFF
// Clear LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Load Control");
// Additional initialization code as needed
}
void loop() {
// Read button states
for (int i = 0; i < 4; i++) {
buttonState[i] = digitalRead(buttonPins[i]);
if (buttonState[i] == LOW) { // Button pressed
// Toggle corresponding relay
digitalWrite(relayPins[i], !digitalRead(relayPins[i]));
// Example: Turn LED on when relay is ON
digitalWrite(ledPins[i], digitalRead(relayPins[i]));
// Example: Activate buzzer briefly
digitalWrite(buzzerPin, HIGH);
delay(50);
digitalWrite(buzzerPin, LOW);
// Update LCD if needed
updateLCD(i, digitalRead(relayPins[i]));
}
}
// Read temperature and humidity from DHT22 sensor
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Print temperature and humidity to serial monitor
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" °C\tHumidity: ");
Serial.print(humidity);
Serial.println(" %");
// Update LCD with temperature and humidity data
updateTemperatureLCD(temperature, humidity);
// Other continuous operations or checks can be placed here
}
void updateLCD(int index, bool state) {
lcd.setCursor(0, 1);
lcd.print("Relay ");
lcd.print(index + 1);
lcd.print(": ");
lcd.print(state ? "ON " : "OFF");
}
void updateTemperatureLCD(float temperature, float humidity) {
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print(" C Humidity: ");
lcd.print(humidity);
lcd.print(" %");
}