Criando Jogos com Arduino 2: Passo a Passo

Carol Correia Viana · Capítulo 13 de 21

Páginas do PDF

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