Hola compañeros, me encuentro haciendo varios programillas con leds, y me surgen algunas dudas en este programa, he de decir que llevo poquito tiempo en esto. Espero que podais ayudarme.
int led[6] = {13,12,11,10,9,8};
int ta, tn;
int i=-1;
void setup()
{
for (int i=0; i<=5; i++)
{
pinMode(led[i], OUTPUT);
digitalWrite(led[i], LOW);
}
}
void loop()
{
tn = millis();
if ((ta-tn)>100);
{
i++;
switch(i)
{
case 0:
digitalWrite(led[i],HIGH);
break;
case 1:
digitalWrite(led[i],HIGH);
break;
case 2:
digitalWrite(led[i],HIGH);
break;
case 3:
digitalWrite(led[i],HIGH);
break;
case 4:
digitalWrite(led[i],HIGH);
break;
case 5:
digitalWrite(led[i],HIGH);
i=-1;
break;
}
}
}
Ese es el codigo que tengo hecho hasta ahora del programa que quiero hacer, 6 leds que simulen el coche fantastico. Hasta ahora solo he conseguido que se me encienda uno detras de otro, pero no que se apaguen sucesivamente (al igual que se van encendiendo). Si me podeis explicar algo mas sobre el temas, os lo agredeceria bastante, ya que he probado varias maneras y no saco nada mas a partir de eso, de todas formas voy a seguir probando y si consigo algo lo voy poniendo aqui hasta que consiga finalizar el programa. espero vuestra ayuda. Mil gracias de antemano
Tu código, empieza bien, pero se complica con el uso de switch-case y millis. Si el código solo tienen que encender y apagar leds, es factible usar delay. Para el movimiento de los leds, tienes que pensar en encender secuencialmente, pero tambien apagar el que encendiste anteriormente.
Esto, se puede solucionar rápidamente, usando dos bucles for, eliminando todo el código del switch-case.
Si empezamos con un for asi:
for (i = 0; i < 5; i++)
{
digitalWrite(led[i + 1], HIGH);
digitalWrite(led[i], LOW);
delay (100);
}
Tenemos solucionada la "ida". Piensa ahora, ¿cómo harías la "vuelta" con otro bucle for?
Por cierto, no te preocupes por que el primer led no se encienda a la "ida", ya lo encenderás a la "vuelta".
Muchas gracias por contestar, es obvio que se me a olvidado poner que el programa no queria que tuviese delay, por eso lo de la funcion millis. Muchisimas gracias por contestar, y surbyte, ahora mismo te comento. Mil gracias a los 2
y que os parece usar la propiedad de que el 6 y abs (-6) es lo mismo?
int led[6] = {13,12,11,10,9,8};
int i = 0, a=0;
long tn=0;
void setup()
{
for (a = 0; a < 6; a++) pinMode(led[i], OUTPUT);
// for (a = 0; a < 6; a++) {digitalWrite(led[i], HIGH); delay(500);}
}
void loop()
{
if (millis()-tn>=1000)
{
tn=millis();
for (a = 0; a < 6; a++) digitalWrite(led[a], LOW); //apagarlos todos
digitalWrite(led[abs(i)], HIGH); //encender el que toque
i++;
if (i==5) i=-5;
}
//resto de códigos a ejecutar
}