#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int sensor= A0;
int ruido;
int lectura;
const int N = 5; // Orden del filtro de media móvil
float buffer[N]; // Arreglo para guardar últimas N lecturas
int index = 0; // Índice para buffer circular
// LCD I2C (0x27 es la dirección más común, 16 columnas, 2 filas)
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.init(); // Inicializa el LCD
lcd.backlight(); // Enciende la luz de fondo
Serial.begin(9600); // Inicia monitor serial
// Inicializar buffer en 0
for (int i = 0; i < N; i++) {
buffer[i] = 0;
}
}
void loop() {
lectura = analogRead(sensor);
ruido = random(-3, 4); // Ruido leve
lectura += ruido;
float voltaje = lectura * 5.0 / 1023.0;
float tempActual = voltaje * 20; // LM35 simulado
// Guardar en el buffer circular
buffer[index] = tempActual;
index = (index + 1) % N;
// Calcular media móvil
float suma = 0;
for (int i = 0; i < N; i++) {
suma += buffer[i];
}
float temperatura = suma / N;
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperatura, 1);
lcd.print(" C ");
Serial.println(temperatura);
delay(500);
}