Telecommande xBee - bugs si hors portée ou coupure emetteur

j'avais fait ça pour corriger un bug, de mémoire, si un levier était actionné et que l'on changeait de fonction (vérin / treuil) pendant une commande, celle-ci continuait

code Récepteur :

/*     ==================== RECEPTEUR XBee TOUT OU RIEN ======================
Commande de 9 relais en fonction de l’état de 2 leviers et 1 commutateur de l’émetteur.

                         BRANCHEMENT
        * relais 1)  --------->   pin 2   --> monter verin N°1
        * relais 2)  --------->   pin 3   --> monter verin N°1
        * relais 3)  --------->   pin 4   --> descente verin N°2
        * relais 4)  --------->   pin 5   --> descente verin N°2
        * relais 5)  --------->   pin 6   --> dérouler treui N°1
        * relais 6)  --------->   pin 7   --> enrouler treui N°1  
        * relais 7)  --------->   pin 8   --> dérouler treui N°2
        * relais 8)  --------->   pin 9   --> enrouler treui N°2
        * relais 9)  --------->   pin 10  --> by-pass hydraulique pour les vérins

========================== DEBUT DU PROGRAMME ====================================*/

const int nb_B = 8; 
int tab_etat[nb_B]={2,3,4,5,6,7,8,9} ; 

const int r1 =  2;
const int r2 =  3;
const int r3 =  4;
const int r4 =  5;
const int r5 =  6;
const int r6 =  7;
const int r7 =  8;
const int r8 =  9;
const int r9 =  10;
int vr1;
int vr2;
int vr3;
int vr4;


//______________________________________________________________________________________________________________

void lire_etat()
{
int i = 0;
int data;
digitalWrite(data, 0);

  for (i=0; i < nb_B ; i++) {
        
      while (Serial.available () == 0) ; 
      // tant qu'on n'a rien à lire, on ne fait rien
     
      data = Serial.read() -'0';
       
          
      if (data == 1) 
         digitalWrite(tab_etat[i], LOW) ;
       else
         digitalWrite(tab_etat[i], HIGH) ;

vr1 = digitalRead(r1);
vr2 = digitalRead(r2);
vr3 = digitalRead(r3);
vr4 = digitalRead(r4);
  
 if (( vr1 == LOW)||( vr2 == LOW)||( vr3 == LOW)||( vr4 == LOW)){ 
      digitalWrite(r9, LOW);}
 else digitalWrite(r9, HIGH); 
            
  
  }     
}

void setup() // Fonction setup()
{   
 for (int i=0; i < nb_B ; i++) {
     pinMode(tab_etat[i], OUTPUT);
     pinMode(r9, OUTPUT);}
     
 Serial.begin(9600);     

  digitalWrite(r1, 1);
  digitalWrite(r2, 1);
  digitalWrite(r3, 1);
  digitalWrite(r4, 1);
  digitalWrite(r5, 1);
  digitalWrite(r6, 1);
  digitalWrite(r7, 1);
  digitalWrite(r8, 1);
  digitalWrite(r9, 1);
}

void loop() // executée en boucle
{
{ while (Serial.available () == 0);  
  if (Serial.read () == '#')        
        
     lire_etat();  
        
}
}


//========================= FIN DE PROGRAMME ===========================