blog-eletrogate-logo-desktop blog-eletrogate-logo-mobile
  • Categorias
    • Voltar
    • INICIANTES
    • INTERMEDIÁRIOS
    • AVANÇADOS
    • divide
    • Automação Residencial
    • Componentes Eletrônicos
    • Impressão 3D
    • IoT
    • Modelagem 3D
    • Módulos Wifi
    • Por trás da tecnologia
    • Projetos
    • Raspberry Pi
    • Robótica
    • Sensores
    • Shields
    • Sistemas Operacionais
    • Tipos de Arduino
    • Tutoriais
  • Apostilas
  • Quem Somos
  • Seja um redator
  • Trabalhe Conosco
    • Categorias
      • Voltar
      • INICIANTES
      • INTERMEDIÁRIOS
      • AVANÇADOS
      • divide
      • Automação Residencial
      • Componentes Eletrônicos
      • Impressão 3D
      • IoT
      • Modelagem 3D
      • Módulos Wifi
      • Por trás da tecnologia
      • Projetos
      • Raspberry Pi
      • Robótica
      • Sensores
      • Shields
      • Sistemas Operacionais
      • Tipos de Arduino
      • Tutoriais
    • Apostilas
    • Quem Somos
    • Seja um redator
    • Trabalhe Conosco
Loja Eletrogate
voltar
  • Introdução
  • Exemplo do Jogo Original
  • Materiais Necessários e Requisitos para o Projeto Jogo Subindo a Ladeira
  • Código do Projeto
  • Desenvolvimento
  • Esquema de Ligação
  • Conclusão
  • Vídeo do Projeto Final
  • Agradecimentos
  • Sobre o Autor
Projetos

Jogo Subindo a Ladeira

Eletrogate 27 de outubro de 2022Atualizado em: 21 mar 2023

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

  • 1x – Uno R3 + Cabo Usb para Arduino
  • 1x – Protoboard 400 Pontos
  • 1x – Matriz de led 8×8 WS2812b (RGB)
  • 1x – Módulo Interruptor Botão 12×12 com capa Vermelha
  • 1x – Módulo Buzzer Passivo 5V
  • 1x – Módulo Regulador de Tensão Step Down Lm2596S 9/36VDC para 5V 5A USB
  • 1x – Resistor 10K 1/4W (10 Unidades)
  • 1x – Fonte 12V 1A Bivolt
  • 1x – Jumper – Macho/Macho-65 Unidades

 

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 8×8 ( 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


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.


 

 

 

 

 

Eletrogate

27 de outubro de 2022 Atualizado em: 21 mar 2023

A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.

Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!

Projetos

Jogo da Velha na TV!

Eletrogate19 de setembro de 2023

Este é um jogo de quebra-cabeça para dois jogadores, identificados como “X” e “O”, que se revezam marcando os espaços em uma área 3 × 3.
Alguma vez na vida você já deve ter jogado este clássico jogo conhecido como Jogo-da-Velha ou Tic-Tac-Toe.

Neste post, você vai aprender a montar e programar uma versão digital deste jogo, com saída de imagem para TV, utilizando apenas alguns componentes eletrônicos básicos, uma placa Arduino UNO e um Teclado Matricial de 16 teclas.

Projetos

Jogo da Velha na TV!

Eletrogate19 de setembro de 2023

Este é um jogo de quebra-cabeça para dois jogadores, identificados como “X” e “O”, que se revezam marcando os espaços em uma área 3 × 3.
Alguma vez na vida você já deve ter jogado este clássico jogo conhecido como Jogo-da-Velha ou Tic-Tac-Toe.

Neste post, você vai aprender a montar e programar uma versão digital deste jogo, com saída de imagem para TV, utilizando apenas alguns componentes eletrônicos básicos, uma placa Arduino UNO e um Teclado Matricial de 16 teclas.

IoT

LittleFS: Alto Desempenho para RP Pico, ESP32 e ESP8266

Eletrogate12 de setembro de 2023

Aprenda neste post, a usar o sistema de arquivos LittleFS, que possui mais desempenho do que o sistema SPIFFS, nas placas Raspberry Pi Pico, ESP32 e ESP8266.

IoT

LittleFS: Alto Desempenho para RP Pico, ESP32 e ESP8266

Eletrogate12 de setembro de 2023

Aprenda neste post, a usar o sistema de arquivos LittleFS, que possui mais desempenho do que o sistema SPIFFS, nas placas Raspberry Pi Pico, ESP32 e ESP8266.

Sensores

Como Utilizar o Módulo Sensor de Cor RGB TCS34725

Eletrogate5 de setembro de 2023

Você já precisou de algum sensor para detectar as cores de objetos? Venha conferir o post de hoje! Nós vamos utilizar o sensor RGB TCS34725.

Sensores

Como Utilizar o Módulo Sensor de Cor RGB TCS34725

Eletrogate5 de setembro de 2023

Você já precisou de algum sensor para detectar as cores de objetos? Venha conferir o post de hoje! Nós vamos utilizar o sensor RGB TCS34725.

Projetos

Controlando o Braço Robótico em MDF via Bluetooth

Eletrogate29 de agosto de 2023 Atualizado em: 01 set 2023

Que tal montar um braço robótico e controlá-lo pelo celular? Entre para dicas de montagem e aprender a controlar servos e conectar sua placa.

Projetos

Controlando o Braço Robótico em MDF via Bluetooth

Eletrogate29 de agosto de 2023 Atualizado em: 01 set 2023

Que tal montar um braço robótico e controlá-lo pelo celular? Entre para dicas de montagem e aprender a controlar servos e conectar sua placa.

Eletrogate Robô

Cadastre-se e fique por
dentro de novidades!

blog-eletrogate-logo-footer

Rua Rio de Janeiro, 441 - Sala 1301
Centro - Belo Horizonte/MG
CEP 30160-041
*Não temos atendimento físico

ANWAR SLEIMAN HACHOUCHE - ME
CNPJ: 18.917.521/0001-73

Atendimento

(31) 3142-3800

[email protected]


Seg a Sex - das 8h às 17h

Institucional

  • Apostilas
  • Quem Somos
  • Privacidade
  • Seja um Redator
  • Trabalhe Conosco

Nos acompanhe

Facebook Instagram Youtube

© ELETROGATE 2023 - Todos os direitos reservados. Termos de uso e Política de privacidade.