Hub 011 - Acertar o número aleatório entre 0 e 1023 usando potenciômetro - Arduino
- Detalhes
- Angelo Luis Ferreira
- Acessos: 1475
Básico - Hub 011
Acertar número aleatório usando potenciômetro - jogo
Sugerido por: Juliandrew Facundo
Para iniciar o jogo deve-se pedir ao usuário que digite o valor 1 no teclado do computador. Por meio da função random(), deverá ser escolhido aleatoriamente um valor entre 0 e 1023. O usuário deverá então girar um potenciômetro para localizar esse valor. Para auxiliar o usuário você deverá colocar três LEDs: um vermelho indicando que o potenciômetro está abaixo desse valor, outro vermelho indicando que está acima do valor e um branco indicando que o potenciômetro atingiu esse valor. Quando for encontrado o valor, os dois LEDs vermelhos deverão estar apagados, o LED branco deverá estar aceso e seu programa deverá apresentar na tela uma mensagem indicando quantos milissegundos foram necessários para isso. Para conseguir acertar o valor, trabalhe com uma tolerância de mais ou menos 10 para a leitura do potenciômetro! Utilize um delay de 200 ms entre cada leitura, para aumentar a dificuldade do jogo. Ganha quem conseguir chegar no valor sorteado no menor tempo.
Componentes necessários
Referência |
Componente |
Quantidade |
Imagem |
Observação |
Protoboard | Protoboard 830 pontos | 1 | ![]() |
No mínimo utilizar protoboard com 830 pontos |
Jumpers | Kit cabos ligação macho / macho | 1 | ||
Led 5mm |
LED 5mm |
3 |
No projeto utilizamos 3 leds (2 vermelhos e 1 branco) Você também poderá utilizar LEDs de 5 ou 3 mm nas cores que desejar, alto brilho ou difuso. |
|
Resistor |
Resistor |
3 |
3 Resistores 150Ω (ou superiores) Se precisar usar outros valores, calcule o resistor apropriado para o led utilizado - Calcular Resistor ou use a Tabela Resistor para Leds |
|
Potenciômetro | Potenciômetro 100K | ![]() |
Você poderá experimentar valores diferentes do potenciômetro, entre 1K a 100K A tensão resultante do potenciômetro aumenta quando giramos o eixo do componente no sentido do polo negativo para o polo positivo. |
|
Arduino UNO R3 | Arduino UNO | 1 | ![]() |
Você poderá utilizar uma placa Arduino UNO original ou similar |
Montagem do Circuito - Simulação
Referências
Serial.available() - Documentação de Referência do Arduino
Serial.parseInt() - Documentação de Referência do Arduino
randomSeed() - Documentação de Referência do Arduino
random() - Documentação de Referência do Arduino
Como usar temporizadores no Arduino
millis() - Documentação de Referência do Arduino
Como utilizar o operador ternário na programação com Arduino
Código do Projeto (Sketch)
Faça o download e abra o arquivo hub011.ino no IDE do Arduino: DOWNLOAD - hb011.ino
Ou se preferir, copie e cole o código abaixo no IDE do Arduino:
/*******************************************************************************
*
* 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)<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();
}
Obs.: Para iniciar o jogo, abra o Monitor Serial e digite '1'.
Simulação