Hola me considero un novato en arduino por eso me salto una duda para mi programa, lo que quiero que la secuencia solo dure por 30 segundos y se apague hasta que reinicie el arduino o presionando un boton (el reinicio del arduino lo estoy escribiendo en otro lado para probar si aprendi )
void setup()
{
int i = 0 ;
for ( i = 6 ; i < 14 ; i++)
pinMode( i , OUTPUT) ;
}
void loop()
{
for ( int i = 6 ; i < 14 ; i++)
{
digitalWrite( i , HIGH) ;
delay (100) ;
digitalWrite( i , LOW);
delay (100) ;
}
for ( int i = 12 ; i >6 ; i--)
{
digitalWrite( i , HIGH) ;
delay (100) ;
digitalWrite( i , LOW);
delay (100) ;
}
}
no se como darle un tiepo definido de funcionamiento al "void loop"
Hola Deviance27. Recuerda leer las normas del foro
Los códigos, enlaces, imágenes y citas deben insertarse usando tags o etiquetas.
Para los códigos la etiqueta es </>.
Igual que tú, tampoco sé mucho de los comandos y opciones de arduino, pero hasta que alguien nos ilustre con algo que sea específicamente para lo que necesitas, te puedo dar una pequeña solución alternativa.
Se trata de controlar en el programa si ya pasaron 30 segundos, y si ya pasaron, directamente entrar a un bucle sin fin y sin hacer nada.
Tomo tu código y aumento lo que te indico:
unsigned long tiempo;
void setup()
{
int i = 0 ;
for ( i = 6 ; i < 14 ; i++)
pinMode( i , OUTPUT) ;
tiempo=millis();
}
void loop()
{
if ((tiempo==0xffffffff) || (millis()-tiempo > 30*1000)
{
tiempo=0xffffffff;
return;
}
for ( int i = 6 ; i < 14 ; i++)
{
digitalWrite( i , HIGH) ;
delay (100) ;
digitalWrite( i , LOW);
delay (100) ;
}
for ( int i = 12 ; i >6 ; i--)
{
digitalWrite( i , HIGH) ;
delay (100) ;
digitalWrite( i , LOW);
delay (100) ;
}
}
Muy sencillo, puedes poner en setup lo que está en el loop.
Para que la secuencia dure 30 segundos (o algo aproximado), tendrás que meter todo el código del loop dentro de otro for. Para calcular cuantas repeticiones debe hacer ese nuevo for, se logra de la siguiente manera:
Son ocho pines, cada pin se enciende y se apaga con un delay de 100 milisegundos; hacia adelante. Hacia atrás, solo lo hacen 6 pines. Por tanto, cada pin se tarda 200 milisegundos en encender y apagar. Entonces, tenemos que:
(8 + 6) * 200 = 2800
Ejecutar el código que hay en el loop tarda 2,8 segundos. Ahora para saber cuantas repeticiones son necesarias para los 30 segundos:
30 / 2,8 = 10,71
Podremos redondearlo a 11 si fuera el caso.
Por lo tanto, para que dure aprox. 30 segundos y luego no haga nada, el setup ha de quedar así:
void setup()
{
int i = 0 ;
for ( i = 6 ; i < 14 ; i++) {
pinMode( i , OUTPUT) ;
}
for (byte j = 0; j < 11; j++) {
// Coloca aquí el código que está en el loop
}
}
void loop() {
// Esta función no se puede obviar, pero si quieres que luego el Arduino no haga nada,
// entonces deja esta función vacía.
}
al encender el arduino destellen las salidas del 6 al 11 (por tiempo indefinido) pero usare un sensor de movimiento o de radio para detectar movimiento y emprecen a funcionar las salidas del 6 al 11 en forma de cascada por 30 segundos y pasado esos 30 segundos empiecen a destellar nuevamente las salidas. Ahora estoy viendo como cambiar los estados ( destello o cascada) al enviar la señal el sensor. Cualquier ayuda sirve gracias!!!!!!