#include <Wire.h> // Librería para el uso de I2C
#include <LiquidCrystal_I2C.h> // Librería para el uso del display 1602 I2C
// Pines de entrada analógica
int analogInputPins[] = {A0, A1, A2, A3, A4};
// Pines de salida digital para los LED
int digitalOutputPins[] = {8, 9, 10, 11, 12};
// Umbrales analógicos para cada entrada
int analogThresholds[] = {0.3 * 1023, 0.3 * 1023, 0.3 * 1023, 0.3 * 1023, 0.3 * 1023};
// Valores de entrada analógica actual para cada pin
int analogValues[] = {0, 0, 0, 0, 0};
// Definir el objeto del display 1602 I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// Inicializar el display 1602 I2C
lcd.init();
// Encender la retroiluminación del display
lcd.backlight();
// Establecer los pines de salida digital
for (int i = 0; i < 5; i++) {
pinMode(digitalOutputPins[i], OUTPUT);
}
}
void loop() {
// Limpiar el contenido del display
lcd.clear();
// Leer los valores analógicos actuales de cada pin de entrada
for (int i = 0; i < 5; i++) {
analogValues[i] = analogRead(analogInputPins[i]);
// Calcular el porcentaje del valor actual con respecto al máximo posible (1023)
float percentage = analogValues[i] / 10.23;
// Mostrar el nombre del pin de entrada y su valor en el display
lcd.setCursor(4, 0); // Posicionar el cursor en la primera fila
lcd.print("Sensor " + String(i)); // Mostrar el nombre del pin de entrada
lcd.setCursor(4, 1); // Posicionar el cursor en la segunda fila
lcd.print(percentage); // Mostrar el porcentaje del valor actual
lcd.setCursor(10,1);
lcd.print("%");
// Verificar si el valor actual es mayor o igual que el umbral para ese pin
if (analogValues[i] >= analogThresholds[i]) {
digitalWrite(digitalOutputPins[i], LOW); // Encender el LED correspondiente
} else {
digitalWrite(digitalOutputPins[i], HIGH); // Apagar el LED correspondiente
}
// Hacer scroll de la información en el display
delay(1000); // Esperar 1 segundo
lcd.scrollDisplayLeft(); // Hacer scroll a la izquierda
}
}