Tengo la impresión de que no has visto ninguno de los enlaces que he puesto en dos de mis comentarios anteriores. Te recomiendo que leas al menos estos cuatro, que te pueden ayudar a entender el código que he propuesto:
Una vez comprendas las máquinas de estado y el uso de millis()
verás que no puedes hacer más de una cosa a la vez con while
, for
o delay()
. Ten en cuenta que una «máquina de estados» no es más que una variable que guarda el «estado en que se encuentra la máquina de estados» y el código de las acciones a realizar según el estado en que se encuentra y los «eventos» que se producen mientras se encuentra en cada estado. Esas «acciones» pueden ser cambiar de estado esa máquina de estado y/o hacer cualquier cosa (activar una o varias salidas, guardar un dato, leer un pin, incluso cambiar de estado otra máquina de estados…). Y desde luego, puedes tener tantas máquinas de estado como quieras. Una para controlar el motor paso a paso, otra para controlar un relé, etc.
En mis respuestas de la consulta millis() para varios motores servo y stepper de este foro, explico un poco cual es la filosofía de las máquinas de estado y propongo una solución sobre motores paso a paso y otra de servos. En ambos casos, usando máquinas de estado. Además, si te fijas, se usa la librería AccelStepper que permite controlar motores paso a paso sin que bloquee la ejecución del loop()
. La puedes encontrar en http://www.airspayce.com/mikem/arduino/AccelStepper/ y te la recomiendo mucho.