#define GREEN 13
#define YELLOW 12
#define RED 11
#define BUZZER 10
#define THRESHOLD_CONTROL 1400
#define THRESHOLD_CRITICAL 5000
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <MQ135.h>
LiquidCrystal_I2C lcd(0x27,A4,A5);
MQ135 gasSensor(A0);
long last_beep = 0;
void setup() {
pinMode(YELLOW, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(RED, OUTPUT);
pinMode(BUZZER, OUTPUT);
lcd.init();
lcd.backlight();
}
void loop() {
float level = gasSensor.getPPM();
lcd.clear();
lcd.print("CO2: ");
lcd.print(level);
digitalWrite(YELLOW, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(RED, LOW);
lcd.setCursor(0, 1);
if(level < THRESHOLD_CONTROL) {
digitalWrite(GREEN, HIGH);
lcd.print("OK");
noTone(BUZZER);
} else if(level > THRESHOLD_CRITICAL) {
digitalWrite(RED, HIGH);
lcd.print("Critical");
if (millis() - last_beep > 300) {
tone(BUZZER, 1000, 100);
last_beep = millis();
}
} else {
digitalWrite(YELLOW, HIGH);
lcd.print("Control");
noTone(BUZZER);
if (millis() - last_beep > 5000) {
tone(BUZZER, 3000, 1000);
last_beep = millis();
}
}
delay(200);
}