Jogo de Reflexos: Espera Aleatória
Parte da seção Projetos do Journey de Arduino da Coddy. Lição 5 de 24.
O próximo projeto é um jogo de reação. Você aperta o botão, a placa espera, depois acende o LED, e você aperta novamente o mais rápido que conseguir.
A espera é aleatória, ou você aprenderia o ritmo. random(1000, 3001) fornece um número inteiro de 1000 a 3000.
random() é um cálculo: após cada inicialização, ele fornece os mesmos números na mesma ordem. randomSeed() escolhe onde essa sequência começa. Inicialize a sequência com o momento do aperto, em microssegundos, que é diferente em cada jogo:
randomSeed(micros());
waitTime = random(1000, 3001);O jogo é uma máquina de estados com três estados: READY (aguardando um aperto), WAITING (a espera aleatória) e LIT (o LED está aceso). A espera usa millis(), para que as etapas posteriores possam monitorar o botão durante esse período.
O código inicial já determina pressed: o botão está lendo LOW agora e leu HIGH da última vez. Esse botão não apresenta repique, então não precisa de antirrepique.
Desafio
MédioO botão está no pino 2 e o LED no pino 12. Preencha os três estados:
READY: ao pressionar, inicialize a semente commicros(), escolha um tempo de espera de 1000 a 3000 ms, salve o horário de início e passe paraWAITINGWAITING: quando o tempo de espera terminar, acenda o LED e passe paraLITLIT: ao pressionar, apague o LED e passe paraREADY
Pressione Run, jogue algumas rodadas e, em seguida, Check.
Experimente você mesmo
const int ledPin = 12;
const int buttonPin = 2;
// Os três estados de uma rodada
enum State { READY, WAITING, LIT };
State state = READY;
int lastButton = HIGH; // a leitura anterior do botão
unsigned long waitStart = 0; // quando a espera começou
unsigned long waitTime = 0; // quanto tempo dura esta espera
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
Serial.println("Press the button to start");
}
void loop() {
int button = digitalRead(buttonPin);
bool pressed = (button == LOW && lastButton == HIGH); // pressionado agora mesmo
lastButton = button;
// READY: um pressionamento inicia a espera
// WAITING: quando a espera terminar, acenda o LED
// LIT: um pressionamento apaga o LED e o jogo fica pronto novamente
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Projetos
2Jogo de Reflexos
Jogo de Reflexos: Espera AleatóriaJogo de Reflexos: CronômetroJogo de Reflexos: Falsa PartidaJogo de Reflexos: Melhor TempoPratique por conta própria: Playground de Arduino