Bonsoir/bonjour, tout le monde.
Je suis face à un énigme. Voyez vous, moi et mon collègue de SI, on doit faire un prototype de télécommande, pour notre projet de terminale. Le but de cette télécommande, est d'envoyer un 1 ou un 0, qu'elle garde en mémoire, et de le changer d'état lorsqu'on appuie sur un bouton. C'est une carte Arduino Nano. Ensuite, à chaque tour de boucle, elle transmet ce nombre par ondes radio au récepteur (la fameuse carte Arduino Micro). Ce récepteur, en fonction de ce qu'il reçoit, va jouer soit un son 1 (si elle reçoit 0), ou un son 2 (si elle reçoit autre chose que 0). Voilà notre montage :
Le soucis, vous vous en doutez, c'est que coté récepteur, rien n'est reçu ! Alors, ni une ni deux, on a passé tout ça à l'oscilloscope. Et c'est là que ça devient bizarre. On s'est placé coté récepteur (sur le fil couleur cyan et la masse du récepteur RF), et on essayé de voir si le récepteur 433 MHz recevait un signal, et la réponse est… oui ! (désolé pour la qualité moyenne de la photo)
Vous conviendrez que c'est un signal plus qu'exploitable ! Alors pourquoi notre carte ne fait-elle comme si aucun signal n'était reçu ? Je vous explique plus en détail le soucis : En fait, on ne rentre jamais dans le bloc if qui permet de récupérer la valeur envoyée par RF. La fonction mySwitch.available() retourne toujours 0… Je vous met mes deux bouts de code, pour que vous puissiez voir :
Le code de l'émetteur:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #define bouton 2 #include<RCSwitch.h> int etat = 0; RCSwitch mySwitch = RCSwitch(); void setup() { // put your setup code here, to run once: mySwitch.enableTransmit(3); Serial.begin(9600); pinMode(bouton, INPUT); digitalWrite(bouton, HIGH); } void loop() { // put your main code here, to run repeatedly: int value = digitalRead(bouton); if(value == LOW){ //Serial.println("on change la variable etat"); etat = !etat; } mySwitch.send(etat, 24); Serial.print("Valeur envoyée :"); Serial.println(etat); delay(100); } |
Celui du récepteur
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); int code = 0; const int frequence[5]={3831,3861,4016,4132,4386}; const int temps[5]= {142,80,73,132,132}; void setup() { // put your setup code here, to run once: Serial.begin(9600); mySwitch.enableReceive(2); } void bip1(){ int i = 0; for (i=0 ; i<=4 ; i++){ tone(4, frequence[i], temps[i]); delay(temps[i]); } for (i=0;i<=12;i++){ tone(4, int(4545+i*49), 10); delay(10); } delay(391); } void bip2(){ tone (4, 2717, 126); delay(126); tone (4, 3154, 623); delay(623); delay(488); } void loop() { // put your main code here, to run repeatedly: Serial.println(mySwitch.available()); if(mySwitch.available()){ Serial.println("On a reçu quelque chose!"); code = mySwitch.getReceivedValue(); } if(code == 0){ bip1(); }else{ bip2(); } mySwitch.resetAvailable(); } |
Selon vous, de quoi peut bien provenir le problème ? Je vous avoue que mis à part un coup de malchance des familles, du genre le câble coupé juste après l'endroit où on l'a dénudé pour faire les mesures avec l'oscillo', je vois pas trop…
D'autant plus qu'on a fait plusieurs test avec la librairie RCSwitch. On ne peut pas dire non plus que ce sont les modules RF qui ne fonctionnent pas…
Voilà, si vous pensez avoir une idée de ce qui cloche là dedans, je suis preneur.
Sur ce, bonne soirée/journée !