Saltar cuelgue arduino largo plazo

Buenas tardes,

Recientemente he construido un datalogger basado en arduino y voy a disponerlo en breves en una localización remota.

El datalogguer lee algunos sensores (HC-SR04, ADS1115, Water Sensor). La lectura y almacenamiento en targeta SD se realiza en los 10 primeros segundos (comprobado) de cada minuto, los 50 segundos restantes se muestran los datos en un display.

Me gustaria disponer de un mecanismo de "seguridad" que detectase que si el ciclo de lectura está durando más de 10 segundos (si pasa esto es que hay un cuelgue), salte a la parte de display de datos sin almacenar nada ese ciclo de lectura.

¿Alguien por el foro ha hecho algo parecido?

Espero haberme explicado bien, muchas gracias y un saludo.

Usa un watchdog que es la herramienta para tal efecto pero... no creo que permita semejante tiempo aunque no estoy seguro.

Investiga Arduino watchdog.

Gracias Surbyte,

He estado investigando previamente, y respecto al tiempo creo que puedo dividir el proceso de lectura en varias partes de tal forma que podria emplear un WatchDogTimer.

Mi duda es si puedo poner varios WatchDogTimers sucesivos en el proceso de lectura, y como hacer que este WatchDogTimer no me conduzca al void(setup), reiniciandome el programa.

Un saludo.

No necesitas varios, basta con el tiempo que disponga para que detecte si se ha colgado o no.
No debes pensar en tus 10 segundos sino en el momento en que deje de actuar.
El watchdog verifica permanentemente que el cpu este funcionando de modo que eso te garantiza su funcionamiento.

Ya he entendido, gracias.

¿Y sería posible que el WatchDog no hiciese volver al setup?

Estos son los 3 modos de funcioamiento

Los tres modos de funcionamiento son:

  • Interrupt Mode – La rutina del vector de interrupción WDT_vect se llamará cuando el WDT expire. Puede utilizarse para despertar al microcontrolador desde los modos de sleep, incluido el modo de suspensión de menor potencia (SLEEP_MODE_PWR_DOWN), en el que no están disponibles otros temporizadores.
  • System reset Mode: cuando se produce un timeout del tiempo de espera del watchdog, se reiniciará el microcontrolador. Para usar en el manejo de bloqueos o culegues del código.
  • Interrupt and System Reset Mode – Primero se llamará a la ISR de la interrupción WDT_vect, cuando se complete se va al System Reset Mode