Piscar enquanto um botão alterna
Parte da seção Temporização sem delay do Journey de Arduino da Coddy. Lição 5 de 18.
Um sketch que nunca espera pode monitorar um botão e executar uma piscada ao mesmo tempo. Cada loop leva alguns microssegundos, então a placa verifica o botão milhares de vezes por segundo e detecta até mesmo um toque muito curto.
A piscada segue o padrão de millis(). O botão usa a verificação de borda da seção Inputs: aja quando o botão estiver pressionado agora e não estava pressionado no loop anterior. ! significa "não", então !wasPressed significa "não estava pressionado".
bool wasPressed = false;
void loop() {
// o piscar: if (now - previous >= 500) { ... }
bool pressed = digitalRead(buttonPin) == LOW;
if (pressed && !wasPressed) {
// o botão acabou de ser pressionado
}
wasPressed = pressed;
}Coloque as duas partes em loop(), uma depois da outra, e não use delay() em nenhuma delas. Se a piscada esperasse 500 ms, um toque que começasse e terminasse durante a espera nunca seria detectado.
Desafio
MédioFaça a placa executar duas ações ao mesmo tempo:
- o LED vermelho no pino 13 alterna a cada 500 ms, cronometrado com
millis() - cada vez que o botão é pressionado, o LED amarelo no pino 12 alterna: aceso, depois apagado, depois aceso
Um toque rápido deve funcionar a qualquer momento, e manter o botão pressionado alterna o LED amarelo apenas uma vez. Pressione Run, toque no botão e, em seguida, pressione Check.
Experimente você mesmo
const int redLed = 13;
const int yellowLed = 12;
const int buttonPin = 2;
void setup() {
pinMode(redLed, OUTPUT);
pinMode(yellowLed, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
// 1. alterne o estado do LED vermelho a cada 500 ms, usando millis()
// 2. cada pressionamento do botão liga ou desliga o LED amarelo
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Temporização sem delay
1millis()
O relógio millis()Tempos em unsigned longPiscar sem atrasoDois LEDs, duas velocidadesPiscar enquanto um botão alternaUma luz com temporizadorPratique por conta própria: Playground de Arduino