Puerto Serie de mi electric mountainboard

Hola chicos.

Como podeis ver en la imagen que adjunto tengo parte de mi proyecto terminado, digo parte por que en mi mountainboard yo quiero por una parte dotarle de un servo freno y por la otra montar dos motores electricos pero eso sera en una segunda fase.
Ahora he termidado la parte de frenado la cual es controlada por dos arduinos y un emisor rc tx y otro receptor.
Simplemente lo que hago es enviar la posicion de mi portenciometro en el emisor y cuando es leido por mi repector este posiciona el motor servo que esta unido a las guias de las mordazas de las pastillas de freno actuando sobre los platos de disco, contra mas pulso en mi emisor en el potenciometro de freno mas tensa el servo las guias y las mordazas hacen frenar mas.
En resumen lo que electronicamente hago es comparar el potenciometro de mi emisor con el del receptor y en funcion de como esta posicionado el motor gira a uno u otro lado.
Todo va bien ya lo he probado por alguna cuestecita y perfecto, es jugueton.
Tan solo un fallo y aqui es donde pido ayuda… cuando pierdo la comunicacion entre emisor y receptor lo que quiero es que si en el receptor se esta ejecutando la orden de giro para que el motor gire mas hasta que compare valor y frene mas, si en ese momento se pierde la comunicacion he notado y comprobado que ahora no puede comparar valor y sigue frenado hasta bloquear las ruedas y esto puede ser peligroso ya que si la velocidad es alta…imaginaros…

Alguna sugerencia de como puedo parar esa orden que se esta ejecutando si en ese momento por el puerto serie se deja de recibir datos ???.

///CODIGO ARDUINO UNO BRAKE (FRENO ) entrada datos por puerto serie pin 7y recoge datos de arduino FIO salida pin7

#include <VirtualWire.h>

// Programa que solo envía los datos al ordenador cuando la variación en la lectura del sensor es //superior a una diferencia determinado por el varlor delta.

int led4izqui = 5;
int led3derec = 6;
int chaxon = 9;
int bloqueoMotor = 11;
int lucesFreno = 8;
int display7 = 7;

int sensorPOTmotor = 0; // corresponde a la entrada Analog In 3 de la placa

int x = 0;
int y = 0;
int valorPOTmotor = 2;

const int threshold = 70;

const int RX_DIO_Pin = 12;

void setup() {

Serial.begin(9600); // no es necesario declarar el pin como entrada analógica

pinMode (led4izqui, OUTPUT);
pinMode (led3derec, OUTPUT);
pinMode (chaxon, OUTPUT);
pinMode (bloqueoMotor, OUTPUT);
pinMode (lucesFreno, OUTPUT);
pinMode (display7, OUTPUT );

vw_set_rx_pin(RX_DIO_Pin); /* Declara el pin 2 como salida para recibir datos en virtual wire /
vw_setup(2000); /
Transmite a 2000 bits por segundo /
/
Enable the receiver */
vw_rx_start();
}

void loop() {

uint8_t Buffer_Size = 8; /* declara el tamaño del array para recibir los datos /
unsigned int Data0; /
Declara las variables para el volcado de datos de recepción (unsigned int de 8 bits) /
unsigned int Data1;
unsigned int Data2;
unsigned int Data3;
uint8_t RxBuffer[Buffer_Size]; /
declara el array para la recepción de datos /
/
Condicional ¿se ha recibido el mensaje?*/
if (vw_get_message(RxBuffer, &Buffer_Size)) {
Data0 = RxBuffer[0] << 8 | RxBuffer[1];
Data1 = RxBuffer[2] << 8 | RxBuffer[3];
Data2 = RxBuffer[4] << 8 | RxBuffer[5];
Data3 = RxBuffer[6] << 8 | RxBuffer[7];

y = (analogRead(sensorPOTmotor) - threshold);
x = (analogRead(sensorPOTmotor) + threshold);

////////////////////////////////////////////////////////
if (Data2 == 0) { digitalWrite(chaxon, LOW); }
if (Data2 == 1) { digitalWrite(chaxon, HIGH); }
////////////////////////////////////////////////////////
if (Data3 == 0) { digitalWrite(display7, LOW); }
if (Data3 == 1) { digitalWrite(display7, HIGH); }
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
if ( Data0 <= ( y )) {
digitalWrite( led3derec, HIGH);
digitalWrite( bloqueoMotor, HIGH);

} else {
digitalWrite( led3derec, LOW);
digitalWrite( bloqueoMotor, LOW);
}
/////////////////////////////////////////////////////////
if ( Data0 == ( x + y )) {
digitalWrite( bloqueoMotor, LOW);
digitalWrite( led3derec, LOW);
digitalWrite( led4izqui, LOW);
digitalWrite( lucesFreno, LOW);
}
else {
digitalWrite( lucesFreno, HIGH);
}
/////////////////////////////////////////////////////////
if ( Data0 >= ( x ) ) {
digitalWrite( bloqueoMotor, HIGH);
digitalWrite( led4izqui, HIGH);
digitalWrite( led3derec, LOW); }
else {
digitalWrite( led4izqui, LOW);

}
/////////////////////////////////////////////////////////
////////////////////////////////////////////TOPE DE FRENO – FINAL DE CARRERA DE BRENO//////////
if ( Data0 >= ( 650 ) ) {

digitalWrite( bloqueoMotor, LOW);
digitalWrite( led4izqui, LOW);
digitalWrite( led3derec, LOW);

}
else {

}

{
Serial.print(" data0 “);Serial.print(Data0);
Serial.print(” “); Serial.print(Data1);
Serial.print(” “); Serial.print(Data2);
Serial.print(” "); Serial.print(Data3);

Serial.print(" x = “); Serial.print(x);
Serial.print(” y = "); Serial.println(y);
}
delay (15);
}
}

Hola. Básicamente, lo que deberías es establecer un tiempo de timeout; es decir, el tiempo máximo que vas a esperar para recibir el siguiente mensaje del receptor. Si en ese tiempo no ha llegado un mensaje válido, actuar como mejor consideres que se podría en caso de ausencia de señal. Si, por el contrario, llega un mensaje, actuar conforme dicte el mensaje. Por supuesto, el transmisor deberá estar emitiendo datos en intervalos inferiores a ese timeout. Por ejemplo, podrías utilizar millis para calcular el tiempo desde el último dato recibido, y decidir si se ha superado el timeout y se ha perdido conexión. El código "clave" sería más o menos así:

if (vw_get_message(RxBuffer, &Buffer_Size)) {
    //tratamos el mensaje
    ultimo_dato_valido=millis();
} else if (millis()-ultimo_dato_valido > timeout) {
    // tratamos la ausencia de mensaje
}