Ejecutar un proceso siempre

hola!

como sabemos tenemos el void setup() el void loop() y podemos crear nuestras propias funciones (void xxx())
una duda que tengo es si quiero controlar por ejemplo la lectura de un sensor en todo momento,¿ como lo haría? porque como sabemos el void loop tiene un delay, las funciones que nosotros crearíamos también tendrían su propio delay. si la lectura del sensor esta dentro del void loop y fuera de las demás funciones, entonces no se podría controlar la lectura del sensor a cada momento.

saludos

no entiendo bien, a que te refieres con los delay? ¿te refieres al tiempo que tarda en repetir el bucle? que tipo de sensor quieres monitorear? porque dependiendo del tipo de sensor puedes usar interrupciones

si solo fuera

void loop() {}

no hay ninguna demora en su ejecución, asi que es tu problema lo que ahi dentro metes!!

por otro lado

si quiero controlar por ejemplo la lectura de un sensor en todo momento

Ningun sensor demora 0 mseg en devolver su dato.
Si es analógico el adc tarda 100useg, si es digital tarda mucho mas.

Asi que intenta clarificar la idea porque es muy ambigua.

Si creas una función para leer un sensor y esa función la llamas dentro del loop, estas leyendo ese sensor todo el tiempo, mas rápido que eso no creo que se pueda? : :stuck_out_tongue_closed_eyes:

Ya que la idea no está clara, también intentaré adivinar: seguro quiere que lo ejecute en una interrupción, para que así lo haga "siempre", independientemente de dónde se encuentre en el programa principal

Creo que no me deje entender, no quiero que la lectura del sensor sea el menor tiempo posible, quiero saber si supongamos tenemos void loop y alguna funcion que creé void abc(), la lectura del sensor lo coloco en void loop() cuando suba el archivo a arduino este leerá el void loop() luego cuando pase a void abc() ¿dejara de hacer la lectura del sensor?, es por eso que pregunto si puedo hacer que la lectura del sensor nunca deje de ocurrir. el sensor es solo un ejemplo.

Saludos

Estructurado de la forma:

void loop() {
  // Lectura
  abc();
}

La lectura ocurría siempre, pero la repite hasta salir de abc().

cuando entra abc() no deja de leer lectura? ya que en abc() tendrías otras cosas y arduino creo que va con un orden especificado dentro de las lineas y los bucles, o no es asi ? si es así como podría solucionarlo ?

llOzll:
cuando entra abc() no deja de leer lectura? ya que en abc() tendrías otras cosas y arduino creo que va con un orden especificado dentro de las lineas y los bucles, o no es asi ? si es así como podría solucionarlo ?

Entiendo (o creo entender) lo que planteas, el bucle sigue un orden... si tenes 3 funciones dentro del loop, por ejemplo,

void loop()
      {
       funcion1();
       funcion2();
       funcion3();
      }

Se va a llamar a funcion1(), termina la función, pasa a la siguiente, funcion2(), etc. Cuando esta leyendo una función, no esta leyendo otra. Entra en una, hasta que termina y sigue con la siguiente, como explico Lucario.

Si queres que una función se lea constantemente tendrías que llamarla dentro de while, así el bucle se reduciría solo y exclusivamente a esa función, pero no podrías hacer otras cosas.

No estoy seguro de lo que queres hacer, por ahí podrías utilizar la función millis() para leer distintas funciones al mismo tiempo, pero no estoy seguro si realmente se puede hacer eso, pero si se usa para hacer determinadas cosas, mientras se lee el estado de un botón por ejemplo. Seria como un multithreading.

Hola,

Efectivamente, si tu función abc() tardara en ejecutarse una hora, las medidas del sensor serian cada hora.

vaya! alguna posible solucion para esto? yo pienso que si coloco los codigos para hacer la lectura dentro de cada funcion() se podria solucionar esto? uds que dicen ?

llOzll:
vaya! alguna posible solucion para esto? yo pienso que si coloco los codigos para hacer la lectura dentro de cada funcion() se podria solucionar esto? uds que dicen ?

Si puedes hacer eso (colocar el código de medición dentro de cada función) significa que probablemente tengas un mal diseño de funciones. Si tienes un solo delay() dentro de tu funciones, ahí tienes el problema. Debes lograr que tus funciones no tengan delays ni loops. En caso contrario puedes utilizar la interrupciones de Hardware con un timer, como el 555, para que haga mediciones cada cierto tiempo.

saludos

Mira este enlace a ver si te es de utilidad Como usar las interrupciones en arduino - Timer y Hardware

Gracias por sus respuestas!
He leído la pagina que enviaste, estoy leyendo una y otra ves para comprendedlo bien, creo que es lo que buscaba, si tengo alguna duda volveré al foro!

Saludos!

PeterKantTropus:
En caso contrario puedes utilizar la interrupciones de Hardware con un timer, como el 555

Te lo puedes ahorrar; el microcontrolador tiene los suyos; incluso hasta tres.

De hecho, es un timer y una interrupción los que hacen posible a millis().

A ver.. llevas 14 mensajes y aun no clarificas la idea.
Plantealo desde lo practico. Menciona sensores, dinos que quieres que haga cada función, teclado, LCD o TFT, sensores, salidas.

El foro esta lleno de cosas similares y todas funcionan.
El único problema que existe es usar delay en algo que detenga el flujo del programa. Si usas millis() y creas una máquina de estados (algo no tan facil de ver al comienzo) el código fluye con fluidez al punto que daria la impresion que Arduino puede hacer mas del o que hace. Es solo una expresión.