Bonjour, j'avais déjà demandé de l'aide il y a quelques temps lorsque j'essayai de faire une télécommande à base d'arduino et module 433Mhz.
Je me suis finalement tourné vers des modules xBee S1 car trop de coupure et latence avec le 433, inexploitable. Probablement que cela était dû à une mauvaise programmation mais je suis parti du niveau 0....
Donc j'ai fini par obtenir ce que je voulais avec l'xBee :
- temps de réponse
- portée (pas encore testé en situation réelle mais sur le papier ça colle...)
- fonctionnalité (quelque boutons qui commandent quelque relais)
- possibilité d'avoir dans le même espace plusieurs "couple émetteur - récepteur" différents (pas testé)
Mon problème est le suivant :
j'émet en continu sur le TX l'état voulu de mes sorties sur le récepteur, or, si l'émetteur devient hors portée ou n'ai plus alimenté, le récepteur continu d'effectuer le dernier ordre envoyé.
Je cherche à réinitialiser les sorties du récepteur en cas de non réception.
Si quelqu'un peut m'aiguiller....
Merci
Emetteur :
/*================ EMETTEUR ====================
2 leviers et 1 commutateur commandent l’émission de huit bits sur un octet
les leviers sont des inters 3 positions 2 NO à position fixe au centre
le connutateur est un inter 3 positions 2 NO à 3 positions fixe
BRANCHEMENT
* Levier 1 haut ---------> pin 2 --> monter verin N°1 / dérouler treuil 1 ou 2
* Levier 1 bas ---------> pin 3 --> descente verin N°1 / enrouler treuil 1 ou 2
* Levier 2 haut ---------> pin 4 --> monter verin N°2 / dérouler treuil 1 ou 2
* Levier 2 bas ---------> pin 5 --> descente verin N°1 / enrouler treuil 1 ou 2
* Commutateur 1 gauche ---------> pin 6 --> fonction vérin
* Commutateur 1 droite ---------> pin 7 --> fonction treui envers ( au milieu fontion treuil endroit)
* Voyant vert batterie ---------> pin 8 --> niveau batterie au dessu de 7,5V
* Voyant rouge batterie --------> pin 9 --> niveau batterie faible
* Mesure tension batterie ------> pin A1 --> via pont diviseur
=============DEBUT DU PROGRAMME ======================*/
const int L1H = 2; // Levier 1 haut connecté à la broche 2
const int L1B = 3; // Levier 1 bas connecté à la broche 3
const int L2H = 4; // Levier 2 haut connecté à la broche 4
const int L2B = 5; // Levier 2 bas connecté à la broche 5
const int C1G = 6; // Commutateur 1 gauche connecté à la broche 6
const int C1D = 7; // Commutateur 1 droite connecté à la broche 7
const int vert = 8; // Indicateur niveau batterie
const int rouge = 9; // Indicateur niveau batterie
//unsigned int lect_bat = A7;
int lect_bat_val; // Mesure baterie
int etat_L1H = 0;
int etat_L1B = 0;
int etat_L2H = 0;
int etat_L3H = 0;
int etat_C1G = 0;
int etat_C1D = 0;
int val1 = 0;
int val2 = 0;
int val3 = 0;
int val4 = 0; // variable pour mémoriser la valeur lue
int val5 = 0;
int val6 = 0;
int val0;
const int B = 8;
int tab_B[B]={0,1,2,3,4,5,6,7} ;
int tab_etat[B]={0,0,0,0,0,0,0,0};
void setup()
{
pinMode(L1H, INPUT_PULLUP); // configure la broche 2 en ENTREE
pinMode(L1B, INPUT_PULLUP); // configure la broche 3 en ENTREE
pinMode(L2H, INPUT_PULLUP); // configure la broche 4 en ENTREE
pinMode(L2B, INPUT_PULLUP); // configure la broche 5 en ENTREE
pinMode(C1G, INPUT_PULLUP); // configure la broche 6 en ENTREE
pinMode(C1D, INPUT_PULLUP); // configure la broche 7 en ENTREE
pinMode(vert, OUTPUT); // configure la broche 8 en SORTIE
pinMode(rouge, OUTPUT); // configure la broche 9 en SORTIE
// pinMode(lect_bat, INPUT);
digitalWrite(L1H, HIGH);
digitalWrite(L1B, HIGH);
digitalWrite(L2H, HIGH);
digitalWrite(L2B, HIGH);
digitalWrite(C1G, HIGH);
digitalWrite(C1D, HIGH);
Serial.begin(9600); // Initialisation du port série
}
void loop()
// envoie code
{
{
int i = 0;
Serial.print("#");
for (i=0; i < B ; i++) {
Serial.print (tab_etat[i]);
}
Serial.println("");
delay(50);
}
val1 = digitalRead(L1H); // lit l'état de la broche en entrée
val2 = digitalRead(L1B); // et met le résultat dans la variable
val3 = digitalRead(L2H);
val4 = digitalRead(L2B);
val5 = digitalRead(C1G);
val6 = digitalRead(C1D);
// codage fonction
{
{if(val5 == LOW && val6 == HIGH ) // bouton à gauche ---> Vérin
val0 = 1;
{digitalRead(tab_etat[4] = 0);}
{digitalRead(tab_etat[5] = 0);}
{digitalRead(tab_etat[6] = 0);}
{digitalRead(tab_etat[7] = 0);}
}
{if(val5 == HIGH && val6 == HIGH ) // bouton au milieu ---> Treuil endroit
val0 = 2;
{digitalRead(tab_etat[0] = 0);}
{digitalRead(tab_etat[1] = 0);}
{digitalRead(tab_etat[2] = 0);}
{digitalRead(tab_etat[3] = 0);}
}
{if(val5 == HIGH && val6 == LOW ) // bouton au milieu ---> Treuil envers
val0 = 3;
{digitalRead(tab_etat[0] = 0);}
{digitalRead(tab_etat[1] = 0);}
{digitalRead(tab_etat[2] = 0);}
{digitalRead(tab_etat[3] = 0);}
}
}
// --> Fonction Verin
{
{ if (val0 == 1)
{
// allongement Verin gauche
if(val1 == 1)
{digitalRead(tab_etat[0] = 0);}
else
{digitalRead(tab_etat[0] = 1);}
// retraction Verin gauche
if(val2 == 1)
{digitalRead(tab_etat[1] = 0);}
else
{digitalRead(tab_etat[1] = 1);}
// allongement Verin droite
if(val3 == 1)
{digitalRead(tab_etat[2] = 0);}
else
{digitalRead(tab_etat[2] = 1);}
// retraction Verin droite
if(val4 == 1)
{digitalRead(tab_etat[3] = 0);}
else
{digitalRead(tab_etat[3] = 1);}
}
}
}
// --> Fonction treuil
{ if(val0 != 1)
{
// fonction Treuil endroit
if(val0 == 2)
{
// enroulement treuil gauche
if(val1 == 1)
{digitalRead(tab_etat[4] = 0);}
else
{digitalRead(tab_etat[4] = 1);}
// déroulement treuil gauche
if(val2 == 1)
{digitalRead(tab_etat[5] = 0);}
else
{digitalRead(tab_etat[5] = 1);}
// enroulement treuil droite
if(val3 == 1)
{digitalRead(tab_etat[6] = 0);}
else
{digitalRead(tab_etat[6] = 1);}
// déroulement treuil droite
if(val4 == 1)
{digitalRead(tab_etat[7] = 0);}
else
{digitalRead(tab_etat[7] = 1);}
}
// fonction Treuil envers
else if(val0 == 3)
{
// enroulement treuil gauche
if(val1 == 1)
{digitalRead(tab_etat[6] = 0);}
else
{digitalRead(tab_etat[6] = 1);}
// déroulement treuil gauche
if(val2 == 1)
{digitalRead(tab_etat[7] = 0);}
else
{digitalRead(tab_etat[7] = 1);}
// enroulement treuil droite
if(val3 == 1)
{digitalRead(tab_etat[4] = 0);}
else
{digitalRead(tab_etat[4] = 1);}
// déroulement treuil droite
if(val4 == 1)
{digitalRead(tab_etat[5] = 0);}
else
{digitalRead(tab_etat[5] = 1);}
}
}}
/*// mesure et signalisation niveau batterie
{
//unsigned int lect_bat = analogRead(A6); // mesure de la tension brute
//float real_bat = ((raw_bat * (5.0 / 1024 )) * 3); // calcul tension réel --> x3 car pont diviseur de 3
lect_bat_val = analogRead(lect_bat);
//Serial.print("Tension :");
//Serial.println(lect_bat_val);
if (lect_bat_val >= 0) {digitalWrite (vert, LOW);
digitalWrite (rouge, HIGH);}
else if (lect_bat_val > 512 & lect_bat_val <= 1000) {digitalWrite (vert, LOW);
digitalWrite (rouge, LOW);}
else if (lect_bat_val > 10 & lect_bat_val <= 512) {digitalWrite (vert, HIGH);
digitalWrite (rouge, LOW);}
else (lect_bat_val < 0); {digitalWrite (vert, HIGH);
digitalWrite (rouge, LOW);
delay(100);
digitalWrite (rouge, HIGH);
delay(200);}
}*/
}======= FIN DE PROGRAMME ===================
mon programme intègre aussi une partie mesure de la batterie qui ne fonctionne pas pour le moment, chaque choses en son temps...