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 ===========================