Alternar con cada pulsación
Parte de la sección Entradas del Journey de Arduino de Coddy. Lección 4 de 22.
Hasta ahora, el LED copiaba el botón: encendido mientras lo mantienes presionado, apagado al soltarlo. Un interruptor de lámpara funciona de otra manera: presiónalo una vez para encenderla y otra vez para apagarla. Eso es un interruptor de alternancia.
Para alternar, el sketch debe detectar el momento en que se presiona el botón: está presionado ahora, pero no lo estaba la última vez que se ejecutó loop(). A ese momento se le llama flanco. Guarda la última lectura en una variable por encima de setup(), como un contador:
int lastReading = HIGH;
void loop() {
int reading = digitalRead(2);
if (reading == LOW && lastReading == HIGH) {
// se ha pulsado el botón
}
lastReading = reading;
}Mantener presionado el botón mantiene la lectura en LOW, así que el flanco ocurre una vez por pulsación, sin importar cuánto tiempo lo mantengas presionado.
Para invertir un bool, usa !, que significa «no»: ledOn = !ledOn; convierte true en false y viceversa.
Desafío
IntermedioEl botón está en el pin 2 (INPUT_PULLUP) y el LED en el pin 13. Haz que cada pulsación alterne el LED:
- cuando se pulsa el botón (
LOWahora,HIGHla última vez), invierteledOn - guarda la lectura en
lastReadingal final deloop() - enciende o apaga el LED para que coincida con
ledOn
Pulsa Run, pulsa el botón unas cuantas veces y después pulsa Check.
Pruébalo tú mismo
const int buttonPin = 2;
const int ledPin = 13;
bool ledOn = false;
int lastReading = HIGH;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
}
void loop() {
int reading = digitalRead(buttonPin);
// invierte ledOn cuando se pulse el botón
// guarda esta lectura para la próxima vez
// enciende o apaga el LED para que coincida con ledOn
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Entradas
Practica por tu cuenta: Playground de Arduino