#include <Servo.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#define PIR_PIN 2
#define LED_PIN 4
#define BUZZER_PIN 5
#define SERVO_PIN 6
float flamelevel = 0;
#define greenLED 7
#define redLED 3
const int minSurvive = 15;
const int idleLow = 20;
const int idleTarget = 30;
const int firingLow = 70;
const int firingHigh = 90;
Servo servo;
void setup() {
Serial.begin(9600);
pinMode(PIR_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
servo.attach(SERVO_PIN);
servo.write(90);
pinMode(greenLED, OUTPUT);
digitalWrite(greenLED, LOW);
pinMode(redLED, OUTPUT);
digitalWrite(redLED, LOW);
}
void loop() {
int pirValue = digitalRead(PIR_PIN);
float analogValue = analogRead(A0);
Serial.print("Sensor RAW: ");
Serial.println(analogValue, 0);
flamelevel = map(analogValue, 0, 1024, 100, 0);
if (pirValue == HIGH) {
digitalWrite(LED_PIN, HIGH);
tone(BUZZER_PIN, 2000);
delay(500);
noTone(BUZZER_PIN);
servo.write(0);
delay(5000);
servo.write(90);
} else {
digitalWrite(LED_PIN, LOW);
}
if (flamelevel >= firingHigh) {
digitalWrite(greenLED, HIGH);
digitalWrite(redLED, LOW);
delay(300);
digitalWrite(greenLED, LOW);
}
if ((flamelevel >= firingLow) && (flamelevel < firingHigh)) {
digitalWrite(greenLED, HIGH);
digitalWrite(redLED, LOW);
}
if ((flamelevel < firingLow) && (flamelevel > idleLow) ) {
digitalWrite(greenLED, HIGH);
digitalWrite(redLED, HIGH);
}
if ((flamelevel <= idleLow) && (flamelevel >= minSurvive) ) {
digitalWrite(greenLED, LOW);
digitalWrite(redLED, HIGH);
tone(BUZZER_PIN, 2000);
delay(300);
noTone(BUZZER_PIN);
}
if (flamelevel < minSurvive) {
digitalWrite(greenLED, LOW);
digitalWrite(redLED, HIGH);
tone(BUZZER_PIN, 2000);
delay(300);
noTone(BUZZER_PIN);
delay(300);
digitalWrite(redLED, LOW);
}
}