Pages: [1]   Go Down
Author Topic: Proyecto simplón: Tira de leds y juego de luces.  (Read 2446 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 5
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas estoy haciendo un proyecto bastante simple pero que tenía ganas de hacerlo. Consiste en una tira de unos cuantos leds que harán varios juegos de luces.

Par cambiar de un modo a otro simplemente hay que presionar un botón... pero no va del todo fino. Tampoco estoy seguro de que el botón funcione correctamente, ahora mismo lo tengo en la protoboard. Pero me surgió una duda respecto al código. Se supone que al pulsarlo en cualquier momento debería cambiar, pero no lo hace. Ya he dicho que no se si es por problemas "mecánicos" o por código.


  Aquí os dejo mi código:

salu2 y gracias

Code:
int state=1;
int x=5, y=5;

void setup(){
  pinMode(7, INPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
}

void loop(){
 
  if(state==1 && digitalRead(7))
  {
    delay(100);
    state=2;
  }
  else if(state==2 && digitalRead(7))
  {
    delay(100);
    state=3;
  }
  else if(state==3 && digitalRead(7))
  {
    delay(100);
    state=4;
  }
  else if(state==4 && digitalRead(7))
  {
    delay(100);
    state=5;
  }
  else if(state==5 && digitalRead(7))
  {
    delay(100);
    state=6;
  }
  else if(state==6 && digitalRead(7))
  {
    delay(100);
    state=7;
  }
  if(state==7 && digitalRead(7))
  {
    delay(100);
    state=8;
  }
  if(state==8 && digitalRead(7))
  {
    delay(100);
    state=1;
  }
 
 
  switch(state)
  {
    case 1:
         
          for(int b=8; b<=14; b++)
          {
            digitalWrite(b, HIGH);
          }
         
          break;
         
    case 2:
         
          for(int i=8; i<=14; i++) {
           
            digitalWrite(i, HIGH);
            digitalWrite(i-1, LOW);
            delay(100);
          }
          break;
         
    case 3:
           
             for(int j=8; j<=14; j++) {
   
                if(j%2==0)
                {
                  digitalWrite(9, LOW);
                  digitalWrite(11, LOW);
                  digitalWrite(13, LOW);
                  digitalWrite(8, HIGH);
                  digitalWrite(10, HIGH);
                  digitalWrite(12, HIGH);
                  delay(500);
                }
                else
                {
                  digitalWrite(8, LOW);
                  digitalWrite(10, LOW);
                  digitalWrite(12, LOW);
                  digitalWrite(9, HIGH);
                  digitalWrite(11, HIGH);
                  digitalWrite(13, HIGH);
                  delay(500);
                }
            }
            break;
   
     case 4:
     
           for(int k=13; k>7; k--)
           {
             digitalWrite(k, HIGH);
             delay(100);
           }
           for(int h=8; h<14; h++)
           {
             digitalWrite(h, LOW);
             delay(100);
           }
           break;
           
     case 5:
     
           for(int l=13; l>7; l--)
           {
             digitalWrite(l, HIGH);
             delay(100);
           }
           for(int m=13; m>7; m--)
           {
             digitalWrite(m, LOW);
             delay(100);
           }
           break;
           
    case 6:
         
          for(int n=8; n<=14; n++)
          {
            if(n==13)
            {
              digitalWrite(12, LOW);
              digitalWrite(13, HIGH);
             
            }
            else
            {
            digitalWrite(n, HIGH);
            digitalWrite(n+1, HIGH);
            digitalWrite(n-1, LOW);
            delay(500);
            digitalRead(7);
            }
          } 
            break;
           
    case 7:
    x=5;
    y=5;
          for(int o=8; o<=14; o++)
          {
           
           
           
              digitalWrite(o, HIGH);
              digitalWrite(o+x, HIGH);
              delay(150);
         
            x=x-2;
          }
         
         for(int p=8; p<=14; p++)
         {
           
             digitalWrite(p, LOW);
             digitalWrite(p+y, LOW);
             delay(150);
       
           y=y-2;
         }
               
          break;
         
    case 8:
   
    x=random(8,14);
   
    digitalWrite(x, HIGH);
    delay(200);
    digitalWrite(x, LOW);
    delay(100);
   
    break;
         
  }
}
Logged

Castellon, España
Offline Offline
Sr. Member
****
Karma: 7
Posts: 362
OR ganizando
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Saber si el pulsador va bien o no es fácil: compruebalo con un multímetro.

Para depurar errores en el código activa la comunicación serie y el final de cada loop haz que mande el valor de la variable state, así sabrás si cambia correctamente. Puede que el retardo que le des sea pequeño y te haga un rebote, 100ms de retardo a  mi me parece poco, pero es cuestión de dedos rápidos.

Luego utiliza el mismo truco de la salida serie para cada uno de los case, aunque deberías repasarlos bien antes.
Logged


Pages: [1]   Go Up
Jump to: