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
) je ne reçois rien (hormis le statut initial) sur le port série du récepteur ![]()
Une idée ou un conseil serait bienvenu…
Le Chat.