Alternar a cada pressionamento
Parte da seção Entradas do Journey de Arduino da Coddy. Lição 4 de 22.
Até agora, o LED copiava o botão: aceso enquanto pressionado, apagado ao soltar. Um interruptor de luz funciona de outra forma: pressione uma vez para acender, pressione novamente para apagar. Isso é um toggle.
Para alternar, o sketch precisa perceber o momento em que o botão é pressionado: está pressionado agora, mas não estava na última vez que loop() foi executado. Esse momento é chamado de flanco. Mantenha a última leitura em uma variável acima de setup(), como um contador:
int lastReading = HIGH;
void loop() {
int reading = digitalRead(2);
if (reading == LOW && lastReading == HIGH) {
// o botão foi pressionado
}
lastReading = reading;
}Manter o botão pressionado mantém a leitura em LOW, então o flanco acontece uma vez a cada pressionamento, por mais tempo que você o mantenha pressionado.
Para inverter um bool, use !, que significa "não": ledOn = !ledOn; transforma true em false e vice-versa.
Desafio
MédioO botão está no pino 2 (INPUT_PULLUP) e o LED no pino 13. Faça com que cada pressionamento alterne o LED:
- quando o botão for pressionado (
LOWagora,HIGHna última leitura), alterneledOn - salve a leitura em
lastReadingno final deloop() - ligue ou desligue o LED para corresponder a
ledOn
Pressione Run, pressione o botão algumas vezes e, em seguida, Check.
Experimente você mesmo
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);
// inverta ledOn quando o botão for pressionado
// guarde esta leitura para a próxima vez
// ligue ou desligue o LED para corresponder a ledOn
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Entradas
1Botões
Exibir o estado de um botãoResistor pull-downPull-up internoAlternar a cada pressionamentoContar pressionamentos do botãoEliminar o bouncing de um botãoDois botões ao mesmo tempoPratique por conta própria: Playground de Arduino