// Configuración de pines
const int leds[] = {2, 3, 4, 5, 6}; // Conecta los LEDs a estos pines
const int sequenceButtonPin = 7; // Conecta el botón de secuencia a este pin
const int adjustButtonPin = 8; // Conecta el botón de ajuste a este pin
// Variables
int delayTime = 100; // Tiempo inicial de retardo en milisegundos
int currentLed = 0; // Índice del LED actual
unsigned long lastSequenceButtonTime = 0; // Último tiempo que se pulsó el botón de secuencia
unsigned long lastAdjustButtonTime = 0; // Último tiempo que se pulsó el botón de ajuste
const int debounceDelay = 50; // Tiempo de antirrebote en milisegundos
// Variables para antirrebote
boolean sequenceButtonState = HIGH; // Estado actual del botón de secuencia
boolean adjustButtonState = HIGH; // Estado actual del botón de ajuste
boolean lastSequenceButtonState = HIGH; // Estado anterior del botón de secuencia
boolean lastAdjustButtonState = HIGH; // Estado anterior del botón de ajuste
unsigned long lastDebounceTimeSeq = 0; // Último tiempo de cambio de estado del botón de secuencia
unsigned long lastDebounceTimeAdj = 0; // Último tiempo de cambio de estado del botón de ajuste
void setup() {
Serial.begin(9600); // Inicia la comunicación serial
// Configura los pines de LED como salida
for (int i = 0; i < 5; i++) {
pinMode(leds[i], OUTPUT);
}
// Configura los pines de botón como entrada
pinMode(sequenceButtonPin, INPUT_PULLUP);
pinMode(adjustButtonPin, INPUT_PULLUP);
}
void loop() {
// Lee el estado actual del botón de secuencia
int readingSeq = digitalRead(sequenceButtonPin);
// Comprueba si hay un cambio de estado del botón de secuencia
if (readingSeq != lastSequenceButtonState) {
lastDebounceTimeSeq = millis();
}
// Comprueba si ha pasado el tiempo de antirrebote y confirma el cambio de estado
if ((millis() - lastDebounceTimeSeq) > debounceDelay) {
if (readingSeq != sequenceButtonState) {
sequenceButtonState = readingSeq;
// Si el botón de secuencia está presionado, activa la secuencia de LEDs
if (sequenceButtonState == LOW) {
Serial.print("Tiempo de Delay: ");
Serial.println(delayTime); // Imprime el tiempo de delay
for (int i = 0; i < 5; i++) {
encenderLED(leds[i]);
delay(delayTime);
apagarLED(leds[i]); // Apaga el LED después de cada iteración
}
}
}
}
// Almacena el estado actual del botón de secuencia para el próximo ciclo
lastSequenceButtonState = readingSeq;
// Lee el estado actual del botón de ajuste
int readingAdj = digitalRead(adjustButtonPin);
// Comprueba si hay un cambio de estado del botón de ajuste
if (readingAdj != lastAdjustButtonState) {
lastDebounceTimeAdj = millis();
}
// Comprueba si ha pasado el tiempo de antirrebote y confirma el cambio de estado
if ((millis() - lastDebounceTimeAdj) > debounceDelay) {
if (readingAdj != adjustButtonState) {
adjustButtonState = readingAdj;
// Si el botón de ajuste está presionado, aumenta el retardo en 50 milisegundos
if (adjustButtonState == LOW && delayTime < 500) {
delayTime += 50;
}
}
}
// Almacena el estado actual del botón de ajuste para el próximo ciclo
lastAdjustButtonState = readingAdj;
}
void encenderLED(int pin) {
digitalWrite(pin, HIGH);
}
void apagarLED(int pin) {
digitalWrite(pin, LOW);
}