Uma luz com temporizador
Parte da seção Temporização sem delay do Journey de Arduino da Coddy. Lição 6 de 18.
Uma luz de escada acende quando você aperta o botão e apaga sozinha um pouco depois. Aperte novamente enquanto ela estiver acesa, e o tempo recomeça.
Isso exige duas coisas: o momento do último aperto e se a luz está acesa. Armazene o momento em um unsigned long quando o botão for pressionado:
if (digitalRead(buttonPin) == LOW) {
pressedAt = millis(); // inicia (ou reinicia) a contagem do tempo
lightOn = true;
digitalWrite(ledPin, HIGH);
}Então, em cada loop, verifique quanto tempo passou:
if (lightOn && millis() - pressedAt >= onTime) {
lightOn = false;
digitalWrite(ledPin, LOW);
}As duas partes nunca esperam, então um aperto é detectado a qualquer momento, mesmo enquanto a luz já está acesa. Com delay(2000) depois do aperto, um segundo aperto durante a espera seria perdido.
Desafio
FácilCrie uma luz para escadas:
- ao pressionar, o LED no pino 13 acende imediatamente
- 2 segundos após pressionar, ele apaga sozinho
- pressionar enquanto ele está aceso reinicia a contagem dos 2 segundos
Pressione Run, pressione o botão algumas vezes e, em seguida, Check.
Experimente você mesmo
const int ledPin = 13;
const int buttonPin = 2;
const unsigned long onTime = 2000; // por quanto tempo a luz permanece acesa
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
// quando o botão estiver pressionado: acenda o LED e registre o momento
// quando onTime tiver passado desde então: apague o LED
}
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