#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
float flamelevel = 0;
#define greenLED 7
#define redLED 2
const int minSurvive = 15;
const int idleLow = 20;
const int idleTarget = 30;
const int firingLow = 70;
const int firingHigh = 90;
void setup() {
lcd.init();
lcd.clear();
lcd.backlight();
Serial.begin(9600);
pinMode(greenLED, OUTPUT);
digitalWrite(greenLED, LOW);
pinMode(redLED, OUTPUT);
digitalWrite(redLED, LOW);
}
void loop() {
float analogValue = analogRead(A0);
Serial.print("Sensor RAW: ");
Serial.println(analogValue, 0);
flamelevel = map(analogValue, 0, 1024, 100, 0);
Serial.print(flamelevel, 0);
Serial.println("%");
lcd.setCursor(0, 0);
lcd.print(F("Flame: "));
if (flamelevel >= firingHigh) {
lcd.print("Full Fire");
digitalWrite(greenLED, HIGH);
digitalWrite(redLED, LOW);
delay(300);
digitalWrite(greenLED, LOW);
}
if ((flamelevel >= firingLow) && (flamelevel < firingHigh)) {
lcd.print("Firing ");
digitalWrite(greenLED, HIGH);
digitalWrite(redLED, LOW);
}
if ((flamelevel < firingLow) && (flamelevel > idleLow) ) {
lcd.print("Idle fire ");
digitalWrite(greenLED, HIGH);
digitalWrite(redLED, HIGH);
}
if ((flamelevel <= idleLow) && (flamelevel >= minSurvive) ) {
lcd.print("Low fire ");
digitalWrite(greenLED, LOW);
digitalWrite(redLED, HIGH);
}
if (flamelevel < minSurvive) {
lcd.print("FIRE OUT! ");
digitalWrite(greenLED, LOW);
digitalWrite(redLED, HIGH);
delay(300);
digitalWrite(redLED, LOW);
}
lcd.setCursor(0, 1);
lcd.print(" Level: ");
lcd.print(flamelevel, 0);
lcd.print("% ");
delay(200);
}