Início
/
Projetos Arduino
/
Squids Hub
/
Básico
/
Hub 011 - Acertar o número aleatório entre 0 e 1023 usando potenciômetro - Arduino
Hub 011 - Acertar o número aleatório entre 0 e 1023 usando potenciômetro - Arduino
Angelo Luis Ferreira | 15/06/2021
Acessos: 3.198
Básico - Hub 011
Acertar número aleatório usando potenciômetro - jogo
Sugerido por: Juliandrew Facundo ENVIAR SUGESTÃO
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 400 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
|
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 |
Arduino UNO R3 |
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)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();
}
Obs.: Para iniciar o jogo, abra o Monitor Serial e digite '1'.
Simulação
O anúncio abaixo ajuda a manter o Squids Arduino funcionando
Comentários