Bonjour à tous, j'ai un petit soucis avec ma telco 433. Lorsque j'appuie sur un bouton, elle communique bien avec le récepteur , mais le problème est que l'info est envoyé plusieurs fois ( parfois longtemps même). C'est un peu gênant parce qu'une variable devient true alors qu'elle doit rester false. Et en restant dans la console j'ai découvert que le problème venait bien de la , il faudrait donc que la réception ne se fasse qu'une seule fois !
Merci de votre aide
Fredericzim:
Bonjour à tous, j'ai un petit soucis avec ma telco 433. Lorsque j'appuie sur un bouton, elle communique bien avec le récepteur , mais le problème est que l'info est envoyé plusieurs fois ( parfois longtemps même). C'est un peu gênant parce qu'une variable devient true alors qu'elle doit rester false. Et en restant dans la console j'ai découvert que le problème venait bien de la , il faudrait donc que la réception ne se fasse qu'une seule fois !
Merci de votre aide
bonsoir
tu invalide les actions selon une fenetre temporelle
Ok artouste , mais j'ai pas tout compris là !
C'est tout à fait normal, les télécommande en 433 bien souvent n'ont pas d'état de retour.
La télécommande ne sais pas si le code envoyé à bien été reçu, de ce fait elle l'envoi plusieurs fois pour réduire les risques.
Donc dans ton code tu doit enregistrer l'heure de reception du code et le comparer au précédent, si par exemple tu reçoit 2x le même code en moins de 1s, tu peut considérer qu'il s'agit d'un de ces doublons
Fredericzim:
Ok artouste , mais j'ai pas tout compris là !
bonjour frederic
il faut que lors d'une reception d'un code valide tu inhibe pendant un delai x les autres receptions identiques
un code "bourrin" (utilisation de delay() ) que j'avais utilisé pour verfier le nb d'ouverture d'un frigo simplement en connectant en // sur le bp une ldr.
l’émetteur est un simple bouton de sonette sans fils , mais il "crache" des salves de 8 (?) trames identiques à chaque appui.
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
unsigned long value;
unsigned long rcode;
unsigned long ouv=0;
void setup() {
Serial.begin(57600);
mySwitch.enableReceive(0); // Receiver on inerrupt 0 => that is pin #2
}
void loop() {
if (mySwitch.available()) {
value = mySwitch.getReceivedValue();
if (value =! 0) {
rcode= mySwitch.getReceivedValue() ;
if (rcode==4239413) { // code renvoyé par la sonette
// faire si code reçu
ouv=ouv + 1;
Serial.print(ouv);
Serial.print(";ALARME FRIGO OUVERT;");
Serial.println(millis());
delay(2000); //delay pour purger les trames multiples
}
}
mySwitch.resetAvailable();
}
}
Merci beaucoup pour vos réponse, mais j'avais oublié cette ligne qui à tout changé :
mySwitch.resetAvailable();