#include <Wire.h>
#include <AM2302.h>
#include <LiquidCrystal_I2C.h>
// Constants for threshold values
const float TEMPERATURE_THRESHOLD = 25.0;
const float HUMIDITY_THRESHOLD = 50.0;
// Constants for pin connections
const int AM2302_PIN = 7;
const int BUZZER_PIN = 3;
const int SNOOZE_BUTTON_PIN = 2;
const int BACKLIGHT_BUTTON_PIN = 10;
// Initialize variables
float temperature;
float humidity;
bool snooze = false;
bool backlight = true;
unsigned long snoozeStartTime;
unsigned long backlightStartTime;
// Initialize AM2302 sensor
AM2302 sensor(AM2302_PIN);
// Initialize LCD
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
void setup() {
// Set pin modes
pinMode(BUZZER_PIN, OUTPUT);
pinMode(SNOOZE_BUTTON_PIN, INPUT_PULLUP);
pinMode(BACKLIGHT_BUTTON_PIN, INPUT_PULLUP);
// Initialize LCD
lcd.begin(16, 2);
// Print welcome message
lcd.print("Temperature &");
lcd.setCursor(0, 1);
lcd.print("Humidity Monitor");
delay(1000);
}
void loop() {
// Read temperature and humidity data
temperature = sensor.getTemperature();
humidity = sensor.getHumidity();
// Check for threshold values
if (temperature > TEMPERATURE_THRESHOLD || humidity > HUMIDITY_THRESHOLD) {
digitalWrite(BUZZER_PIN, HIGH);
delay(200);
digitalWrite(BUZZER_PIN, LOW);
}
// Handle snooze button
if (digitalRead(SNOOZE_BUTTON_PIN) == LOW) {
snooze = true;
snoozeStartTime = millis();
}
if (snooze && (millis() - snoozeStartTime) >= 10000) {
snooze = false;
}
// Handle backlight button
if (digitalRead(BACKLIGHT_BUTTON_PIN) == LOW) {
backlight = !backlight;
backlightStartTime = millis();
}
if (!backlight && (millis() - backlightStartTime) >= 60000) {
backlight = false;
}
// Update LCD display with data
lcd.clear();
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print("C");
lcd.setCursor(0, 1);
l