segunda-feira, 12 de março de 2012

Dado Eletrônico - LED Dice

Esta barra, indica o nível de dificuldade encontrado para cada experiência realizada.
sendo:
"VERDE", indicação de nível 1 a 5 (Fácil);
"AMARELO", indicação de nível 6 a 8 (Médio);
VERMELHO, indicação de nível 9 e 10 (Difícil);
Arduino by my Self



O dado eletrônico, é um simples brinquedo, onde você ao apertar um botão, gera números aleatório de 0 a 6, que serão mostrados em um conjunto de LEDs com o formato dos lados de um dado.

Mais uma demonstração de que com Arduino, qualquer tarefa se torna possível e pode ser executada com simplicidade e facilidade.

Exemplos de Dados com LED
O HARDWARE:
1 x Arduino UNO ou Duemilanove
1 x Push-botton/Switch Datilar
1 x Resistor de 10 KO
7 x Resistores de 220 O
7 x LEDs vermelhos
1 x BreadBoard
Fios

O CIRCUITO: 

Dado Eletrônico

Disposição dos LEDs
da direita para a esquerda
em cima:
LED1, LED2, LED3
em baixo:
LED4, LED5, LED6
no centro:
LED7



Disposição dos resistores

Disposição dos Fios

# 1
# 2


# 3
# 4

# 5
# 6


O PROGRAMA:

/*

  Este exemplo é um código de domínio público.
 */

// define os pinos onde conectados os LEDs
int ledPins[7] = {2, 3, 4, 5, 6, 7, 8}; 

// define o padão do LED, qual LED será aceso para cada número
int dicePatterns[7][7] = {
{0, 0, 0, 0, 0, 0, 1}, // 1
{0, 0, 1, 1, 0, 0, 0}, // 2
{0, 0, 1, 1, 0, 0, 1}, // 3
{1, 0, 1, 1, 0, 1, 0}, // 4
{1, 0, 1, 1, 0, 1, 1}, // 5
{1, 1, 1, 1, 1, 1, 0}, // 6
{0, 0, 0, 0, 0, 0, 0} // BLANK
};

int switchPin = 9; // define o pino do botão de 
int blank = 6; // quando cair Blank define como 6

// inicialização do Arduino
void setup()
{
  for (int i = 0; i < 7; i++) // gera loop para definição de pinos
    {
      pinMode(ledPins[i], OUTPUT); // define o pino (i) como saída
      digitalWrite(ledPins[i], LOW); // apaga o LED do pino (i)
    }
  randomSeed(analogRead(0)); // lê porta analógica 0 e gera um
                             // número aleatório
}

// loop principal do programa
void loop()
{
  if (digitalRead(switchPin)) // lê o estado do botão, se pressionado (1)(5V)
    {
      rollTheDice(); // roda o Dado
    }
  delay(100); // espera 100ms e executa novamente
}

// roda o Dado
void rollTheDice()
{
  int result = 0; // inicializa a variável "result" com 0
  int lengthOfRoll = random(15, 25); // gera comprimento da rodada, quantos números passarão
  for (int i = 0; i < lengthOfRoll; i++) // loop de 0 até comprimento da rodada
    {
      result = random(0, 6); // gera número de 0 a 6, devido ao indexda matriz começar em 0
                             // e ser preciso 7 números
      show(result); // mostra resultado
      delay(50 + i * 10); // atraso
    }
  for (int j = 0; j < 3; j++) // gera loop para piscar 3 vezes o resultado final
    {
      show(blank);  // mostra branco
      delay(500);   // espera 500ms
      show(result); // mostra resultado
      delay(500);   // espera 500ms
    }
}

// mostra o resultado nos LEDs
void show(int result)
{
  for (int i = 0; i < 7; i++) // gera loop para 7 resultados
    {
      digitalWrite(ledPins[i], dicePatterns[result][i]); // escreve no pino do LED (i) o resuldado de cada LED
    }
}

// Fim da Compilação


O VÍDEO:

Dúvidas e sugestões enviem para: arduinobymyself@gmail.com



Até o próximo Post!








Um comentário:

  1. Excelente. Com algumas modificações consegui mostrar a numeração em um display digital.

    ResponderExcluir