Desorden en bucles y llamadas a procesos y/o funciones

Estimados,
Les solicito me ayuden a poder ordenar este código que les posteo debido a que no tengo casi nada de experiencia en buenas prácticas de programación, sumado a que vengo de la programación estructurada, no logro descubrir como evitar que se quede sin girar el bucle para leer los datos, debido a que aparentemente no encuentra respuesta del servidor de ThingSpeak y se clava hasta lograrlo.
El sistema “debe” trabajar del sgte modo:
Mientras se sensa la temperatura y la distancia, el codigo ejecuta dos bucles de tiempo que accionan dos relés. Uno de estos bucles es de tiempo simple (cuando pasa unos 10 minutos acciona un motor durante un minuto y asi susecivamente). El otro es de doble variable ya que uno de ellos varía de acuerdo a la temperatura (se acciona un resistencia a un determinado valor bajo y desactiva alcanzado el otro alto). Mientras esto acurre indefinidamente, el sistema debe mostrar por un LCD los datos de temperatura y distancia mientras los envía al servidor de ThingSpeak.
Por supuesto lo hace pero sigue el retardo del código que extraje desde un blog, donde cuenta 16 segundos antes de volver a mandar el dato al sitio de ThingSpeak. En ciertas ocasiones se traba dado que se queda en el bucle de espera por la respuesta del servidor en conjunto con la conexión con el stack de ethernet según estuve mirándolo.
Lo que es la automaticación de los procesos que necesito, el código acciona bien pero todo el ciclo depende de la función ThingSpeak y no debe ser así. todo debería ser gobernado por el tiempo de procesamiento ya que no hay retardos significativos más que los propios que intercalé en cada línea de llamada para cada función particular.
El hardware es un ARDUINO MEGA 2560 Clon con un Shield Ethernet HR911, HRS-04, DB18S20, array de 4 relays y un Display de 16x2 con teclado, el cual no utilizo.
Gracias por la ayuda que me puedan brindar y quedo a su disposición por más detalles.

BIODIGESTOR_ThingSpeak_SiFunca.ino (6.74 KB)

@xenpaul, bienvenido al Foro Arduino en Español.

Lo primero es que debes prestar atención a donde posteas. Si posteas escribiendo en español NUNCA lo hagas en el foro en inglés ni en cualquier otro idioma.
Por esa razón este hilo fue movido aquí.

El otro día estuve trabajano con alguien usando ThinkSpeak y a través de un módulo SIM900 enviabamos via celular datos cada 1 segundo y los mostraba sin problemas.

Ahora veo un posible problema en esto

const int updateThingSpeakInterval = 16 * 1000;

justamente de desbordamiento porque

cambia a
const unsigned long updateThingSpeakInterval = 30*1000;

los elementos usados con millis() debes ser del tipo unsigned long, jamas unsigned int aunque te lo parezca.

Gracias surbyte,
Mi trabajo se concentra en transmisión Sub Gigas (telecomunicaciones) y enfocada para lugares sin servicios donde se encuentran las colmenas por lo que los datos viajan en una red Digimesh. En fin... ese es mi campo por eso mi desconocimiento en programación. Si alguien necesita ayuda por ese lugar, dale la referencia y devuelvo gentilezas.
Siguiendo... Tome la función para ThingSpeak de un ejemplo que citaba esto así que probaré lo que dices. Otro trabajo que tengo usa el unsigned long para comparar contra millis(), pero como los ejemplos abundan, realizé copy/paste y luego aparecen los frankesteins como el mío.
Por último gracias por mover el post donde corresponde porque debido a que es mi primera vez posteando aquí, seguí otro en español y cometí el error.
Que tengas un buen día y gracias nuevamente por el tip