Cronômetro com botão
Parte da seção Temporização sem delay do Journey de Arduino da Coddy. Lição 18 de 18.
Um cronômetro tem dois estados, em funcionamento e parado, e um pressionamento o alterna de um para o outro. Ele mede o tempo da maneira segura: armazene millis() no início e subtraia no final.
if (!running) {
running = true;
startTime = millis();
} else {
running = false;
Serial.println(millis() - startTime);
}O botão é tratado com antirrepique da mesma forma que o botão de modo: aja quando a leitura mudar e, em seguida, aguarde 20 ms. Os dois pressionamentos aguardam os mesmos 20 ms, então o intervalo entre eles permanece correto.
O LED indica o estado: aceso enquanto o cronômetro está em funcionamento.
Desafio
MédioO botão já é lido e tratado contra repiques, e onPress() é executada uma vez a cada pressionamento. Escreva onPress():
- se o cronômetro não estiver em execução: inicie-o, armazene
millis()emstartTimee acenda o LED - se estiver em execução: pare-o, apague o LED e imprima o tempo em milissegundos
Pressione Run, pressione o botão duas vezes e, em seguida, Check.
Experimente você mesmo
const int ledPin = 13;
const int buttonPin = 2;
bool wasPressed = false;
bool running = false;
unsigned long startTime = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
}
// Chamada uma vez a cada pressionamento.
void onPress() {
// não está em execução: iniciar, guardar o horário, acender o LED
// em execução: parar, apagar o LED, imprimir o tempo em ms
}
void loop() {
bool pressed = digitalRead(buttonPin) == LOW;
if (pressed != wasPressed) {
if (pressed) {
onPress();
}
wasPressed = pressed;
delay(20); // deixar os contatos estabilizarem
}
}
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