Hola. Estoy controlando una serie de dispositivos que funcionan mediante el protocolo MODBUS pero a veces funcionan otras no, el caso es que deja el arduino en un bucle infinito pillado.
for (int i=0; i < 8; i++) Serial2.write(VoltageReadCommand1[i]);
delay(50);
// Set pin to LOW > Receive mode
digitalWrite(RS485_control, LOW);
// Waiting for receive reply
while ( Serial2.available()<9);
// Read reply in Buffer[];
for (int i=0; i < 9; i++) Buffer[i] = Serial2.read();
float x;
((byte*)&x)[3]= Buffer[3];
((byte*)&x)[2]= Buffer[4];
((byte*)&x)[1]= Buffer[5];
((byte*)&x)[0]= Buffer[6];
return x;
Se debe de quedar esperando el bucle while que veis en el código porque el dispositivo no responde, ahora tengo un perro guardián que lo resetea pero el programa empieza de nuevo y no me interesa, mi duda es, existe alguna forma de salir del bucle while pasado x tiempo y en caso de que se salga de esa forma violenta devuelva X un valor determinado que interprete como error? en el return x
Seria mejor programar bien la condicion del bucle:
while ( Serial2.available()<9);
Esto se cumple incluso cuando no hay datos que leer y Serial2.available() devuelve 0.En esa condicion no deberias entrar a leer nada porque no hay nada que leer,por otro lado ,si en el buffer se acumulan mas de 9 bytes ,no va entrar en el bucle o se va a salir si ya estaba dentro.
Cuidado con los tiempos en MODBUS, requiere un timing de 3.5 mseg para sus operaciones, jugar con retardos puede provocar fallas, asi que se debe tener cuidado y de ningún modo frenar el flujo del programa.