/
/
Jogo Subindo a Ladeira

Jogo Subindo a Ladeira

Sumário

Baixe agora a apostila Arduino Iniciante e comece seus projetos

Compartilhe seu conhecimento e receba em dinheiro ou produtos.

blog-eletrogate-jogo-subindo-ladeira-capa

 

 

 

 

 

Introdução

Sejam bem vindos, caríssimos leitores, o projeto aqui apresentado consiste em uma simulação do jogo Stacker e será executado em   uma Matriz de led RGB Endereçável, gerenciada pelo Arduino. Ao término desse artigo, vocês estarão aptos a programar um led, uma matriz, ou mesmo um painel composto por várias matrizes de LED's RGB ENDEREÇÁVEIS. A importância desse aprendizado está em nos proporcionar, além de gostosas horas de programação, suporte para exibir a figura, efeitos de luz ou mesmo uma mensagem passando nas suas matrizes.

Exemplo do Jogo Original

Esse jogo é uma adaptação do jogo STACKER, que é uma máquina de prêmios que tem nos shoppings.Print de um Vídeo do Youtube

O intuito é ir empilhando os blocos que ficam em movimentos na tela até o topo, ganhando os prêmios conforme o máximo de blocos empilhados.

Materiais Necessários e Requisitos para o Projeto Jogo Subindo a Ladeira

  cta_cart   Também será necessário baixar a Biblioteca Adafruit_NeoPixel.h

Código do Projeto

O código pode ser baixado de nosso repositório no Github: https://github.com/eletrogate/SubindoALadeira

Desenvolvimento

Para conseguirmos simular o jogo no Arduino, foi necessário primeiro entender como funciona uma Matriz de led RGB Endereçável. O led mais comum tem dois terminais, uma tensão de trabalho em torno de 2 a 3 Volts e ele liga na cor específica que foi projetado (verde, por exemplo). Podemos colocar ele em uma porta do Arduino e o ligar e desligar com uma programação simples, como o blink. O led endereçável tem, normalmente 4 terminais: +5 volts, GND, uma porta de entrada e uma porta de saída (para o próximo led em série). No encapsulamento dele, existe um micro processador, que entende a informação digital do Arduino. Um estudo mais aprofundado, pode ser visto no link a seguir: https://blog.eletrogate.com/leds-enderecaveis-conhecendo-o-ws2812b/. A vantagem principal de um led RGB endereçável, sobre um led comum, consiste no tipo de ligação dele, pois, no caso de precisarmos gerenciar 5 LED's comuns, independentes um do outro, será necessário usar 5 portas do Arduino. Usando LED's RGB Endereçáveis, só usamos uma porta do Arduino, indiferente da quantidade de LED's que iremos usar, já que eles são ligados em série um como o outro. O comando básico da biblioteca Adafruit_NeoPixel é: pixels.setPixelColor (endereço, pixels.Color(0, 0, 0));, que consiste no endereço do led na série, começando em 0 (zero), e indo até a quantidade de LED's na sequência ( 0, 1, 2, 3, 4 ...), e as cores que ele pode emitir (dentro dos parênteses). Exemplo 1: pixels.setPixelColor (0, pixels.Color(255, 0, 0)); irá ligar o primeiro LED da sequência, na cor vermelha; Exemplo 2: pixels.setPixelColor (5, pixels.Color(0, 255, 0)); irá ligar o quarto LED da sequência, na cor verde. Ficou estranho, certo? É que, como a contagem dos LED's começam em 0 (zero), o número 5 dentro dos parênteses vale 5 - 1. O comando pixels.clear(); apaga todos os LED's acesos, enquanto que o comando pixels.show();efetivamente liga os LED's que foram programados. Nos exemplos acima, liga o led 0 (zero) e o led 4. Sem o comando final pixels.show(); os LED's programados simplesmente não vão ligar. Temos ainda um comando que é colocado a princípio no Setup do Arduino, que seta o brilho geral dos leds: pixels.setBrightness(50);o número dentro dos parênteses vai de 1 à 255. Sendo 1, o brilho mínimo possível e 255 o brilho máximo de cada LED.

As etapas da nossa programação foram:

1 - Fazer uma rotina, dentro do Void setup, que gerasse uma posição aleatória para o "gabarito" de cores e congelar, na primeira linha de uma Matriz de LED RGB Endereçável de 8x8 ( 64 leds ao todo).

for (int inicio = 0; inicio <=3; inicio++)
{
for (int coluna = 0; coluna <= 5 ; coluna++)
{
pixels.setPixelColor(coluna-1, pixels.Color(0, 0, 0));
pixels.show();
dunilay(50);
pixels.setPixelColor(coluna, pixels.Color(255, 0, 0));
pixels.setPixelColor(coluna+1, pixels.Color(0, 255, 0));
pixels.setPixelColor(coluna+2, pixels.Color(0, 0, 255));
pixels.show();
tone(buzzer, 600, 100);
dunilay(50);
}

for (int coluna = 6; coluna >= 2 ; coluna--)
{
pixels.setPixelColor(coluna+1, pixels.Color(0, 0, 0));
pixels.show();
dunilay(50);
pixels.setPixelColor(coluna, pixels.Color(255, 0, 0));
pixels.setPixelColor(coluna-2, pixels.Color(0, 255, 0));
pixels.setPixelColor(coluna-1, pixels.Color(0, 0, 255));
pixels.show();
tone(buzzer, 250, 100);
dunilay(50);
}
}
////////////////////////////////////////
// POSIÇÃO FINAL. //
// GERAR NÚMERO ALEATÓRIO ENTRE 1 E 5 //
// PARA POSICIONAR O GABARITO. //
////////////////////////////////////////

for(int f = 0; f<=10; f++)
{
randNumber = random(1, 5);
}
pixels.clear();
gabarito = randNumber;
pixels.setPixelColor(gabarito, pixels.Color(255, 0, 0));
pixels.setPixelColor(gabarito+1, pixels.Color(0, 255, 0));
pixels.setPixelColor(gabarito+2, pixels.Color(0, 0, 255));
pixels.show();

2 - Sortear uma das três cores (Vermelho, Verde ou Azul), para que fique passeando pelas colunas de um lado para o outro.

for(int f = 0; f<=10; f++)
{
randNumber = random(1, 4);
}
}

3 - Pré estabelecer as posições possíveis de cada coordenada, conforme o gabarito e a cor do LED sorteada.

if (gabarito == 1 and linha == 1)
{
gabaritovermelho = 14;
gabaritoverde = 13;
gabaritoazul = 12;
}
if (gabarito == 1 and linha == 2)
{
gabaritovermelho = 17;
gabaritoverde = 18;
gabaritoazul = 19;
}
if (gabarito == 1 and linha == 3)
{
gabaritovermelho = 30;
gabaritoverde = 29;
gabaritoazul = 28;
}
if (gabarito == 1 and linha == 4)
{
gabaritovermelho = 33;
gabaritoverde = 34;
gabaritoazul = 35;
}
if (gabarito == 1 and linha == 5)
{
gabaritovermelho = 46;
gabaritoverde = 45;
gabaritoazul = 44;
}
if (gabarito == 1 and linha == 6)
{
gabaritovermelho = 49;
gabaritoverde = 50;
gabaritoazul = 51;
}
if (gabarito == 1 and linha == 7)
{
gabaritovermelho = 62;
gabaritoverde = 61;
gabaritoazul = 60;
}

//////////////////////////////
// GABARITO 2 //
//////////////////////////////
if (gabarito == 2 and linha == 1)
{
gabaritovermelho = 13;
gabaritoverde = 12;
gabaritoazul = 11;
}
if (gabarito == 2 and linha == 2)
{
gabaritovermelho = 18;
gabaritoverde = 19;
gabaritoazul = 20;
}
if (gabarito == 2 and linha == 3)
{
gabaritovermelho = 29;
gabaritoverde = 28;
gabaritoazul = 27;
}
if (gabarito == 2 and linha == 4)
{
gabaritovermelho = 34;
gabaritoverde = 35;
gabaritoazul = 36;
}
if (gabarito == 2 and linha == 5)
{
gabaritovermelho = 45;
gabaritoverde = 44;
gabaritoazul = 43;
}
if (gabarito == 2 and linha == 6)
{
gabaritovermelho = 50;
gabaritoverde = 51;
gabaritoazul = 52;
}
if (gabarito == 2 and linha == 7)
{
gabaritovermelho = 61;
gabaritoverde = 60;
gabaritoazul = 59;
}

//////////////////////////////
// GABARITO 3 //
//////////////////////////////
if (gabarito == 3 and linha == 1)
{
gabaritovermelho = 12;
gabaritoverde = 11;
gabaritoazul = 10;
}
if (gabarito == 3 and linha == 2)
{
gabaritovermelho = 19;
gabaritoverde = 20;
gabaritoazul = 21;
}
if (gabarito == 3 and linha == 3)
{
gabaritovermelho = 28;
gabaritoverde = 27;
gabaritoazul = 26;
}
if (gabarito == 3 and linha == 4)
{
gabaritovermelho = 35;
gabaritoverde = 36;
gabaritoazul = 37;
}
if (gabarito == 3 and linha == 5)
{
gabaritovermelho = 44;
gabaritoverde = 43;
gabaritoazul = 42;
}
if (gabarito == 3 and linha == 6)
{
gabaritovermelho = 51;
gabaritoverde = 52;
gabaritoazul = 53;
}
if (gabarito == 3 and linha == 7)
{
gabaritovermelho = 60;
gabaritoverde = 59;
gabaritoazul = 58;
}

//////////////////////////////
// GABARITO 4 //
//////////////////////////////
if (gabarito == 4 and linha == 1)
{
gabaritovermelho = 11;
gabaritoverde = 10;
gabaritoazul = 9;
}
if (gabarito == 4 and linha == 2)
{
gabaritovermelho = 20;
gabaritoverde = 21;
gabaritoazul = 22;
}
if (gabarito == 4 and linha == 3)
{
gabaritovermelho = 27;
gabaritoverde = 26;
gabaritoazul = 25;
}
if (gabarito == 4 and linha == 4)
{
gabaritovermelho = 36;
gabaritoverde = 37;
gabaritoazul = 38;
}
if (gabarito == 4 and linha == 5)
{
gabaritovermelho = 43;
gabaritoverde = 42;
gabaritoazul = 41;
}
if (gabarito == 4 and linha == 6)
{
gabaritovermelho = 52;
gabaritoverde = 53;
gabaritoazul = 54;
}
if (gabarito == 4 and linha == 7)
{
gabaritovermelho = 59;
gabaritoverde = 58;
gabaritoazul = 57;
}

4 - Aguardar que um botão seja acionado e congelar o LED na posição que estava no momento do acionamento desse botão; Comparar a posição do led na coluna em relação à coluna do LED do gabarito de mesma cor; Adiciona um ponto ao placar, em caso de acerto da coluna, ou diminuir um ponto em caso do led congelar em qualquer outra coluna que não a do gabarito de sua cor atual.

if (estadoBotao == LOW and Cor == 1 and posicaoatual <= 63) ////////// LED VERMELHO
{

tone(buzzer, 250, 100);
if (posicaoatual == gabaritovermelho)
{
pontos = pontos + 1;
for (int vm = 0; vm <= 20; vm++)
{
tone(buzzer, 250, 100);
pixels.setPixelColor(posicaoatual, pixels.Color(0, 0, 0));
pixels.show();
dunilay(50);
pixels.setPixelColor(posicaoatual, pixels.Color(255, 0, 0));
pixels.show();
dunilay(50);
}
}
else {pontos = pontos - 1;}
novalinha = novalinha + 8;
posicaoatual = novalinha;
estadoBotao = 1;
tempo = tempo - 30;
tentativas = tentativas + 1;
linha = linha + 1;
dunilay (1000);
}

if (estadoBotao == LOW and Cor == 2 and posicaoatual <= 63) ///////LED VERDE
{

tone(buzzer, 250, 100);
if (posicaoatual == gabaritoverde)
{
pontos = pontos + 1;
for (int vd = 0; vd <= 20; vd++)
{
tone(buzzer, 250, 100);
pixels.setPixelColor(posicaoatual, pixels.Color(0, 0, 0));
pixels.show();
dunilay(50);
pixels.setPixelColor(posicaoatual, pixels.Color(0, 255, 0));
pixels.show();
dunilay(50);
}
}
else {pontos = pontos -1;}
novalinha = novalinha + 8;
posicaoatual = novalinha;
estadoBotao = 1;
tempo = tempo - 30;
tentativas = tentativas + 1;
linha = linha + 1;
dunilay (1000);
}

if (estadoBotao == LOW and Cor == 3 and posicaoatual <= 63) ////////AZUL
{

tone(buzzer, 250, 100);
if (posicaoatual == gabaritoazul)
{
pontos = pontos + 1;
for (int az = 0; az <= 20; az++)
{
tone(buzzer, 250, 100);
pixels.setPixelColor(posicaoatual, pixels.Color(0, 0, 0));
pixels.show();
dunilay(50);
pixels.setPixelColor(posicaoatual, pixels.Color(0, 0, 255));
pixels.show();
dunilay(50);
}
}
else {pontos = pontos -1;}
novalinha = novalinha + 8;
posicaoatual = novalinha;
estadoBotao = 1;
tempo = tempo - 30;
tentativas = tentativas + 1;
linha = linha + 1;
dunilay (1000);

}

5 - E, por último, "imprimir", na tela da matriz, o resultado. Sendo um "X" piscante para um resultado de qualquer valor negativo ( EX: -1, -2, -3, etc.), 0 (zero) ou 1. Para 2,3,4,5 ou 6, será impresso um resultado do mesmo valor ou um animação de fogos e artifícios, para o resultado 7, o máximo possível no jogo.

if (tentativas == 7) // tentativas máxima de pontuar
{
if (pontos <= 0 or pontos == 1)
{
pixels.clear();
pixels.setBrightness(155); //modificar o brilho dos leds
for(int f = 0; f<=10; f++)
{
pixels.setPixelColor(0, pixels.Color(255, 0, 0));
pixels.setPixelColor(7, pixels.Color(255, 0, 0));
pixels.setPixelColor(9, pixels.Color(255, 0, 0));
pixels.setPixelColor(14, pixels.Color(255, 0, 0));
pixels.setPixelColor(18, pixels.Color(255, 0, 0));
pixels.setPixelColor(21, pixels.Color(255, 0, 0));
pixels.setPixelColor(27, pixels.Color(255, 0, 0));
pixels.setPixelColor(28, pixels.Color(255, 0, 0));
pixels.setPixelColor(35, pixels.Color(255, 0, 0));
pixels.setPixelColor(36, pixels.Color(255, 0, 0));
pixels.setPixelColor(42, pixels.Color(255, 0, 0));
pixels.setPixelColor(45, pixels.Color(255, 0, 0));
pixels.setPixelColor(49, pixels.Color(255, 0, 0));
pixels.setPixelColor(54, pixels.Color(255, 0, 0));
pixels.setPixelColor(56, pixels.Color(255, 0, 0));
pixels.setPixelColor(63, pixels.Color(255, 0, 0));
pixels.show();
dunilay (200);
pixels.setPixelColor(0, pixels.Color(0, 0, 0));
pixels.setPixelColor(7, pixels.Color(0, 0, 0));
pixels.setPixelColor(9, pixels.Color(0, 0, 0));
pixels.setPixelColor(14, pixels.Color(0, 0, 0));
pixels.setPixelColor(18, pixels.Color(0, 0, 0));
pixels.setPixelColor(21, pixels.Color(0, 0, 0));
pixels.setPixelColor(27, pixels.Color(0, 0, 0));
pixels.setPixelColor(28, pixels.Color(0, 0, 0));
pixels.setPixelColor(35, pixels.Color(0, 0, 0));
pixels.setPixelColor(36, pixels.Color(0, 0, 0));
pixels.setPixelColor(42, pixels.Color(0, 0, 0));
pixels.setPixelColor(45, pixels.Color(0, 0, 0));
pixels.setPixelColor(49, pixels.Color(0, 0, 0));
pixels.setPixelColor(54, pixels.Color(0, 0, 0));
pixels.setPixelColor(56, pixels.Color(0, 0, 0));
pixels.setPixelColor(63, pixels.Color(0, 0, 0));
pixels.show();
dunilay (200);
}
}
/// Gera o valor dos pontos pra exibir na Matriz de leds ///
if (pontos == 2)
{
pixels.clear();
pixels.setBrightness(155); //modificar o brilho dos leds
pixels.setPixelColor(1, pixels.Color(0, 255, 0));
pixels.setPixelColor(2, pixels.Color(0, 255, 0));
pixels.setPixelColor(3, pixels.Color(0, 255, 0));
pixels.setPixelColor(4, pixels.Color(0, 255, 0));
pixels.setPixelColor(5, pixels.Color(0, 255, 0));
pixels.setPixelColor(14, pixels.Color(0, 255, 0));
pixels.setPixelColor(18, pixels.Color(0, 255, 0));
pixels.setPixelColor(28, pixels.Color(0, 255, 0));
pixels.setPixelColor(36, pixels.Color(0, 255, 0));
pixels.setPixelColor(42, pixels.Color(0, 255, 0));
pixels.setPixelColor(42, pixels.Color(0, 255, 0));
pixels.setPixelColor(49, pixels.Color(0, 255, 0));
pixels.setPixelColor(53, pixels.Color(0, 255, 0));
pixels.setPixelColor(59, pixels.Color(0, 255, 0));
pixels.setPixelColor(60, pixels.Color(0, 255, 0));
pixels.setPixelColor(61, pixels.Color(0, 255, 0));
pixels.show();
}

if (pontos == 3)
{
pixels.clear();
pixels.setBrightness(155); //modificar o brilho dos leds
pixels.setPixelColor(2, pixels.Color(0, 0, 255));
pixels.setPixelColor(3, pixels.Color(0, 0, 255));
pixels.setPixelColor(4, pixels.Color(0, 0, 255));
pixels.setPixelColor(10, pixels.Color(0, 0, 255));
pixels.setPixelColor(14, pixels.Color(0, 0, 255));
pixels.setPixelColor(21, pixels.Color(0, 0, 255));
pixels.setPixelColor(27, pixels.Color(0, 0, 255));
pixels.setPixelColor(28, pixels.Color(0, 0, 255));
pixels.setPixelColor(35, pixels.Color(0, 0, 255));
pixels.setPixelColor(36, pixels.Color(0, 0, 255));
pixels.setPixelColor(42, pixels.Color(0, 0, 255));
pixels.setPixelColor(49, pixels.Color(0, 0, 255));
pixels.setPixelColor(53, pixels.Color(0, 0, 255));
pixels.setPixelColor(59, pixels.Color(0, 0, 255));
pixels.setPixelColor(60, pixels.Color(0, 0, 255));
pixels.setPixelColor(61, pixels.Color(0, 0, 255));
pixels.show();
}

if (pontos == 4)
{
pixels.clear();
pixels.setBrightness(155); //modificar o brilho dos leds
pixels.setPixelColor(4, pixels.Color(0, 0, 255));
pixels.setPixelColor(11, pixels.Color(0, 0, 255));
pixels.setPixelColor(4, pixels.Color(0, 0, 255));
pixels.setPixelColor(20, pixels.Color(0, 0, 255));
pixels.setPixelColor(27, pixels.Color(0, 0, 255));
pixels.setPixelColor(33, pixels.Color(0, 0, 255));
pixels.setPixelColor(34, pixels.Color(0, 0, 255));
pixels.setPixelColor(35, pixels.Color(0, 0, 255));
pixels.setPixelColor(36, pixels.Color(0, 0, 255));
pixels.setPixelColor(43, pixels.Color(0, 0, 255));
pixels.setPixelColor(46, pixels.Color(0, 0, 255));
pixels.setPixelColor(49, pixels.Color(0, 0, 255));
pixels.setPixelColor(53, pixels.Color(0, 0, 255));
pixels.setPixelColor(59, pixels.Color(0, 0, 255));
pixels.setPixelColor(62, pixels.Color(0, 0, 255));
pixels.show();
}

if (pontos == 5)
{
pixels.clear();
pixels.setBrightness(155); //modificar o brilho dos leds
pixels.setPixelColor(2, pixels.Color(0, 0, 255));
pixels.setPixelColor(3, pixels.Color(0, 0, 255));
pixels.setPixelColor(4, pixels.Color(0, 0, 255));
pixels.setPixelColor(10, pixels.Color(0, 0, 255));
pixels.setPixelColor(14, pixels.Color(0, 0, 255));
pixels.setPixelColor(21, pixels.Color(0, 0, 255));
pixels.setPixelColor(26, pixels.Color(0, 0, 255));
pixels.setPixelColor(33, pixels.Color(0, 0, 255));
pixels.setPixelColor(34, pixels.Color(0, 0, 255));
pixels.setPixelColor(35, pixels.Color(0, 0, 255));
pixels.setPixelColor(36, pixels.Color(0, 0, 255));
pixels.setPixelColor(46, pixels.Color(0, 0, 255));
pixels.setPixelColor(49, pixels.Color(0, 0, 255));
pixels.setPixelColor(59, pixels.Color(0, 0, 255));
pixels.setPixelColor(60, pixels.Color(0, 0, 255));
pixels.setPixelColor(61, pixels.Color(0, 0, 255));
pixels.setPixelColor(62, pixels.Color(0, 0, 255));
pixels.show();
}

if (pontos == 6)
{
pixels.clear();
pixels.setBrightness(155); //modificar o brilho dos leds
pixels.setPixelColor(2, pixels.Color(0, 255, 0));
pixels.setPixelColor(3, pixels.Color(0, 255, 0));
pixels.setPixelColor(4, pixels.Color(0, 255, 0));
pixels.setPixelColor(10, pixels.Color(0, 255, 0));
pixels.setPixelColor(14, pixels.Color(0, 255, 0));
pixels.setPixelColor(17, pixels.Color(0, 255, 0));
pixels.setPixelColor(21, pixels.Color(0, 255, 0));
pixels.setPixelColor(33, pixels.Color(0, 255, 0));
pixels.setPixelColor(26, pixels.Color(0, 255, 0));
pixels.setPixelColor(29, pixels.Color(0, 255, 0));
pixels.setPixelColor(30, pixels.Color(0, 255, 0));
pixels.setPixelColor(33, pixels.Color(0, 255, 0));
pixels.setPixelColor(35, pixels.Color(0, 255, 0));
pixels.setPixelColor(36, pixels.Color(0, 255, 0));
pixels.setPixelColor(46, pixels.Color(0, 255, 0));
pixels.setPixelColor(49, pixels.Color(0, 255, 0));
pixels.setPixelColor(53, pixels.Color(0, 255, 0));
pixels.setPixelColor(59, pixels.Color(0, 255, 0));
pixels.setPixelColor(60, pixels.Color(0, 255, 0));
pixels.setPixelColor(61, pixels.Color(0, 255, 0));
pixels.show();
}

if (pontos == 7) /// Simula uma explosão de fogos - DEVO MELHORAR
{
pixels.clear();
pixels.setBrightness(155); //modificar o brilho dos leds
pixels.setPixelColor(5, pixels.Color(0, 255, 0));
pixels.show();
tone(buzzer, 250, 10);
dunilay(100);
pixels.setPixelColor(5, pixels.Color(0, 0, 0));
pixels.show();
tone(buzzer, 250, 10);
dunilay(100);
pixels.setPixelColor(10, pixels.Color(0, 255, 0));
pixels.show();
tone(buzzer, 250, 10);
dunilay(100);
pixels.setPixelColor(10, pixels.Color(0, 0, 0));
pixels.show();
tone(buzzer, 250, 10);
dunilay(100);
pixels.setPixelColor(21, pixels.Color(0, 255, 0));
pixels.show();
tone(buzzer, 210, 10);
dunilay(100);
pixels.setPixelColor(21, pixels.Color(0, 0, 0));
pixels.show();
tone(buzzer, 255, 10);
dunilay(100);
pixels.setPixelColor(27, pixels.Color(0, 255, 0));
pixels.show();
tone(buzzer, 250, 10);
dunilay(100);
pixels.setPixelColor(27, pixels.Color(0, 0, 0));
pixels.show();
tone(buzzer, 220, 10);
dunilay(100);
pixels.setPixelColor(36, pixels.Color(0, 255, 0));
pixels.show();
tone(buzzer, 230, 10);
dunilay(100);
pixels.setPixelColor(36, pixels.Color(0, 0, 0));
pixels.show();
tone(buzzer, 250, 10);
dunilay(100);
pixels.setPixelColor(44, pixels.Color(0, 255, 0));
pixels.show();
tone(buzzer, 100, 10);
dunilay(100);
pixels.setPixelColor(44, pixels.Color(0, 0, 0));
pixels.show();
tone(buzzer, 50, 10);
dunilay(100);
for(int f = 0; f<=20; f++)
{
pixels.setPixelColor(50, pixels.Color(255, 255, 255));
pixels.show();
tone(buzzer, 250, 10);
dunilay(100);
pixels.setPixelColor(50, pixels.Color(0, 0, 0));
pixels.show();
tone(buzzer, 200, 10);
dunilay(100);

}
for(int f = 0; f<=50; f++)
{
pixels.setPixelColor(63, pixels.Color(255, 255, 0));
pixels.setPixelColor(59, pixels.Color(0, 255, 255));
pixels.setPixelColor(33, pixels.Color(150, 255, 30));
pixels.setPixelColor(46, pixels.Color(0, 255, 0));
pixels.setPixelColor(52, pixels.Color(0, 255, 0));
pixels.setPixelColor(29, pixels.Color(0, 0, 255));
pixels.show();
tone(buzzer, 150, 10);
dunilay(30);
pixels.setPixelColor(63, pixels.Color(0, 0, 0));
pixels.setPixelColor(59, pixels.Color(0, 0, 0));
pixels.setPixelColor(33, pixels.Color(0, 0, 0));
pixels.setPixelColor(46, pixels.Color(0, 0, 0));
pixels.setPixelColor(52, pixels.Color(0, 0, 0));
pixels.setPixelColor(29, pixels.Color(0, 0, 0));
pixels.show();
tone(buzzer, 25, 10);
dunilay(30);
}
}

6 - Após o término, no nosso jogo, o Arduino vai resetar via programação e recomeçar.

dunilay(5000); //Aguarda 5 segundos
tentativas = 0; // Zera as tentativas
funcao_Reset(); // Reinicia o Jogo
"Façam suas apostas para ver quem faz mais pontos". A propósito, parece fácil no começo, mas, a cada botão acionado, o LED que se movimenta sobe uma linha e acelera a troca de coluna. Boa Sorte e divirtam-se!

Esquema de Ligação

Como ligar os componentes

Conclusão

Acredito que, após esse post, os leitores consigam exibir figuras, efeitos visuais, e até projetar jogos ou avisos numa ou mais Matrizes de led RGB Endereçáveis, ligadas em série. Espero, ainda, que tenha conseguido passar com clareza a maneira de gerenciar cada LED da matriz conforme a cor, brilho e posição do led. A vantagem principal do uso da Matriz de led RGB Endereçável WS2812B no Arduino, ou em outra placa controladora, é ela usar somente uma porta digital, liberando as outras para outros fins em um projeto mais audacioso. No nosso caso, poderia acionar um solenoide com outra porta e "liberar" o prêmio conforme é a máquina original Stacker. Lanço um desafio para os colegas leitores: "enxuguem" a programação e coloquem, por exemplo, um menu de níveis do jogo, para torná-lo mais ou menos difícil.

Vídeo do Projeto Final

https://youtu.be/slIE4kdOEEA

Agradecimentos

Agradeço pela paciência de minha esposa Rejane, que além de "alcançar" aquele cafezinho, deu algumas dicas do resultado final. Agradecimentos também a meu colega Lucas Brandão, que meu deu o motivo do projeto.

Sobre o Autor


Luiz Carlos Rezende Saraiva

Formado em eletrônica pelo Senai do Rio Grande do Sul. Tenho a eletrônica por hobby, já programei em linguagem Basic(Tk90x), C# no  Arduino, faço projetos caseiros na área de robótica, painel solar, etc, minha casa é quase toda inteligente, Atuo na área de TI na empresa que trabalho, aberto a todos os conhecimentos da tecnologia, sempre procurando novos aprendizados.

Transforme seu “velho” Arduino em um jogo divertido, adicionando uma Matriz de led RGB Endereçável, um botão, um buzzer e meia dúzia de ligações, mais uma boa programação, e se surpreenda com o resultado final.

Precisa dos componentes para este projeto?

Encontre tudo na Loja Eletrogate com frete grátis para compras acima de R$ 200

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *