Hub 011 - Acertar o número aleatório entre 0 e 1023 usando potenciômetro - Arduino

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 Resultado de imagem para protoboard 830v

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   Resultado de imagem para potenciômetro

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

×

Infomações do site / SEO








×

Adicionar Marcadores