/******************************************************************************* * * Hub 11 - Acerte o número entre 0 e 1023 - Arduino * Autor: Angelo Luis Ferreira * 14/06/2021 * http://squids.com.br/arduino * *******************************************************************************/ //define conexões com o Arduino (pinos) 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); //define um número aleatório entre 0 e 1023 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)randNumberMax) { atual = millis(); // pega o tempo atual 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(); }