Criando Jogos com Arduino 2: Passo a Passo
Jogo de Dados com Leds – Dado Eletrônico
O jogo de dados é um dos mais conhecidos e antigos jogos do
mundo, tão antigo quanto a civilização humana. Os dados aparecem
retratados junto a uma espécie de jogo de tabuleiro em vasos pintados da
Grécia antiga, sendo mencionados no Vedas (livro sagrado Hindu) e no
Antigo Testamento da Bíblia.
Os dados são frequentemente usados em jogos de azar, adivinhações,
RPG e jogos de tabuleiro quando algo aleatório precisa ser feito, como
mover uma peça.
Existem inúmeros tipos de dados, mas o mais usado e clássico é o
cubo (seis faces), gravado com números de 1 a 6. Neste projeto,
construiremos um dado eletrônico usando o Arduino, LEDs e um botão.
Sempre que o jogador apertar o botão, os LEDs exibirão um valor
aleatório de 1 a 6. Para criar os números aleatórios que serão sorteados no
dado eletrônico usaremos as funções randomSeed ( ) e random ( ) .
A função randomSeed ( ) será utilizada para iniciar o gerador de
números aleatórios utilizando como entrada aleatória a leitura de um pino
analógico que não está sendo utilizado. Por sua vez, a função random ( )
será usada para gerar um número aleatório entre 1 e 6.
Você poderá usar o dado eletrônico para o jogo de dados ou para
outros jogos de tabuleiro. Chame seus amigos e que a sorte seja lançada!
MATERIAIS NECESSÁRIOS
1 x Placa UNO SMD compatível com Arduino UNO ;
1 x Cabo USB ;
1 x Protoboard ;
7 x LEDs difusos de 5 mm ;
7 x Resistores de 220 Ω ;
1 x Resistores de 10 kΩ ;
1 x Botão do tipo push button ;
Jumpers macho-macho .
ESQUEMÁTICO DE LIGAÇÃO DOS COMPONENTES
Certifique-se que sua placa UNO esteja desligada e monte
atentamente o circuito conforme a Figura 1 3 .
Figura 13 - Circuito para o Projeto Jogo de Dados – Dado Eletrônico.
Ao montar seu circuito na protoboard, preste atenção nos seguintes
pontos:
O terminal mais longo de cada LED deve ser conectado ao pino
digital correspondente. O terminal mais curto é o cátodo (negativo)
e deve ser conectado ao terra (GND);
Em nosso projeto, utilizaremos resistores de 220 Ω para reduzir a
tensão e a corrente de alimentação dos LEDs;
O botão possui 4 terminais que são interligados aos pares, de modo
que quando pressionado os 4 são conectados gerando continuidade
no circuito;
O botão deve ser montado com dois terminais abaixo da cavidade
central da protoboard e os outros dois acima;
Conecte o push button com um resistor de 10 k Ω pull-down
(resistor conectado no GND). Desta forma, quando o botão estiver
pressionado, a placa UNO retornará nível lógico alto (HIGH).
Assim que você tiver certeza de que tudo foi conectado
corretamente, conecte a placa UNO ao seu computador.
ELABORANDO O CÓDIGO
Com o circuito montado, vamos a programação do jogo. Para melhor
compreensão o código será explicado passo a passo a seguir. Neste
momento, observe o código abaixo e aproveite para analisar sua estrutura.
//Pinos para os LEDs
#define ledPin1 6
#define ledPin2 5
#define ledPin3 3
#define ledPin4 4
#define ledPin5 7
#define ledPin6 8
# define ledPin7 9
#define botao 2 //Pino do botão
int leitura = 0; //Variável para guardar a leitura do status do botão
int sorteio; //Variável para armazenar o número aleatório sorteado
void setup () {
//Inicializa a comunicação serial
Serial . begin (9600);
//Configura o botão como entrada
pinMode (botao, INPUT );
//Configura os LEDs como saída
pinMode (ledPin1, OUTPUT );
pinMode (ledPin2, OUTPUT );
pinMode (ledPin3, OUTPUT );
pinMode (ledPin4, OUTPUT );
pinMode (ledPin5, OUTPUT );
pinMode (ledPin6, OUTPUT );
pinMode (ledPin7, OUTPUT );
//Inicializa o gerador de números aleatórios, começando em um ponto arbitrário
randomSeed ( analogRead (0));
}
void loop () {
leitura = digitalRead (botao); //Realiza a leitura do status do botão e salva na variável leitura
if (leitura == HIGH ) { //Se botão for pressionado
sorteio = random (1, 7); //Sorteia número aleatório de 1 a 6 Serial . println (sorteio); //Imprime o número sorteado no monitor serial
if (sorteio == 1) { //Se o número sorteado for um
digitalWrite (ledPin4, HIGH );
}
if (sorteio == 2) { //Se o número sorteado for dois
digitalWrite (ledPin1, HIGH );
digitalWrite (ledPin7, HIGH );
}
if (sorteio == 3) { //Se o número sorteado for três
digitalWrite (ledPin1, HIGH ) ;
digitalWrite (ledPin4, HIGH );
digitalWrite (ledPin7, HIGH );
}
if (sorteio == 4 ) { //Se o número sorteado for quatro
digitalWrite (ledPin1, HIGH );
digitalWrite (ledPin3, HIGH );
digitalWrite (ledPin5, HIGH );
digitalWrite (ledPin7, HIGH );
}
if (sorteio == 5) { //Se o número sorteado for cinco
digitalWrite (ledPin1, HIGH );
digitalWrite (ledPin3, HIGH );
digitalWrite (ledPin4, HIGH );
digitalWrite (ledPin5, HIGH );
digitalWrite (ledPin7, HIGH );
}
if (sorteio == 6) { //Se o número sorteado for seis
digitalWrite (ledPin1, HIGH );
digitalWrite (ledPin2, HIGH );
digitalWrite (ledPin3, HIGH );
digitalWrite (ledPin5, HIGH );
digitalWrite (ledPin6, HIGH );
digitalWrite (ledPin7, HIGH );
}
delay (3000);
apaga(); //chama a função para desligar os LEDs
}
}
//Função para apagar todos os LEDs
void apaga() {
digitalWrite (ledPin1, LOW );
digitalWrite (ledPin2, LOW );
digitalWrite (ledPin3, LOW );
digitalWrite (ledPin4, LOW );
digitalWrite (ledPin5, LOW );
digitalWrite (ledPin6, LOW );
digitalWrite (ledPin7, LOW );
}
Para melhor compreensão do código acompanhe os seguintes passos:
1. Declarar as variáveis
Neste código declaramos 7 variáveis para os LEDs ( ledPin1,
ledPin2, ledPin3, ledPin4, ledPin5, ledPin6, ledPin 7 ), uma variável para o
botão ( bota o ), uma variável para leitura do botão ( leitur a ) e outra para
armazenar o número aleatório sorteado ( sortei o ).
2. Inicialização da comunicação serial e configuração das portas de
entrada e saída
A comunicação serial foi inicializada por meio da instrução: Serial .
begin (9600) ; .
O pino digital 2, em que o botão está conectado, foi configurado
como entrada ( INPU T ) e os pinos de 3 a 9, conectados aos LEDs, foram
configurados como saída ( OUTPU T ).
3. Inicialização do gerador de números aleatórios
O gerador de números aleatórios foi inicializado através da função
randomSeed ( analogRead (0)) ; que utiliza como entrada aleatória a leitura
analógica do pino A0.
Sem a função randomSeed ( analogRead (0)) ; , sempre que o
Arduino fosse inicializado teríamos as mesmas sequências de lançamento
de dado.
4. Realizar a leitura do botão
Iniciamos o loop realizando a leitura do botão e armazenamos o
valor lido na variáve l leitur a .
5. Verificação se o botão foi pressionado
Após a leitura, criamos uma estrutura de seleção usando o
condicional i f . Nela, verificamos se o botão foi pressionado ( leitura ==
HIGH ) .
6. Sorteio de um número aleatório entre 1 e 6
Sendo a condição verdadeira (botão pressionado), procedemos o
sorteio de um número aleatório entre 1 e 6 para ser exibido no dado
eletrônico.
Para realização do sorteio usamos a função random () ; que gera
números aleatórios. Dentro dessa função incluímos o limite mínimo e
máximo do valor aleatório (1, 7).
A função random () ; retorna um valor aleatório entre o limite
mínimo e máximo – 1. Dessa forma, random (1, 7) ; retorna um valor
aleatório entre 1 e 6.
7. Acionamento dos LEDs do dado eletrônico formando o número
sorteado
Para acionar os LEDs do dado eletrônico na forma do número
sorteado, usamos seis estruturas de seleção i f . Dentro da condição do i f ,
inserimos uma comparação de igualdade. Nela, comparamos se o valor
sorteado foi igual a 1, 2, 3, 4, 5 ou 6.
Dentro de cada i f , escrevemos os comandos para acionamento dos
LEDs do dado eletrônico na forma do número sorteado. Por exemplo, se o
número sorteado foi igual a 1 ( sorteio == 1 ) o LED central do dado
eletrônico deverá ser acionado ( digitalWrite (ledPin4, HIGH ) ; ).
8. Tempo de acionamento dos LEDs do dado eletrônico formando o
número sorteado
O dado eletrônico exibirá o número sorteado por 3 segundos e logo
após terá todos os seus LEDs desligados novamente. Para isso, usamos a
função delay ( ) , passando como parâmetro 3000 milissegundos (3
segundos).
Para desligar todos os LEDs do dado eletrônico chamamos a função
apagar( ) .
9. Criar função apagar
Fora da função loop ( ) , escrevemos a função apagar() . Nela
colocamos as variáveis ledPin1, ledPin2, ledPin3, ledPin4, ledPin5, ledPin
6 e ledPin 7 em nível lógico baixo ( LO W ), desligando todos os LEDs
do dado.
TINKERCAD
Para melhor visualizar e/ou simular o circuito e a programação
deste projeto acesse o seguinte link: www.blogdarobotica.com/tinkercad-
dado .
OceanofPDF.com