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

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   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 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

Compartilhe:

Doações

Contribua pra manter o site online :)

Inscreva-se no canal Squids

Squids Arduino News

Desafio 88 - Projeto I12 Cronômetro contador de voltas com sensor infravermelho Com base no projeto I12 - Cronômetro com pause controlado por leds infravermelhos - Arduino resolva os seguintes ...

Intermediário - Projeto 12 Cronômetro com pause, sensor infravermelho e reset - Arduino Objetivo Criar um cronômetro utilizando o módulo TM1637 (opcional) e/ou o display LCD com pause controla...

Básico - Hub 013 Cronômetro com pause e reset (interrupção por timer)   Sugerido por: Wagner G L Objetivo O objetivo é adaptar o Projeto 64 - Cronômetro com display TM1637 e Arduino acresc...

Básico - Hub 012 Cronômetro com pause e reset   Sugerido por: Wagner G L Objetivo O objetivo é adaptar o Projeto 64 - Cronômetro com display TM1637 e Arduino acrescentando botões de pause ...

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 comp...

Outros artigos

Mais: Desafios Projetos Intermediários Básico Projetos Básicos Arduino Maker

Você está preparado?

Topo