



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.
Esse jogo é uma adaptação do jogo STACKER, que é uma máquina de prêmios que tem nos shoppings.
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.
Também será necessário baixar a Biblioteca Adafruit_NeoPixel.h
O código pode ser baixado de nosso repositório no Github: https://github.com/eletrogate/SubindoALadeira
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.
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();
for(int f = 0; f<=10; f++)
{
randNumber = random(1, 4);
}
}
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;
}
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);
}
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);
}
}
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!
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.
https://youtu.be/slIE4kdOEEA
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.
|
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.
Encontre tudo na Loja Eletrogate com frete grátis para compras acima de R$ 200