Ejecución en paralelo

Buenos días,

me gustaría haceros una consulta, hasta donde sé creo que no es posible realizar dos procesos en paralelo con un solo Arduino. Actualmente tengo fases hechas, una en la que mido temperatura, humedad,etc. y otra en la que controlo un robot de dos ruedas motrices con una aplicación de Android. ¿es posible controlar el robot mientras sigue midiendo las condiciones ambientales?, si no ¿como lo haríais ustedes?

MUchas gracias

La mejor manera de saberlo es que lo pruebes...y en efecto arduino ejecuta los comandos de los programas secuencialmente uno detras de otro,pero lo hace muy rapido .

Si es posible, incluso secuencialmente pero la única gran consideración es que no debes permitir DELAYs de ningún tipo. El delay no permite atender los distintos procesos en un tiempo aceptable. Supon un delay(1000) son 1000 mseg en lo que nada puedes hacer.

Ahora si reemplazas eso por el uso de if (millis()-time>1000) entonces haces una tarea o bien cambias la condición a tu gusto.

time se define como unsigned long ya sea como global o como te resulte mas útil.

Estoy hablando muy general como justamente tu también planteas tu problema. salvo algunos sensores que son realmente lentos, los demás podrás atenderlos sin inconvenientes.

Lo que no se es el caso de las librerías de motor si usan o no delay(), si es asi tendras que reescribirlas para una mejor perfomance.

Por ultimo y siempre dejo la frutilla del postre para el final. Existe el FREERTOS para Arduino.

Yo no lo he usado pero es lo mas cercano a lo que necesitas pero trabajando con time scheduling o sea. De nuevo, no es posible procesamiento paralelo pero una mentira es hacer que arduino haga una tarea un tiempo t1, la tarea2 t2 y asi.

hablo de milisegundos cada uno. Puedes manejar todas las variables que aseguren que las tareas funcionen. Seguramente tengas que hacer muchas observaciones a las librerias actuales pero es posible obtener buenos resultados.

Estudia FREERTOS para arduino a ver si eso satisface tu idea. Sino lo mas simple es lo que te indico al comienzo.

Gracias, probaré lo de milis() :D