#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define ONE_WIRE_BUS 2 // Pin for DS18B20
#define BUZZER_LED_PIN 3 // Pin for Buzzer and LED
#define BUTTON_PIN 4 // Pin for Manual Check Button
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Address 0x27, 16 columns and 2 rows
float alarmThreshold = 25.0; // Temperature threshold for the alarm in Celsius
boolean alarmTriggered = false;
boolean manualCheckInProgress = false;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
pinMode(BUZZER_LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP); // Using internal pull-up resistor
}
void loop() {
sensors.requestTemperatures();
float temperature = sensors.getTempCByIndex(0);
lcd.clear(); // Clear the LCD display
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature, 1);
lcd.print(" C");
lcd.setCursor(0, 1);
if (temperature > alarmThreshold) {
lcd.print("Above 25 C");
if (!alarmTriggered && !manualCheckInProgress) {
triggerAlarm();
}
} else {
if (alarmTriggered) {
resetAlarm();
}
}
// Manual check for the alarm using a button
if (digitalRead(BUTTON_PIN) == LOW) {
manualCheck();
}
delay(1000); // Adjust the delay as needed
}
void triggerAlarm() {
float temperature;
do {
sensors.requestTemperatures();
temperature = sensors.getTempCByIndex(0);
digitalWrite(BUZZER_LED_PIN, HIGH); // Turn on the LED and Buzzer
delay(500); // Delay for half a second
digitalWrite(BUZZER_LED_PIN, LOW); // Turn off the LED and Buzzer
delay(500); // Delay for half a second
} while (temperature > alarmThreshold);
alarmTriggered = true;
}
void resetAlarm() {
digitalWrite(BUZZER_LED_PIN, LOW); // Turn off the LED and Buzzer
alarmTriggered = false;
}
void manualCheck() {
digitalWrite(BUZZER_LED_PIN, HIGH); // Turn on the LED and Buzzer
delay(1000); // Keep the LED and Buzzer on for 1 second
digitalWrite(BUZZER_LED_PIN, LOW); // Turn off the LED and Buzzer
manualCheckInProgress = true;
delay(1000); // Delay for additional 1 second to prevent conflicts
manualCheckInProgress = false;
}