Problème avec utilisation d'un RF Receiver

Bonjour à tous,

J’ai un RF Link Receiver 433MHz de Sparkfun. Malheureusement je n’arrive absolument pas à le faire fonctionner correctement avec la télécommande de mon portail (qui est bien en 433Mhz).

Je fais le montage avec le sample code de VirtualWire 1.9 (arduino 1.0) qui est censé dumper les messages qu’il détecte. Sample tout bête donc:

#include <VirtualWire.h>
void setup()
{
    Serial.begin(9600);
    Serial.println("setup");
    vw_setup(2000); // Bits per sec
    vw_rx_start();    // Start the receiver PLL running
}
void loop()
{
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;
    if (vw_get_message(buf, &buflen)) // Non-blocking
    {
int i;
// Message with a good checksum received, dump HEX
Serial.print("Got: ");
for (i = 0; i < buflen; i++)
{
    Serial.print(buf[i], HEX);
    Serial.print(" ");
}
Serial.println("");
   }

Et pourtant je ne rentre jamais dans le if du vw_get_message (renvoie true si le checksum du message reçu est valide et copie le message dans le buffer).
J’ai testé en virant juste la condition pour que dans tous les cas il dump le message qui arrive dans le buffer, dans ce cas là j’ai plein de messages qui s’affichent dans ma console, sans que j’appuie sur la télécommande, avec des valeurs qui varient régulièrement. Impossible de savoir si quand j’appuie sur la télécommande les messages reçus proviennent d’elle tellement ils y en a de différents qui défilent…

Une personne d’un autre forum m’a conseillé un autre test tout bête, à coup de digitalRead et de LED qui clignote pour vérifier que le récepteur reçoit bien le message:

if(digitalRead(11) {
{ 
 digitalWrite(13,HIGH) 
}else 
{ 
 digitalWrite(13,LOW) 
}

Quand j’upload le code, la LED clignote à intervalle régulier (2 courts puis un long, le tout en boucle).
Là, quand j’appuie sur le bouton de la télécommande, la LED se met à clignoter plus rapidement pendant un instant, ce qui semble indiquer que le récepteur reçoit bien la commande.

Alors pourquoi la méthode vw_get_message me renvoie constamment false quand je teste le sample code ? J’ai également essayé en ajoutant la commande vw_set_ptt_inverted(true) puis vw_set_ptt_inverted(false) dans le setup, sans changement.

Vous auriez une idée de la source de mon problème ?

Bonjour,

Vymsoka: Je fais le montage avec le sample code de VirtualWire 1.9 (arduino 1.0) qui est censé dumper les messages qu'il détecte. Sample tout bête donc: (...) Vous auriez une idée de la source de mon problème ?

Arduino 1.0 ? Je chercherai pas plus loin, tente avec l'ide 0023, lorsque j'ai fait mon tutoriel sur VirtualWire (ici) j'ai rencontré plein de probléme avec l'ide 1.0 ... ça compilait mais ne fonctionnait pas comme prévu. Alors peut être que le probléme a était réglé dans la version 1.9 de virtualWire mais dans le doute ...

Sinon vérifie de ne pas avoir mis une vitesse d'émission/réception trop lente/rapide, de bien avoir bien activé la partie réception/émission (suivant si c'est le coté récepteur ou émetteur) et de bien avoir câblé le récepteur sur les broches que tu déclare.

J'avais vu que les anciennes version de VirtualWire bugguaient avec Arduino 1.0, mais la v 1.9 semble dater du 6 février donc je pensais que c'était réglé.

Concernant la vitesse de réception j'ai testé entre 1000 et 9000, pour la partie réception à activer ça doit être le "vw_rx_start();" qui est en fin de mon setup. Et le branchement est OK, je l'ai refait plusieurs fois dans le doute (et pour vérifier si c'était pas un faux contact) et comme le montage fonctionne avec le digitalRead et une LED, ça devrait être bon.

Je testerai ce soir avec la 0023 voir si ça donne quelque chose de mieux.

Merci.

Vymsoka: J'avais vu que les anciennes version de VirtualWire bugguaient avec Arduino 1.0, mais la v 1.9 semble dater du 6 février donc je pensais que c'était réglé.

Vymsoka: Concernant la vitesse de réception j'ai testé entre 1000 et 9000, pour la partie réception à activer ça doit être le "vw_rx_start();" qui est en fin de mon setup.

9000 bauds :astonished: j'ai jamais vu un module RF 433MHz tournant à +2000 bauds (sauf les transmetteur RF pro de modélisme / radio). Le mien tourne (au mieux) à 1200 bauds donc reste dans les alentours de 1000 sinon il y a aurait des erreurs de CRC à la pelle ;)

C'étaient des tests un peu désespérés pour essayer de trouver une piste ;). Mais je prends note de ta remarque, je ferais plutôt des tests à 1000 pour être sûr.

J'ai testé avec Arduino 0023 et la librairie VirtualWire 1.9 et la librairie 1.5, mais ça ne change rien. J'ai le même résultat avec mon test avec la LED (la LED clignote quand j'appuie sur la télécommande), mais je n'arrive toujours pas à passer dans la condition du vw_get_message... J'ai essayé en mettant 1000 bauds, j'ai même essayé 500 . Je ne comprends pas.

Finalement il semblerait que si dans mon test avec la LED, la LED s'allume constamment, c'est parce que le récepteur reçoit énormément de parasites. Ce qui colle avec les tonnes de messages étranges que je recevais dans mon premier test où j'avais simplement supprimé le if pour que le récepteur dump tous les messages qui passaient. Apparemment il faut associer un récepteur à un émetteur pour qu'il n'y ait plus de bruit (si j'ai bien compris ce que j'ai lu sur ce forum et sur d'autres sites), ce qui n'est pas le cas dans mon utilisation avec ma télécommande de portail.