Arduino avec émetteur récepteur HF

J'ai acheté un émetteur récepteur HF 433Mhz de ce type https://hackspark.fr/fr/433mhz-rf-link-kit.html
j'ai essayé de les tester avec le module émetteur branché sur une atmega 328-8Mhz et le module récepteur branché sur une arduino duemilanove.
Que ce soit en utilisant les bibiothèques RCSwitch ou VirtualWire, je n'arrive pas à récupérer le signal reçu avec l'arduino.
avec virtual wire la commande
mySwitch.available() renvoie toujours false ainsi que la commande (vw_get_message(buf, &buflen)) avec virtualWire.
Je ne sais pas d'où vient le dysfonctionnement.
j'ai pensé à un problème d'horloges différentes sur les deux atmega (16mhz sur l'arduino et 8mhz sur l'autre) ou à un problème de niveau logique de sortie sur le récepteur. En effet, bien que celui ci soit alimenté en 5V, il semble que la sortie ne soit pas en logique 0-5V mais plutôt en 0-3V.
Quelqu'un peut il m'éclairer ?

Bonsoir,

Je viens aussi de commencer a jouer avec ces petits shields 433
Tu as plein de tuto sur le net pour tester
C'est étrange que les tiens ne fonctionnent pas mais c'est possible qu ils soient défectueux, j' ai acheté un pack de 5 paires et j' ai un TX et un Rx qui ne fonctionnent pas sur le lot

Je ne pense pas que la carte change quelque chose, j'ai une paire sur un rpi et une autre paire sur une atmega et ca fonctionne tres bien avec RCSwitch
Soit aussi tres prudent quand sur les branchements, par exemple sur ma proto board qu en j enfonce le module ca ne fait pas bien contact il faut que je le manipule legerement pour que le contact sur les pins soit correct
Il se peut aussi que ca vienne de l antenne, surtout sur le recepteur sans anyenne la distance est limitée à quelques cms, tu peux souder un fil de 17.3cm sur le point de soudure ANT sur le module

merci beaucoup pour ta réponse. Néanmoins, j'ai testé brutalement sans les bibliotheques RCSwitch et virtual wire en envoyant des longues trames de 1 et de zero et en branchant la sortie du récepteur sur un pin analogique et j'ai bien une suite de 0v et de 3 volts.
De même si je programme une interrution avec attachInterrupt sur le pin digital 2 avec un trigger CHANGE (changement d'état logique) et en mettant la sortie récepteur sur ce PIN, le trigger ne se déclenche pas. En revanche il se déclenche si je le mets en RISING. J'ai donc pensé que les bibliotheques utilisaitent ce genre de trigger pour récupérer les données mais je n'ai pas le niveau pour comprendre ces bibilotheques.
ensuite en regardant les nombreux tuto sur cette question je n'en ai jamais vu avec ce genre de configuration (1 arduino 16Mhz et une Atmega 8Mhz) j'ajoute que je n'ai pas mis d'oscillateur sur mon atméga.
Ce qui m'étonne aussi c'est que quand je branche mon fil sensé récupérer la sortie du récepteur directement sur l'entrée de l'émetteur, il ne se passe rien non plus. D'où mon doute sur l'importance de la fréquence de l'oscillatteur ( il doit forcément y avoir des références de temps dans les protocoles de transmission et ces références doivent s'adapter à la cadence des processeurs non ???)

Sur ton montage, quelle tension récupères tu en sortie du récepteur ?
tes deux cartes ont elles des cadences différentes

J'essaye d'explorer toutes les pistes avant de changer le matériel :slight_smile:

J’ avoue que je ne suis pas asez pointu :slight_smile: deja c’est clair que le RX doit etre sur la pin 2 qui correspond a l interrupt 0, ou la pin 3 pour interrupt 1, je parle d interrupt externes bien sur.
Enfin ca c est sur la Uno mais sur la DUE il me semble que toute les pin digitale peuvent servir d interrupt

Bref je ne pense pas que tu a besoin d attachinterupt pour faire fonctionner le RX si tu utilise RCSwitch, mais ca me donne envie de tester ca aussi

Bon au cas ou tu veut attach interrupt il vaut mieux faire genre ca:

const byte ledPin = 13;
const byte interruptPin = 2;
volatile byte state = LOW;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
}

void loop() {
  digitalWrite(ledPin, state);
}

void blink() {
  state = !state;
}

Pour ma part je n utilise pas attachinterrupt voici mon code qui lit le code d une telecommande RF 433 et l affiche sur le lcd sur atmega:

/*
  Example for receiving
  
  https://github.com/sui77/rc-switch/
  
*/

#include <RCSwitch.h>
#include <LiquidCrystal.h>

RCSwitch mySwitch = RCSwitch();
LiquidCrystal lcd(53, 52, 51, 50, 49, 48);

void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);
  mySwitch.enableReceive(0);  // Receiver on interrupt 0 => that is pin #2
}

void loop() {
  if (mySwitch.available()) {
    lcd.clear();
    output(mySwitch.getReceivedValue(), mySwitch.getReceivedBitlength(), mySwitch.getReceivedDelay(), mySwitch.getReceivedRawdata(),mySwitch.getReceivedProtocol());
    lcd.print(mySwitch.getReceivedValue());
    mySwitch.resetAvailable();
  }
}

Mon module RX est alimenté par le 5V de l atmega

J'ai trouvé ca je pense que ca resoudra ton probleme:

https://openclassrooms.com/forum/sujet/attiny85-pinchangeinterrupt-rcswitch-svp

Je vais tester aussi :slight_smile:

en fait j'avais juste essayé de tester le récepteur pour voir si je captais les changements de valeur de sortie.
Mais mon problème n'est pas résolu. l'arduino ne détecte aucun changement d'état. c'est sans doute pour ça que je ne recois rien. Il y a bien des signaux qui arrivent, donc l'émetteur et le récepteur fonctionnent mais ces signaux sont ignorés. c'est quand même bizarre que ce pb ne soit mentionné dans aucun tuto...