Una luz con temporizador
Parte de la sección Temporización sin delay del Journey de Arduino de Coddy. Lección 6 de 18.
La luz de una escalera se enciende cuando presionas su botón y se apaga sola un poco después. Vuelve a presionarlo mientras está encendida y el tiempo empieza de nuevo.
Eso requiere dos cosas: el momento de la última pulsación y si la luz está encendida. Guarda el momento en un unsigned long cuando se presiona el botón:
if (digitalRead(buttonPin) == LOW) {
pressedAt = millis(); // iniciar (o reiniciar) el tiempo
lightOn = true;
digitalWrite(ledPin, HIGH);
}Después, en cada ciclo, comprueba cuánto tiempo ha pasado:
if (lightOn && millis() - pressedAt >= onTime) {
lightOn = false;
digitalWrite(ledPin, LOW);
}Las dos partes nunca esperan, así que se detecta una pulsación en cualquier momento, incluso mientras la luz ya está encendida. Con delay(2000) después de la pulsación, se perdería una segunda pulsación durante la espera.
Desafío
FácilConstruye una luz para la escalera:
- al pulsar, se enciende inmediatamente el LED del pin 13
- 2 segundos después de pulsar, se apaga sola
- si pulsas mientras está encendida, los 2 segundos vuelven a empezar
Pulsa Run, pulsa el botón unas cuantas veces y después Check.
Pruébalo tú mismo
const int ledPin = 13;
const int buttonPin = 2;
const unsigned long onTime = 2000; // cuánto tiempo permanece encendida la luz
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
// cuando se presione el botón: enciende el LED y guarda el momento
// cuando haya transcurrido onTime desde entonces: apaga el LED
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Temporización sin delay
1millis()
El reloj millis()Tiempos en unsigned longParpadear sin esperasDos LED, dos velocidadesParpadear mientras un botón cambia de estadoUna luz con temporizadorPractica por tu cuenta: Playground de Arduino