#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int contador = 0;
bool pulsador_decremento_estado_anterior = false;
struct Pulsador {
int pin;
bool estado_anterior;
char caja[6];
int contador_pulsaciones;
} pulsadores[] = {
{2, false, "Caja1", 0},
{3, false, "Caja2", 0},
{4, false, "Caja3", 0},
{5, false, "Caja4", 0}
};
const int num_pulsadores = sizeof(pulsadores) / sizeof(Pulsador);
const int zumbador_pin = 7;
bool mostrar_contadores = false;
void setup() {
lcd.init();
lcd.backlight();
for (int i = 0; i < num_pulsadores; i++) {
pinMode(pulsadores[i].pin, INPUT_PULLUP);
}
pinMode(zumbador_pin, OUTPUT);
pinMode(0, INPUT_PULLUP);
}
void loop() {
bool pulsador_decremento_estado_actual = digitalRead(6);
if (digitalRead(0) == LOW) {
mostrar_contadores = !mostrar_contadores;
if (mostrar_contadores) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Caja1:");
lcd.print(pulsadores[0].contador_pulsaciones);
lcd.print(" Caja2:");
lcd.print(pulsadores[1].contador_pulsaciones);
lcd.setCursor(0, 1);
lcd.print("Caja3:");
lcd.print(pulsadores[2].contador_pulsaciones);
lcd.print(" Caja4:");
lcd.print(pulsadores[3].contador_pulsaciones);
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Cont: ");
lcd.setCursor(10, 0);
lcd.print(contador);
}
delay(500);
return;
}
if (pulsador_decremento_estado_actual == LOW && pulsador_decremento_estado_anterior == HIGH) {
contador--;
if (contador < 0) {
contador = 99;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Cont: ");
lcd.setCursor(10, 0);
lcd.print(contador);
lcd.setCursor(0, 1);
lcd.print("Decremento");
}
for (int i = 0; i < num_pulsadores; i++) {
bool estado_actual = digitalRead(pulsadores[i].pin);
if (estado_actual == LOW && pulsadores[i].estado_anterior == HIGH) {
pulsadores[i].contador_pulsaciones++;
contador++;
if (contador == 100) {
contador = 0;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Num: ");
lcd.setCursor(10, 0);
lcd.print(contador);
lcd.setCursor(0, 1);
lcd.print(pulsadores[i].caja);
lcd.print(" ");
lcd.print(pulsadores[i].contador_pulsaciones);
//genera un pitido en el buzzer
tone(zumbador_pin, 1000, 100);
}
pulsadores[i].estado_anterior = estado_actual;
}
pulsador_decremento_estado_anterior = pulsador_decremento_estado_actual;
delay(50);
}