#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int pinSensor = A0;
const int ledRojo = 2;
const int ledVerde = 3;
float valorBase = 0;
int muestrasCalibracion = 10;
void setup() {
Serial.begin(9600);
pinMode(ledVerde, OUTPUT);
pinMode(ledRojo, OUTPUT);
lcd.init();
lcd.backlight();
Serial.println("Iniciando sistema...");
lcd.setCursor(0, 0);
lcd.print("Iniciando...");
delay(3000);
Serial.println("Calibrando sensor...");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Calibrando...");
float suma = 0;
for (int i = 0; i < muestrasCalibracion; i++) {
suma += analogRead(pinSensor);
delay(250);
}
valorBase = suma / muestrasCalibracion;
Serial.print("Valor base: ");
Serial.println(valorBase);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Base: ");
lcd.print(valorBase);
delay(2000);
Serial.println("Inicio de monitoreo...");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Monitoreando...");
delay(1000);
}
void loop() {
float suma = 0;
for (int i = 0; i < 5; i++) {
suma += analogRead(pinSensor);
delay(15);
}
float promedio = suma / 5;
float incremento = promedio - valorBase;
// ===== CONTROL DE LEDs (CORREGIDO) =====
// Si el promedio es MENOR que el valor base → no Contaminado
if (promedio <= valorBase) {
digitalWrite(ledVerde, HIGH); // Enciende verde
digitalWrite(ledRojo, LOW); // Apaga rojo
} else {
digitalWrite(ledVerde, LOW); // Apaga verde
digitalWrite(ledRojo, HIGH); // Enciende rojo
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("A:");
lcd.print(promedio);
lcd.setCursor(0, 1);
if (promedio <= valorBase) {
lcd.print("AIRE BIEN ");
} else {
lcd.print("AIRE MALO ");
}
Serial.print("Promedio: ");
Serial.print(promedio);
Serial.print(" | Estado: ");
Serial.println(promedio <= valorBase ? "LIMPIO" : "CONTAMINADO");
delay(30000);
}