Dado... se demora en encender los LEDs

Hola... Estoy haciendo un proyecto de un dado que se encienda unos LEDs para representar los números son 7 LEDs, pero me encontré con un problema. Cuando presionó el botón programa para que se apaguen los LEDs y que se escoja un numero aleatorio, pero se demoran en encenderse los LEDs, calcule como 10 segundos en que se encendieran, funciona bien todo, solo es que se demora mucho en encenderse los LEDs, les dejo aquí el código

int Dado = 0;
void setup() {
  pinMode(12,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(2, INPUT);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);
  digitalWrite(6, LOW);
}

void loop() {
  if(digitalRead(2)==HIGH){
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);
  digitalWrite(6, LOW);

  do {
    Dado = random(1,6);
    delay(1000);
  }while(Dado == 0);
  }
      if(Dado == 1){
          digitalWrite(9,1);

      }else{
      if(Dado == 2){
          digitalWrite(6,1);
          digitalWrite(12,1);

      }else{
      if(Dado == 3){
          digitalWrite(6,1);
          digitalWrite(9,1);
          digitalWrite(12,1);

      }else{
      if(Dado == 4){
          digitalWrite(6,1);
          digitalWrite(8,1);
          digitalWrite(10,1);
          digitalWrite(12,1);

      }else{
      if(Dado == 5){
          digitalWrite(6,1);
          digitalWrite(8,1);
          digitalWrite(10,1);
          digitalWrite(12,1);
          digitalWrite(9,1);

      }else{
      if(Dado == 6){
          digitalWrite(6,1);
          digitalWrite(7,1);
          digitalWrite(8,1);
          digitalWrite(10,1);
          digitalWrite(11,1);
          digitalWrite(12,1);
      }
      }}}}}
  }

Disculpen si esta desordenado recien estoy empezando a programar asi, espero que puedan ayudarme.

Alguien te explicó lo que hace esto?

 do {
    Dado = random(1,6);
    delay(1000);
  }while(Dado == 0);

Te cuento, cada vez hace un loop dentro de ese do jamás sale porque le pusiste random entre 1 y 6, deberías agregar el 0 para que eventualmente salga.
Y cada ciclo demora 1 segundo, asi que eso es lento.

NOTA: por cierto, intenta subir códigos con autoformato. Ve a la opción del IDE que dice AUTO FORMATO y siempre agrega el espaciado que permite leer bien
Esto es inadmisible

      }}}}}

Salvo para ti que conoces el programa.

Realmente investigue muy poco sobre eso me estaba funcionando así que no cuestione, pero ahora lo cambie así:

int Dado = 0;
void setup() {
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(2, INPUT);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);
  digitalWrite(6, LOW);
  randomSeed(analogRead(0));
}

void loop() {
  if (digitalRead(2) == HIGH) {
    digitalWrite(12, LOW);
    digitalWrite(11, LOW);
    digitalWrite(10, LOW);
    digitalWrite(9, LOW);
    digitalWrite(8, LOW);
    digitalWrite(7, LOW);
    digitalWrite(6, LOW);
    Dado = random(1, 7);
  } else {
    switch (Dado) {
      case 1:
        digitalWrite(9, 1);
        break;
      case 2:
        digitalWrite(6, 1);
        digitalWrite(12, 1);
        break;
      case 3:
        digitalWrite(6, 1);
        digitalWrite(9, 1);
        digitalWrite(12, 1);
        break;
      case 4:
        digitalWrite(6, 1);
        digitalWrite(8, 1);
        digitalWrite(10, 1);
        digitalWrite(12, 1);
        break;
      case 5:
        digitalWrite(6, 1);
        digitalWrite(8, 1);
        digitalWrite(10, 1);
        digitalWrite(12, 1);
        digitalWrite(9, 1);
        break;
      case 6:
        digitalWrite(6, 1);
        digitalWrite(7, 1);
        digitalWrite(8, 1);
        digitalWrite(10, 1);
        digitalWrite(11, 1);
        digitalWrite(12, 1);
        break;
    }
  }
}

Sigo con el mismo problema, se demora en encenderse los LEDs. ¿Hay algo mas que pueda cambiar para probar?

PD: Gracias no sabia la función de Auto Formato

Muchas gracias.
Ya lo he resuelto, fue problema de la conexión del botón, disculpen.
Finalmente quedo el código así

int Dado = 0;
void setup() {
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(2, INPUT);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);
  digitalWrite(6, LOW);
  randomSeed(analogRead(0));
}

void loop() {
  if (digitalRead(2) == HIGH) {
    digitalWrite(12, LOW);
    digitalWrite(11, LOW);
    digitalWrite(10, LOW);
    digitalWrite(9, LOW);
    digitalWrite(8, LOW);
    digitalWrite(7, LOW);
    digitalWrite(6, LOW);
    do{
      Dado = random(1, 7);
    }while(Dado == 0);
    
  } else {
    switch (Dado) {
      case 1:
        digitalWrite(9, 1);
        break;
      case 2:
        digitalWrite(6, 1);
        digitalWrite(12, 1);
        break;
      case 3:
        digitalWrite(6, 1);
        digitalWrite(9, 1);
        digitalWrite(12, 1);
        break;
      case 4:
        digitalWrite(6, 1);
        digitalWrite(8, 1);
        digitalWrite(10, 1);
        digitalWrite(12, 1);
        break;
      case 5:
        digitalWrite(6, 1);
        digitalWrite(8, 1);
        digitalWrite(10, 1);
        digitalWrite(12, 1);
        digitalWrite(9, 1);
        break;
      case 6:
        digitalWrite(6, 1);
        digitalWrite(7, 1);
        digitalWrite(8, 1);
        digitalWrite(10, 1);
        digitalWrite(11, 1);
        digitalWrite(12, 1);
        break;
    }
  }
}

Me esta funcionando muy bien, pero si hay algo que pueda corregir seria de mucha ayuda.

El código funciona pero solo lo entiendes tu.
Intentan usar etiquetas para las cosas y no nombrar asi.

digitalWrite(9, 1);

Claramente el pin 9 ataca el punto del dado.
image
Ejemplo el bonton al pin 2.

const int boton = 2;
// y luego en el loop 
if (digitalRead(boton) == HIGH) {

cambia algo? No. Pero lo hace mas entendible para quien lo lee. Incluso para ti dentro de 2 semanas.

Es al revés.
Se mantiene dentro del lazo do mientras Dado sea igual a 0.
O sea que en este caso saldrá inmediatamente luego de delay() porque Dado nunca será 0.

Saludos

¿Y no se te quedan algo "encendidillos" todos los leds entre pulsaciones?.

O sea que do while esta al divino botón!!

Exactamente.

Saludos

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.