#include <Arduino.h>
const int ledPins[] = {2, 4, 5, 18};
const int btnModePin = 12;
const int btnSpeedPin = 13;
const int btnLowPin = 14;
volatile int countMode = 0; // Variable para cambiar el modo de conteo (0 para décadas, 1 para binario)
volatile int contador = 0;
volatile int velocidad = 2000; // Valor de retardo inicial (velocidad de conteo)
void IRAM_ATTR buttonInterrupt1() {
countMode = !countMode; // Cambiar entre décadas y binario
contador = 0; // Reiniciar el contador al cambiar de modo
}
void IRAM_ATTR buttonInterrupt2() {
velocidad /= 2; // Reducir el retardo a la mitad (incrementar la velocidad)
}
void IRAM_ATTR buttonInterrupt3() {
velocidad *= 2; // Duplicar el retardo (reducir la velocidad)
}
void setup() {
for (int i = 0; i < 4; i++) {
pinMode(ledPins[i], OUTPUT);
}
pinMode(btnModePin, INPUT_PULLUP);
pinMode(btnSpeedPin, INPUT_PULLDOWN);
pinMode(btnLowPin, INPUT);
attachInterrupt(digitalPinToInterrupt(btnModePin), buttonInterrupt1, FALLING);
attachInterrupt(digitalPinToInterrupt(btnSpeedPin), buttonInterrupt2, FALLING);
attachInterrupt(digitalPinToInterrupt(btnLowPin), buttonInterrupt3, FALLING);
}
void loop() {
if (countMode == 0) { // Modo décadas
for (int i = 0; i < 4; i++) {
digitalWrite(ledPins[i], bitRead(contador, i));
}
} else { // Modo binario
for (int i = 0; i < 4; i++) {
digitalWrite(ledPins[i], bitRead(contador, 3 - i));
}
}
delay(velocidad); // Retardo para controlar la velocidad de conteo
contador++;
if (countMode == 0 && contador == 10) { // Reiniciar el contador de décadas después de 9
contador = 0;
} else if (countMode == 1 && contador == 16) { // Reiniciar el contador binario después de 15
contador = 0;
}
}