Problema con mi dado electronico

La programación no es mi fuerte y la verdad no sé que tengo que hacer para que funcione.
Dejo el código adjunto, agradezco cualquier tipo de ayuda.
C++:
int led[]={0,1,2,3,4,5,6};
int pausa=200;

void setup()
{
 for(int i=0;i<7;i++)
{
 pinMode(led[i],OUTPUT);
 digitalWrite(led[i],LOW);
}
 pinMode(1,INPUT);
 randomSeed(analogRead(1));
}

void secuencia(void)
{
  int i=0;
  for(i=1;i<3;i++);
   {
   numero_dado(4);
   delay(pausa);
   numero_dado(0);
   delay(pausa);
   numero_dado(3);
   delay(pausa);
   numero_dado(0);
   delay(pausa);
   digitalWrite(3,HIGH);
   digitalWrite(6,HIGH);
   digitalWrite(2,HIGH);
   delay(pausa);
   numero_dado(0);
   delay(pausa);
   digitalWrite(6,HIGH);
   digitalWrite(3,HIGH);
   delay(pausa);
   numero_dado(0);
   delay(pausa);
   digitalWrite(4,HIGH);
   digitalWrite(6,HIGH);
   digitalWrite(1,HIGH);
   delay(pausa);
   numero_dado(0);
   delay(pausa);
   digitalWrite(3,HIGH);
   digitalWrite(0,HIGH);
   delay(pausa);
   numero_dado(0);
   delay(pausa);
   numero_dado(4);
   delay(pausa);
   numero_dado(0);
   delay(pausa);
   numero_dado(6);
   delay(pausa);
   numero_dado(0);
   delay(pausa);
   numero_dado(7);
   delay(pausa);
   numero_dado(0);
   delay(pausa);   
   numero_dado(7);
   delay(pausa);
   numero_dado(0);
   delay(pausa);
   numero_dado(7);
   delay(pausa);
   numero_dado(0);
   delay(pausa*2);
   }
}

void numero_dado(int n)
{
 boolean numero[8][7]={
                       {0,0,0,0,0,0,0},                      //0
                       {0,0,0,0,0,0,1},                      //1
                       {1,0,0,0,0,1,0},                      //2
                       {1,0,0,0,0,1,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
                       {1,1,1,1,1,1,1}};                     //7

for(int j=0;j<7;j++)
  {
   digitalWrite (led[j],numero[n][j]);
  }
}

void loop()
{
  int numero;
  if(digitalRead(1==HIGH))
  {numero=random(1,7);
  secuencia();
  numero_dado(numero);
  delay(pausa*5);
  numero_dado(0);
  }
}
 

Adjuntos

  • dado electronico.zip
    586 bytes · Visitas: 4
Declara correctamente analog como A1 para evitar confusión, estas primero iniciando el pin 1 como salida y luego lo estas cambiando a entrada, cuando haces llamada a analogRead(1) el código lo ejecuta sobre el pin 1, mientras que A1 sería el 15 (para un Arduino UNO, la asignación real depende de la placa que empleas).
¿Puedes adjuntar tu diagrama?
Estas confundiendo entradas y salidas, en tu setup tienes:
C++:
digitalWrite(led[i],LOW);
Lo que en algún punto es digitalWrite(1, LOW); y en otra linea lo pasas a pinMode(1,INPUT); cambiando de salida a entrada.
Pero en tu loop tienes:
C++:
if(digitalRead(1==HIGH))
Como 1 lo habías iniciado como Salida, pero luego (y posiblemente por error) lo cambias a entrada sin saber que tienes conectado ahí puede llevar a que se active o no, y posiblemente a menos de que tengas una EMI fuerte se quede en falso de forma indefinida si es que va a un LED.
Por cierto que tambien ese uso está mal por que debería ser if(digitalRead(1)==HIGH) pero dado a que HIGH = True para el código puedes solo dejarlo como if(digitalRead(1))

Una sugerencia para evitar esos errores es siempre iniciar el programa con la definición de los pines y nunca emplear los números directamente en el código, esta sería una corrección con esa regla:
Código:
const int PIN_BOTON = 7; //Desconozco a cuál envíes la entrada, pero iría con una resistencia a tierra
const int PIN_SEMILLA = A1; //Definimos el pin Ax para iniciar el generador de pseudoaleatorios.
const int led[]={0,1,2,3,4,5,6}; //esta la establecemos como constantes también al ser definiciones
int pausa=200;

void setup()
{
 for(int i=0;i<7;i++)
{
 pinMode(led[i],OUTPUT);
 digitalWrite(led[i],LOW);
}
 pinMode(PIN_BOTON,INPUT); //Iniciamos el posible boton
 randomSeed(analogRead(PIN_SEMILLA)); //Corregimos de 1 al pin análogo
}

void secuencia(void)
{
  int i=0;
  for(i=1;i<3;i++);
   {
   numero_dado(4);
   delay(pausa);
   numero_dado(0);
   delay(pausa);
   numero_dado(3);
   delay(pausa);
   numero_dado(0);
   delay(pausa);
   digitalWrite(3,HIGH);
   digitalWrite(6,HIGH);
   digitalWrite(2,HIGH);
   delay(pausa);
   numero_dado(0);
   delay(pausa);
   digitalWrite(6,HIGH);
   digitalWrite(3,HIGH);
   delay(pausa);
   numero_dado(0);
   delay(pausa);
   digitalWrite(4,HIGH);
   digitalWrite(6,HIGH);
   digitalWrite(1,HIGH);
   delay(pausa);
   numero_dado(0);
   delay(pausa);
   digitalWrite(3,HIGH);
   digitalWrite(0,HIGH);
   delay(pausa);
   numero_dado(0);
   delay(pausa);
   numero_dado(4);
   delay(pausa);
   numero_dado(0);
   delay(pausa);
   numero_dado(6);
   delay(pausa);
   numero_dado(0);
   delay(pausa);
   numero_dado(7);
   delay(pausa);
   numero_dado(0);
   delay(pausa); 
   numero_dado(7);
   delay(pausa);
   numero_dado(0);
   delay(pausa);
   numero_dado(7);
   delay(pausa);
   numero_dado(0);
   delay(pausa*2);
   }
}

void numero_dado(int n)
{
 boolean numero[8][7]={
                       {0,0,0,0,0,0,0},                      //0
                       {0,0,0,0,0,0,1},                      //1
                       {1,0,0,0,0,1,0},                      //2
                       {1,0,0,0,0,1,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
                       {1,1,1,1,1,1,1}};                     //7

for(int j=0;j<7;j++)
  {
   digitalWrite (led[j],numero[n][j]);
  }
}

void loop()
{
  int numero;
  if(digitalRead(PIN_BOTON)) //corregimos el if y validamos PIN_BOTON HIGH = True
  {numero=random(1,7);
  secuencia();
  numero_dado(numero);
  delay(pausa*5);
  numero_dado(0);
  }
}
La ventaja es que sí a PIN_BOTON lo requieres en otro pin solo tienes que cambiar la definición y no tener que revisar todas las instancias en el código.
 
Última edición:
Atrás
Arriba