Campo Minado com RGB WS8212 e Arduino

     0

Neste post vamos apresentar para você como montar um game simples, usando o modulo Led RGB endereçável WS8212.

Se você ainda não conhece este modulo e gostaria de entender como ele funciona, clique no link abaixo, nós fizemos a apresentação deste modulo que é  muito versátil e fácil de usar.

Material:

Ideia Básica do Jogo

O jogo é inspirado no campo minado, jogo que fez muito sucesso do Windows XP até o Windows 7. Você precisa ir escolhendo casa a casa e torcer para não acertar a casa bomba. Montando com 1 modulo, temos então 16 casas (o modulo possui 16 LEDs), e vamos usar 2 botões para fazer a navegação do cursor e um botão para confirmar (selecionar) a casa e revelar se ali havia uma bomba escondida ou não.

Montagem

A montagem está seguindo o que foi programado na IDE do Arduino, lembre se de se alterar a posição de algum componente, realizar a alteração no código.

Vamos agora apresentar o código. Lembrando que caso você ainda não saiba qual biblioteca usar ou como fazer a ligação deste modulo, que você pode consultar, nosso post anterior.

#include <Adafruit_NeoPixel.h>
 
#define PIN 7
#define NUMLED 16
#define botao1 A0
#define botao2 A1
#define enter A4
 
Adafruit_NeoPixel pixels(NUMLED, PIN, NEO_GRB + NEO_KHZ800);

int ponteiro = 1, bomba = 2,proximo = 0, anterior = 0, confirmado[16],
ok = 0, termina = 0, x = 0;  // Cria Variaveis
int alfa[49] =
{0,  0,  0,  0, 200, 200,   0,  0,  200,  200,  0,  0,   0,   0,  0,  0,
 1,  1,  1,  1, 1,   50,  50,   1,    1,   50,  50, 1,   1,   1,  1,  1,
 50, 50,  50,  50, 50,  50,  2, 2,   50,   50,  2,  2,  50, 50, 50, 50, 50};

int beta[49] = 
{5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  350,
 5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  100,  5,  5,  350,
 5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5, 5000};

void animacao()
{
  ponteiro = 0;
  bomba = random(16);
  x = 0;
  pixels.clear();

  for(int b =0; b < 16; b++)
  {
    confirmado[b] = LOW;
  }

  for(int A = 0; A < 49; A++)
  {
   x++;
   if(x == 17)
   {
    x = 0; 
   }
   else if(x == 33)
   {
    x = 0;
   }
    
    pixels.setPixelColor(x, pixels.Color(alfa[A],0,0));
    pixels.show();
    delay(beta[A]);
  }
}
void setup() 
{
  pinMode(botao1, INPUT_PULLUP);
  pinMode(botao2, INPUT_PULLUP);
  pinMode(enter, INPUT_PULLUP);  
  
  termina = LOW;
  pixels.begin();       //Inicia comunicação com os LED
  bomba = random (16);
  delay(200); 
}
 
void loop() 
{
  anterior = digitalRead(botao2);
  proximo = digitalRead(botao1);
  ok = digitalRead(enter);
    
  if(ponteiro >= 16)
  {
    ponteiro = 0;
  }
  else if(0 > ponteiro)
  {
    ponteiro = 15;
  }
  else if(anterior == LOW)
  {
    delay(200);
    ponteiro--; 
  }
  else if(proximo == LOW)
  {
    delay(200);
    ponteiro++;
  }
  else if(ok == LOW)
  {
    if(ponteiro == bomba)
    {
       animacao();
    }
    else
    {
      delay(200);
      confirmado[ponteiro] = HIGH; 
    }
  }
  
   for(int i=0; i<16; i++)
  { 
    
    if(i == ponteiro)
    {
      pixels.setPixelColor(i, pixels.Color(0, 5, 0));
      pixels.show();
    }
    else if(confirmado[i] == HIGH)
    {
      pixels.setPixelColor(i, pixels.Color(0, 0, 1));
      pixels.show();
    }
    else
    {
      pixels.setPixelColor(i, pixels.Color(1, 1, 1));
      pixels.show();
    }
    delay(10);
  }
  
}

Explicando o Código

Este código é simples, porém como usa FOR (Trecho de programa que roda em forma de Loop. no qual você pode definir quantas vezes aquela tarefa irá ser executada, antes de retornar a sequencia do programa). para fazer o acionamento dos LEDs, precisa analisar sequencia a sequencia de cada função para que você consiga compreender cada tarefa. Vou explicar algumas pontos que acho importante:

bomba = random(16); – comando Randon, é uma função do Arduino que tem a capacidade de gerar um numero aleatório dentro de faixa definida, neste caso de 0 a 16..

void animacao() – Função que criamos para quando você encontrar em qual casa a bomba está escondida, seguir a sequencia que programamos. Gostaria de aprender mais sobre funções, e como você pode usar para simplificar seu código, vou te explicar no proximo post:

Veja como ficou nosso game:

caso você ainda ficado com alguma duvida , deixe nos comentários que vamos te responder.

Escrito por: Venâncio Miranda
Revisado por: Jefferson Proesi

Deixe uma resposta

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

5  +  1  =