const int ledPin = 2; // Pin del LED (opcional)
const int numBotones = 4; // Número de botones
const int pinesBotones[numBotones] = {4, 5, 6, 7}; // Pines de los botones
int estadosBotones[numBotones]; // Estados actuales de los botones
int estadosAnterioresBotones[numBotones]; // Estados anteriores de los botones
int contadores[numBotones] = {0, 0, 0, 0}; // Contadores para cada botón
unsigned long ultimosTiempos[numBotones] = {0, 0, 0, 0}; // Últimos tiempos para el debounce de cada botón
const unsigned long debounceDelay = 0; // Tiempo de espera para el debounce
void setup() {
pinMode(ledPin, OUTPUT); // Declaramos el pin del LED como salida
for (int i = 0; i < numBotones; i++) {
pinMode(pinesBotones[i], INPUT); // Declaramos los pines de los botones como entrada
estadosBotones[i] = LOW; // Inicializamos los estados de los botones
estadosAnterioresBotones[i] = LOW; // Inicializamos los estados anteriores de los botones
}
Serial.begin(9600);
}
void loop() {
unsigned long tiempoActual = millis(); // Obtiene el tiempo actual
for (int i = 0; i < numBotones; i++) {
manejarBoton(i, tiempoActual); // Maneja cada botón
}
// Apaga el LED si ninguno de los botones está presionado (opcional)
if (!hayBotonesPresionados()) {
digitalWrite(ledPin, LOW);
}
}
void manejarBoton(int indice, unsigned long tiempoActual) {
int lecturaActual = digitalRead(pinesBotones[indice]);
if (lecturaActual != estadosAnterioresBotones[indice]) {
ultimosTiempos[indice] = tiempoActual;
}
if ((tiempoActual - ultimosTiempos[indice]) > debounceDelay) {
if (lecturaActual != estadosBotones[indice]) {
estadosBotones[indice] = lecturaActual;
if (estadosBotones[indice] == HIGH) {
contadores[indice]++;
if (indice == 0) {
// Comportamiento especial para el botón 1
Serial.print("Botón 1 presionado. Contador: ");
Serial.println(contadores[indice]);
digitalWrite(ledPin, HIGH); // Opcional: enciende un LED o hace alguna acción especial para el botón 1
// Agregar cualquier otra acción específica para el botón 1 aquí
} else if (indice == 1) {
// Comportamiento para otros botones
Serial.print("Botón 2, haciendo otra cosa ...");
Serial.print(indice + 1);
Serial.print(": ");
Serial.println(contadores[indice]);
digitalWrite(ledPin, HIGH); // Opcional: enciende un LED o hace alguna acción
} else if (indice == 2) {
// Comportamiento para otros botones
Serial.print("Botón ");
Serial.print(indice + 1);
Serial.print(": ");
Serial.println(contadores[indice]);
digitalWrite(ledPin, HIGH); // Opcional: enciende un LED o hace alguna acción
} else if (indice == 3) {
Serial.println("Boton 4");
} else {
Serial.println("Error ...");
}
}
}
}
estadosAnterioresBotones[indice] = lecturaActual;
}
bool hayBotonesPresionados() {
for (int i = 0; i < numBotones; i++) {
if (estadosBotones[i] == HIGH) {
return true;
}
}
return false;
}