Dado Digital 2

Neste dado digital alterei um pouco o programa para desta vez apresentar o resultado de uma única vez como se pode ver no video. Remoção do efeito “roleta” para melhor se perceber o resultado e mantém o acender rápido dos 6 LEDs para se perceber quando começa novo ciclo. Penso que em termos de experiência não vale a pena aprofundar mais. Tal como o programa anterior não estou a ter em atenção nenhuma optimização ou cuidado com as variáveis.

 

Video

 

Sketch

/*
 * Dado Digital 2
 *
 * Projecto de dado digital com 6 LEDS em que cada um usa uma
 * função random.
 *
 * 20101114 Luis Sismeiro
 *
 * v0.1
 * Versao inicial com 6 LEDs que ligam ou desligam de acordo com
 * o resultado de uma função random.
 * v0.2
 * Versão com o efeito roleta removido para se perceber.
 *

 * TODO
 * - evitar que o resultado final seja 0
 * - ser activado por um botão
 */

byte leds[] = {7, 8, 9, 10, 11, 12}; // OUTPUTs a usar
byte ledsOut[] ={0, 0, 0, 0, 0, 0}; // Estado dos LEDs

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

void loop() {
 int j; // contador para os resultados
 int k; // contador para apagar os LEDs todos
 int l; // contador para aceder os LEDs todos com o resultado
 int m; // contador
 int n; // contador
 int tempo; // tempo para o efeito roleta

 /* obter os resultados random */
 for (j = 0; j < 6; j++) {
 resultado(j);
 }

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

 /* apresentacao do resultado */
 for (l = 0; l < 6; l++) {
 if (ledsOut[l] == 1) {
 digitalWrite(leds[l], HIGH);
 }
 }
 delay(1000); // manter o resultado por 1 segundo

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

 /* todos acesos para saber que estao ok e iniciar ciclo */
 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);
 ledsOut[k] = 0;
 }
 delay(2000);
}

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

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

 /* resultado ON ou OFF */
 if (rvalue < 500) {
 ledsOut[lednum] = 1;
 }
}

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: