#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
float flamelevel = 0;
#define redLED 2
#define relayPin 5 // Define the pin connected to the relay module
const int firingHigh = 50;
const int firingLOW = 5;
unsigned long previousMillis = 0; // Variable to store the previous millis
const long interval = 500; // Interval for displaying "Danger" (in milliseconds)
bool displayDanger = false; // Variable to control displaying "Danger"
bool lampState = false; // Variable to control the lamp state
void setup() {
lcd.init();
lcd.clear();
lcd.backlight();
pinMode(redLED, OUTPUT);
digitalWrite(redLED, LOW);
pinMode(A2, OUTPUT);
pinMode(relayPin, OUTPUT); // Set the relay pin as an output
digitalWrite(relayPin, LOW); // Ensure the relay is initially off
}
void loop()
{
float analogValue = analogRead(A0);
flamelevel = map(analogValue, 0, 1024, 100, 0);
lcd.setCursor(0, 0);
if ((flamelevel < firingHigh ) && ( flamelevel > firingLOW))
{
lcd.clear();
lcd.print("Risque");
digitalWrite(relayPin, LOW); // Turn off the relay
lampState = false; // Turn off the lamp
digitalWrite(redLED, HIGH);
delay(300);
digitalWrite(redLED, LOW);
delay(300);
}
if (flamelevel >= firingHigh)
{
unsigned long currentMillis = millis(); // Get the current time
if (currentMillis - previousMillis >= interval) { // Check if it's time to toggle displayDanger
displayDanger = !displayDanger; // Toggle displayDanger
if (displayDanger) {
lcd.clear();
lcd.setCursor(3, 0); // Move cursor to the middle of the LCD
lcd.print("Danger!!"); // Display "Danger"
tone(A2, 1000, 700); // Play a tone at 5000 Hz for 2000 milliseconds (louder tone)
digitalWrite(relayPin, HIGH); // Turn on the relay
lampState = true; // Turn on the lamp
} else {
lcd.clear(); // Clear the LCD to hide "Dangerous"
noTone(A2); // Stop the buzzer tone
digitalWrite(relayPin, LOW); // Turn off the relay
lampState = false; // Turn off the lamp
}
previousMillis = currentMillis; // Save the last time we toggled displayDanger
}
if (displayDanger) {
digitalWrite(redLED, HIGH);
} else {
digitalWrite(redLED, LOW);
}
}
if (flamelevel <= firingLOW)
{
lcd.clear();
lcd.print("Normal");
digitalWrite(relayPin, LOW); // Turn off the relay
lampState = false; // Turn off the lamp
digitalWrite(redLED, LOW);
}
}