Dado Digital com LEDs

image

 

Esta é a minha primeira montagem com o Arduino usando um programa pensado por mim. Cada LED acende individualmente de acordo com o algoritmo, é obtido um valor entre 0 e 999 e dependendo se é maior ou menor que 500 fica ou não aceso. Antes do “resultado” final, cada LED pisca por forma a dar a ideia de roleta. No fim do “resultado” apaga tudo e pisca todos os LEDs antes de iniciar o ciclo. Aqui fica o código e quando tiver oportunidade coloco o video.

 

Video

 

Sketch

/*
 * Dado Digital
 *
 * Projecto de dado digital com 6 LEDS em que cada um usa uma
 * função random.
 *
 * 20101114 Luis Sismeiro
 *
 * v0.1
 * Teste inicial com 2 LEDs que ligam ou desligam de acordo com
 * o resultado de uma função random.
 * v0.2
 * Inclusao de um ciclo para embelezamento do resultado
 *

 * TODO
 * - evitar que o resultado final seja 0
 * - ser activado por um botão
 * DONE
 * - dar a ideia de que esta a computar o resultado
 * - criar uma funcao para o acender o led
 * - criar um array com as posições dos OUTPUTs
 */

byte leds[] = {7, 8, 9, 10, 11, 12};

void setup() {
 int i;

 /* colocar os pin como OUTPUT */
 for (i = 0; i < 6; i++) {
 pinMode(leds[i], OUTPUT);
 }
}

void loop() {
 int j;
 int k;

 /* acender os leds random */
 for (j = 0; j < 6; j++) {
 acendeLed (j);
 }

 /* apagar os leds */
 for (k = 0; k < 6; k++) {
 digitalWrite(leds[k], LOW);
 }
 delay(500);

 /* todos acesos para saber que estao ok */
 for (k = 0; k < 6; k++) {
 digitalWrite(leds[k], HIGH);
 }
 delay(200);

 /* apagar os leds */
 for (k = 0; k < 6; k++) {
 digitalWrite(leds[k], LOW);
 }
 delay(2000);
}

void acendeLed(int lednum) {
 int rvalue;
 int tempo;

 /* random de uma valor entre 0 e 1000 */
 randomSeed(analogRead(millis() % 10)); // para aumentar random
 rvalue = random(1000);
 //Serial.println(rvalue);

 /* embelezamento antes do resultado final */
 for (tempo = 50; tempo < 1600; tempo = tempo * 2) {
 digitalWrite(leds[lednum], HIGH);
 delay(tempo);
 digitalWrite(leds[lednum], LOW);
 delay(500);
 }

 /* resultado ON ou OFF */
 if (rvalue < 500) {
 digitalWrite(leds[lednum], HIGH);
 }
 delay(500); // LED acesso meio segundo
}

Etiquetas: ,

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s


%d bloggers like this: