Delay ciclico (Solucionado)
hola que tal hasta el dia de hoy no podido entender bien la función de millis.
lo que quiero hacer es la siguiente:
tarea 1
ejecutar x
espera 1000ms (quiero eliminar los delays)
ejecutar y
espera 1000ms
ejecutar z
tarea 2
tarea 1
ejecutar x
espera 1000ms (quiero eliminar los delays)
ejecutar y
espera 1000ms
ejecutar z
ya tengo mi programa y mis variables definidos, este es la parte del programa que quiero eliminar los delays por millis, ya que cuando hace la lectura del limitswitch veces atraviesa por el delay, lo cual hace que pase de largo hasta que termine el delay y pueda leer el estado del switch ya presionado.
espero me puedan ayudar ejemplificandolo para poder enteder bien la funcion de millis que todos me han
recomendado usar.
lo que quiero hacer es la siguiente:
tarea 1
ejecutar x
espera 1000ms (quiero eliminar los delays)
ejecutar y
espera 1000ms
ejecutar z
tarea 2
tarea 1
ejecutar x
espera 1000ms (quiero eliminar los delays)
ejecutar y
espera 1000ms
ejecutar z
ya tengo mi programa y mis variables definidos, este es la parte del programa que quiero eliminar los delays por millis, ya que cuando hace la lectura del limitswitch veces atraviesa por el delay, lo cual hace que pase de largo hasta que termine el delay y pueda leer el estado del switch ya presionado.
espero me puedan ayudar ejemplificandolo para poder enteder bien la funcion de millis que todos me han
recomendado usar.
code: [select]
estadosw1= digitalread (sw1); //lectura del switch de corte 1 y almacenamiento de su valor.
estadoactivacion= digitalread (activacion); //lectura del boton de activacion y almacenamiento de su valor.
if (estadoinicial==high) //si el valor del estado inicial es igual uno.
if(estadosw1==high){ //si el valor del switch de corte 1 es igual uno.
estadoseguridadsw1 = 1 - estadoseguridadsw1; //con la formula cambiamos el valor de 0 1 y de 1 0 cada que el boton es presionado.
delay (20); //eliminamos el rebote del boton con 20 milisegundos.
}
estadosw1 = estadoanteriorsw1; //cambiamos el valor del estado del switch de corte 1 de nuevo cero.
if (estadoseguridadsw1==1){ //si el valor del estado estado de seguridad del switch 1 es igual uno.
digitalwrite (arranque,low); //se apaga la salida del relevador de arranque.
delay(200); //existe una pausa de 300 milisegundos.
digitalwrite (seguridad,low); //se apaga la salida del relevador de seguridad.
delay(200); //existe una pausa de 300 milisegundos.
digitalwrite (cambio1,low); //se apaga la salida del relevador de cambio.
digitalwrite (cambio2,low); //se apaga la salida del relevador de cambio.
delay(200); //existe una pausa de 300 milisegundos.
digitalwrite (seguridad,high); //se enciende la salida del relevador de seguridad.
delay(500); //existe una pausa de 500 milisegundos.
digitalwrite (arranque,high); //se enciende la salida del relevador de arranque.
estadoseguridadsw1=0;
estadosw2=0;
}
estadosw2= digitalread (sw2); //lectura del switch de corte 2 y almacenamiento de su valor.
estadoactivacion= digitalread (activacion); //lectura del boton de activacion y almacenamiento de su valor.
if (estadoinicial==high) //si el valor del estado inicial es igual uno.
if(estadosw2==high){ //si el valor del switch de corte 2 es igual uno.
estadoseguridadsw2 = 1 - estadoseguridadsw2; //con la formula cambiamos el valor de 0 1 y de 1 0 cada que el boton es presionado.
delay (20); //eliminamos el rebote del boton con 20 milisegundos.
}
estadosw2= estadoanteriorsw2; //cambiamos el valor del estado del switch de corte 2 de nuevo cero.
if (estadoseguridadsw2==1){ //si el valor del estado estado de seguridad del switch 1 es igual uno.
digitalwrite (arranque,low); //se apaga la salida del relevador de arranque.
delay(200); //existe una pausa de 300 milisegundos.
digitalwrite (seguridad,low); //se apaga la salida del relevador de seguridad.
delay(200); //existe una pausa de 300 milisegundos.
digitalwrite (cambio1,high); //se enciende la salida del relevador de cambio.
digitalwrite (cambio2,high); //se enciende la salida del relevador de cambio.
delay(500); //existe una pausa de 500 milisegundos.
digitalwrite (seguridad,high); //se enciende la salida del relevador de seguridad.
delay(600); //existe una pausa de 500 milisegundos.
digitalwrite (arranque,high); //se enciende la salida del relevador de arranque.
estadoseguridadsw2=0;
estadosw1=0;
}
debes entonces ir documentación y leer que es una máquina de estados.
luego de entender el concepto de máquina de estados mira sobre el final un comentario que yo hago modificando un sketch parecido al tuyo
luego de entender el concepto de máquina de estados mira sobre el final un comentario que yo hago modificando un sketch parecido al tuyo
Arduino Forum > International > Español > Software (Moderators: surbyte, Hector_A) > Delay ciclico (Solucionado)
arduino
Comments
Post a Comment