const byte ledEsquerdo = 8;
const byte ledCentro = 10;
const byte ledDireito = 12;
const byte potenciometro = A5;
// variáveis do jogo
boolean jogo = 0;
int randNumber;
int randNumberMin;
int randNumberMax;
//variáveis tempo do jogo
unsigned long inicial = 0;
unsigned long atual;
int timer = 0;
void setup() {
// define entradas e saídas do Arduino
pinMode(ledEsquerdo, OUTPUT);
pinMode(ledCentro, OUTPUT);
pinMode(ledDireito, OUTPUT);
// inicia o monitor serial
Serial.begin(9600);
printHeader(); // cabeçalho
// randomSeed() basicamente "embaralha" a função random()
randomSeed(analogRead(0)); // o pino deverá estar desconectado
}
void loop() {
if (!jogo) {
if (Serial.available()) {
if (Serial.parseInt() == 1) iniciarJogo();
} else jogo = 0;
} else jogando();
}
// print cabeçalho do jogo
void printHeader() {
Serial.println("================ Novo Jogo ===============");
Serial.print("Digite 1 para iniciar: ");
}
// inicia jogo até acertar o número (randNumber)
void iniciarJogo() {
// apaga led central
digitalWrite(ledCentro, LOW);
randNumber = random(1023);
// tolerância de + ou - 10
randNumber > 11 ? randNumberMin = randNumber - 10 : randNumberMin = 0;
randNumber < 1014 ? randNumberMax = randNumber + 10 : randNumberMax = 1023;
inicial = millis(); // tempo inicial igual ao atual
// altera variável iniciar jogo e continuar jogando
jogo = 1;
}
// rotina do jogo
void jogando() {
// buscando o número
while (analogRead(potenciometro)<randNumberMin ||
analogRead(potenciometro)>randNumberMax) {
atual = millis(); // pega o tempo atual
analogRead(potenciometro)<randNumberMin ? digitalWrite(ledEsquerdo, HIGH) :
digitalWrite(ledEsquerdo, LOW);
analogRead(potenciometro)>randNumberMax ? digitalWrite(ledDireito, HIGH) :
digitalWrite(ledDireito, LOW);
delay(200); // pausa a cada 200ms
}
// quando acerta o número
// acende o led branco e apaga os vermelhos
digitalWrite(ledCentro, HIGH);
digitalWrite(ledEsquerdo, LOW);
digitalWrite(ledDireito, LOW);
//calcula o tempo em milissegundos
timer = atual - inicial;
// imprime no monitor serial o tempo
Serial.print("OK, VC. ACERTOU: ");
Serial.print(timer);
Serial.println(" ms");
// altera variável para novo jogo
jogo = 0;
// exibe cabeçalho do próximo jogo no monitor serial
Serial.println();
printHeader();
}