rebond entre modules radio nrf24 ?

Salutations du jour.

Je fais quelques réparations sur mon costume de GN dont les différentes parties comprenant de la lumière sont piloté par des arduino nano et leurs modules nrf24 pour les faire communiquer ensemble (et m'éviter des fils).
Il y a :

  • le gants gauche : 1 nano, un module nrf24, un bouton et 2 bandes de leds programmable pour choisir les couleur des leds de l'ensemble du costume.
    -le gant droit : 1 nano, un module nrf24, un accéléromètre et 2 bandes de leds programmable pour lancer des animations lumineuses en fonction de me mouvement de main
  • un plastron en X : 1 nano, un module nrf24, 4 bouton et 5 bande de leds programmable

Le tout communique en s'envoyant des lettres en guise de code pour déclencher les actions programmées (de "A" à "Z").

Les 2 gant communiquent très bien entre eux et répondent parfaitement aux codes envoyés par l'un ou par l'autre.

Mais là où je ne pige plus rien c'est que dés que j'allume le 3eme module :

Lors de l'envoi d'un code par le gant Gauche, le gant Droit reçoit bien ce code (il me l'affiche sur le serial) mais ne fait pas l’animation de leds correspondante et en plus semble recevoir un autre code radio dans ceux du possible (le serial me le donne aussi, entre "G" et "O") et là fait l'animation correspondante.

J'ai essayer avec un montage différent pour le module du plastron et cela fait pareil.
J'ai essayer un code de test de base et même problème.

En isolant les lignes de code du plastron les unes après les autres, il semble que c'est la commande de mise en buffer du message pour le tester/interpréter qui pose problème.

if (nrf24.recv(buf, &len))                   // met le message reçu dans buf pour le tester

J'en pers le latin que je n'ai pas, avez vous des idées ?
le code du plastron :

#include <Adafruit_NeoPixel.h>
#include <Wire.h>
//#include "Adafruit_MPR121.h"  //librairie pour le capacitif
#include <SPI.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
//----------------DEBUT radio HF V.1---------------------------------
//ces modules radio ont besoin des pin 8,10,11,12 et 13 pour fonctionner (plus l'alimentation)
#include <RH_NRF24.h>
// Singleton instance of the radio driver
RH_NRF24 nrf24;
//----------------FIN radio HF V.1---------------------------------
void setup() {
  
 //--------------------------debut init radio HF--------------------------------
 if (!nrf24.init())
  Serial.println("init failed");
 // Defaults after init are 2.402 GHz (channel 2), 2Mbps, 0dBm
 if (!nrf24.setChannel(1))
  Serial.println("setChannel failed");
 if (!nrf24.setRF(RH_NRF24::DataRate2Mbps, RH_NRF24::TransmitPower0dBm))
  Serial.println("setRF failed");
//--------------------------fin init radio HF----------------------------------
}
void loop() {
   //--------------------------------------DEBUT INTERPRETATION BOUTONS----------------------------------------
 
//---------le bonton 1 doit emettre le code W------------------
  val_bouton1 = analogRead(A1); // lit le statu de la pin du bouton 1 et le stock dans val_bouton
  if (val_bouton1 == 0)    //verifie la valeur de val_bouton1 pour agir en consequence
  {
    // mettre la fonction de led
    Serial.println("BOUTON 1 ACTIVER");
    emission_hf_variables_multiples(22);
    var_continu = 1; //c'est le lancement du rainbow en continu
   
  }
    
  //---------------------------------------DEBUT interprétation du code radio reçu----------------------------
  uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN];          // declare la variable "buf" en lui donnant la taille maximum
  uint8_t len = sizeof(buf);                      // declare la variable "len" en lui donnant la taille de "buf"
 
  if (nrf24.available())            // attendre qu'un message revienne
  {   
    if (nrf24.recv(buf, &len))                    // met le message reçu dans buf pour le tester
    {
        if (strcmp((char*)buf, "A") == 0) {Serial.println(F(" message conforme à A "));var_continu=0;rainbow_penta_strip(20);      }
       //.....etc.....
    }
  }
 
void selecteur_couleur_V2 (int i) {
  switch(i){
    case 1 : Red_selecteur = 255; Green_selecteur=0;Blue_selecteur=0;White_selecteur=0;         colorWipeSection_3pixels_HB(&stripA, &stripB, &stripC, &stripD, &stripE, stripA.Color(Red_selecteur, Green_selecteur, Blue_selecteur, 0), 20);            Red_selecteur_pulse =10; Green_selecteur_pulse=0; Blue_selecteur_pulse=0; White_selecteur_pulse=0;      break;
   //------etc--------
 }}

costume_X_baudrier_HF.ino (70.1 KB)

gant_main_droite_nano_accelerometre_HF.ino (62.1 KB)

gant_main_gauche_nano__recepteur_HF.ino (50.5 KB)

Assurez vous que len est bien (ré)initialisé à RH_NRF24_MAX_MESSAGE_LEN avant chaque appel
Suis sur mon iPhone, peut pas lire simplement le .ino

C'est bien ce qui me semblait.... mais j'avoue ne pas avoir compris comment on fait.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.