Menu
CoddyTech

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.

challenge icon

Desafio

Fácil

Crie 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
}
quiz iconTeste seus conhecimentos

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

Pratique por conta própria: Playground de Arduino