Com avec RH_ASK entre 2 Arduino reliés par fil TX - RX

Miaou,

Je poursuis mes essais de com. entre 2 Arduino via RH_ASK.
Avant de passer par les ondes, je tente de communiquer via un fil reliant TX et RX afin de m’affranchir des pb hertziens éventuels liés à la faible porté, les parasites etc...

Voici les 2 codes (émetteur et récepteur) placés respectivement chacun dans un Arduino UNO.
Code Emetteur:

// Test d'emission

// Inclusion de la bibliothèque radio ask
#include <RH_ASK.h>
#include <SPI.h> // nécessaire à la compilation 


// Définition des variabbles globales (Cst)
const uint8_t TX = 12; // Pin émission

// Création d'un objet driver
RH_ASK driver; // création du driver (TX sur Pin 12 par défaut)


void setup()
{
  // Définition du mode des pin de l'Arduino
  pinMode(TX, OUTPUT);
  pinMode(LED_BUILTIN, OUTPUT);

  digitalWrite(LED_BUILTIN, HIGH);
  Serial.begin(9600);
  while(!Serial); //initilisation du port série
  while (!driver.init()); // Initialisation du driver de communication ask
  digitalWrite(LED_BUILTIN, LOW);
}

void loop()
{
  // Initialisation des variables locales
  uint8_t buf[2]; // Buffer de 2 uint8_t (char)
  uint8_t buflen = sizeof(buf); // Taille du buffer   

  // Codage du message
  buf[1] = 0b00000010; // adresse + sens de marche (sur bit poids faible)
  buf[0] = 0b11111111; // consigne

  // Envoi de 2 octets (char)
  digitalWrite(LED_BUILTIN, HIGH);

  driver.send(buf, buflen);
  driver.waitPacketSent();

  Serial.println("envoi de 2 octets");
  Serial.print("adresse : ");
  Serial.println(buf[1], BIN);
  Serial.print("consigne : ");
  Serial.println(buf[0], DEC);

  delay(2000);
  digitalWrite(LED_BUILTIN, LOW); 
  delay(2000);

La LED_BUILTIN s'allume et s'éteint (donc initialisation correcte)
Elle clignote ensuite régulièrement et le port série m'affiche répétitivement les données (donc la boucle tourne)

Code Récepteur :

// Réception pour Arduino UNO

// Inclusion de la bibliothèque radio ask
#include <RH_ASK.h>
#include <SPI.h> // nécessaire à la compilation 


// Définition des variabbles globales (Cst)
const uint8_t TX = 12; // Emission sur pin 12, inutilisé ici
const uint8_t RX = 11; // Reception sur pin 11
const uint8_t PWM = 9; // Sortie PWM sur pin 9
const uint8_t adresse = 0b00000010;

// Création d'un objet driver
RH_ASK driver;

void setup()
{
  // Définition du mode des pins
  pinMode(RX, INPUT);
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(PWM, OUTPUT);

  digitalWrite(LED_BUILTIN, HIGH);
  Serial.begin(9600);
  while(!Serial); // initilisation du port série
  while (!driver.init()); // Initialisation du driver
  digitalWrite(LED_BUILTIN, LOW);
}

void loop()
{
  // Initialisation des variables locales
  uint8_t buf[2] = {0, 0}; // Buffer de 2 uint8_t (char)
  uint8_t buflen = sizeof(buf); // Taille du buffer
  static bool flag = true;

  if(flag)
  {
    Serial.println("statut des 2 octets");
    Serial.print("adresse : ");
    Serial.println(buf[1], BIN);
    Serial.print("consigne : ");
    Serial.println(buf[0], DEC);
    flag = false;
  }

  // Réception et traitement de 2 octets (char)
  if(driver.available()) // Message reçu
  {
    if (driver.recv(buf, &buflen)) // Message correct
    {
      if(adresse == buf[1]) // Vérification de l'adresse
      {
        digitalWrite(LED_BUILTIN, HIGH);
        analogWrite(PWM, buf[0]);
        Serial.println("réception de 2 octets");
        Serial.print("adresse : ");
        Serial.println(buf[1], BIN);
        Serial.print("consigne : ");
        Serial.println(buf[0], DEC);
        delay(2000);
        analogWrite(PWM, 0);
        digitalWrite(LED_BUILTIN, LOW);
      }
    }
  }
}

La broche 12 (TX) de l’émetteur est reliée par fil à la broche 11 (RX) du récepteur.
La LED_BUILTIN s'allume et s'éteint (donc initialisation correcte).
Sans surprise (sinon je ne posterai pas ici :wink: ) je ne reçois rien (hormis le statut initial) sur le port série du récepteur :confused:

Une idée ou un conseil serait bienvenu…

Le Chat.

Je ne suis pas sûr que ça puisse marcher car la réception logicielle attend un signal qui a été « abîmé » d’une certaine manière. là il est trop brut.

Ok. A trop vouloir bien faire... :roll_eyes:
Je vais donc tenter avec la RF...
Le Chat.

Selon la doc dans la librairie

Ligne 73 de RH_ASK.h

/// All that is required is
/// transmit data, receive data and (for transmitters, optionally) a PTT
/// transmitter enable. Can also be used over various analog connections (not just a data radio),
/// such as the audio channel of an A/V sender, or long TTL lines.

Ligne 220 de RH_ASK.h

/// For testing purposes you can connect 2 Arduino RH_ASK instances directly, by
/// connecting pin 12 of one to 11 of the other and vice versa, like this for a duplex connection:
///
/// \code
/// Arduino 1 wires Arduino 1
/// D11-----------------------------D12
/// D12-----------------------------D11
/// GND-----------------------------GND
/// \endcode

Ok donc ça devrait marcher.

Il me semblait que le récepteur attendait des timings un peu dégradés par la radio et que si le signal etat trop propre c’était buggy.