He leido varios temas sobre millis() y he intentado aplicarlo de diversar formas pero no me funciona con esta funcion
while ( (sendATcommand(F("AT+CREG?"), F("+CREG: 0,1"), 10000)) == 0 );
Si intento aplicarlo nunca rompe el ciclo del while, lo que busco es que en caso de que el modulo sim no se encuentre conectado o presente alguna falla no se quede eternamente en ese ciclo.
implemente esto para que dure maximo un segundo y se queda de igual forma sin romper el ciclo.
unsigned long lt1;
lt1=millis();
while ( ((millis() - lt1) < 1000) || ((sendATcommand(F("AT+CREG?"), F("+CREG: 0,1"), 500)) == 0) );
millis() - lt1) < 1000
Cada vez que millis() - lt1 sea menor que 1000 eso dará verdadero o sea durante 1 segundo se queda en el loop y luego cuando termina da FALSE o sea lo que buscas para que salga peroooo depende del otro comando que tmb debe dar falso
De nuevo, como no sabemos que hace sendATcommand() no podemos mas que decir que en los 500 mseg de ese comandos nunca recibe otra cosa que no sea 0
Como dice surbyte no sabemos que hace dicha función, pero si tu problema es salir de ese bucle es fácil.
Según la primera parte en el while siempre tienes TRUE, por lo tanto esa función te da 0.
El problema que tienes en la segunda parte es que la condición que le has puesto durante el primer segundo será TRUE or TRUE que da TRUE. Despues del primer segundo sera FALSE or TRUE que sigue dando TRUE.
Si quieres salir de ese bucle cambia el OR por un AND.
Si necesitas algo más tendrias que dar información de esa función