RadioComando Brushless NRF24L01

Buon giorno a tutti,
stavo realizzato un progetto dove controllo un motore Brushless tramite Esc con un joystick e adesso vorrei renderlo utilizzabile via radio. Vorrei utilizzare due NRF24L01 come trasmittente e ricevitore rispettivamente su due arduini Nano. Chi mi da una mano a implementarlo a questo codice?
Grazie :slight_smile:

#include<Servo.h>           

Servo ESC;  
                
int input;

void setup() 
{
ESC.attach(9); 
          
 Serial.begin(9600);      
}

void loop() 
{ 
  input=analogRead(A0);                      
 
Serial.print("Original Input Value:");  
   
Serial.print(input);

 Serial.print(" | ");

delay(1);

input=map(analogRead(A0), 0, 649, 0, 2000); 

 Serial.print("Mapped Input Value:");

 Serial.print(input);  
                    
 Serial.print("\n");

delay(1);    
                              
ESC.write(input);                          

}

Nessuno che puoi aiutarmi a compilare questo codice per utilizzarlo con due schede TX e RX con i moduli RF24?

Devi scaricarti e studiarti come si usa la libreria radiohead che ti permette di gestire i moduli nFR24 (Driver RH_RF24) con la quale trasmetti e ricevi dati via detti moduli.

Oppure, puoi cercare con Google "nFR24 Arduino library" e troverai un'infinità di esempi e di librerie alternative, alcune specifiche per questi moduli.

Guglielmo

Ti ringrazio, sono riuscito a collegare le due schede e farle comunicare ma riscontro un problema nel ricevente…

Praticamente nella nel TX faccio un Analog.Read del Joystick solo per l asse ‘X’ e ricevo i valori giusti della mia configurazione, ma quando richiamo la variabile del Joystick nel RX i valori cambiano.

Es. TX: tutto su 2000, tutto giù 0 , metà 1500 .
RX valori senza senso anche se cambiano al movimento del joystick.

qualcosa durante il trasferimento interferisce sui valori originali ma non riesco a venirne a capo. :’(

Trasmettitore:

include <SPI.h>                      
#include "RF24.h"                     

int msg[1];

RF24 radio(9,10);                     connected.
                                      
const uint64_t pipe = 0xE8E8F0F0E1LL; //the address of the modem, that will receive data from Arduino.


void setup(void){
  radio.begin();                      
  radio.openWritingPipe(pipe); 
Serial.begin(9600);

}

void loop(void){

  msg[0] =  map (analogRead(A0), 478,1023,1500,2200);
  Serial.print(msg[0]);
  Serial.print("\n");;
  delay(300);
  
  radio.write(msg, 1);
}

Ricevente:

#include <Servo.h>    
#include <SPI.h>      
#include "RF24.h"     

Servo myServo;       
e the servo name
RF24 radio(9,10);     

const uint64_t pipe = 0xE8E8F0F0E1LL; 
int msg[1];
int avvio=1500;

void setup(){
  myServo.attach(3);
  myServo.write(avvio);
  delay(7000);
  radio.begin();                    
  radio.openReadingPipe(1, pipe);   
  radio.startListening();   
 Serial.begin(9600);
  }
 

void loop(){
       radio.read(msg, 1);
       myServo.write(msg[0]);
      Serial.print("Mapped Input Value:");
  Serial.print(msg[0]);                      
 Serial.print("\n");;
      delay(300);
      
    }
  1. msg è un array di “int” di un elemento … ma perché fai un array ? ? ? :o :o :o Non ti bastava fare “int msg;” ?

  2. quando lo trasmetti con radio.write() lo trasmetti con lunghezza 1, ma un “int” ha lunghezza 2 (è un intero e quindi due bytes) !!!

Guglielmo

Grazie, con il tuo consiglio e quello di un altro utente su FaceBook sono riuscito a risolvere.
posto il codice funzionante se ha qualcuno interessa

TX:

#include <SPI.h>                      //the communication interface with the modem
#include "RF24.h"                     //the library which helps us to control the radio modem

int msg;

RF24 radio(9,10);                     //5 and 10 are a digital pin numbers to which signals CE and CSN are connected.
                                      
const uint64_t pipe = 0xE8E8F0F0E1LL; //the address of the modem, that will receive data from Arduino.


void setup(void){
  radio.begin();                      //it activates the modem.
  radio.openWritingPipe(pipe);  //sets the address of the receiver to which the program will send data.
Serial.begin(9600);

}

void loop(void){

  msg =  map (analogRead(A0), 478,1023,1500,2200);
  Serial.print(msg);
  Serial.print("\n");;
  delay(300);
  
  //radio.write(&msg, );
  radio.write(&msg, sizeof(msg));
}

RX:

#include <Servo.h>    //the library which helps us to control the servo motor
#include <SPI.h>      //the communication interface with the modem
#include "RF24.h"     //the library which helps us to control the radio modem

Servo myServo;        //define the servo name

RF24 radio(9,10);     /*This object represents a modem connected to the Arduino. 
                      Arguments 5 and 10 are a digital pin numbers to which signals 
                      CE and CSN are connected.*/

const uint64_t pipe = 0xE8E8F0F0E1LL; //the address of the modem,that will receive data from the Arduino.

int msgRX;
int avvio=1500;

void setup(){
  myServo.attach(3);//3 is a digital pin to which servo signal connected.
  myServo.write(avvio);
  delay(7000);
  radio.begin();                    //it activates the modem.
  radio.openReadingPipe(1, pipe);   //determines the address of our modem which receive data.
  radio.startListening();   //enable receiving data via modem
 Serial.begin(9600);
  }
 

void loop(){
       //radio.read(msg, 1);
       radio.read(&msgRX, sizeof(msgRX));
       myServo.write(msgRX);
      Serial.print("Mapped Input Value:");
  Serial.print(msgRX);                      //Serial print the mapped input value
 Serial.print("\n");;
      delay(300);
      
    }

Buonasera, ho un quesito da porvi... come è possibile che questo codice che ho scritto sopra ha funzionato per qualche giorno e poi ha smesso definitivamente?...

1.inizialmente ho resettato arduino(nano) ma niente mi restituisce sempre valore 0 su RX. 2. ho cambiato scheda passando ad Arduino (UNO) per RX ed inizialmente ha funzionato, ma dopo alcuni giorni anche UNO ha smesso di ricevere. 3.ho provato diversi moduli RF24 ma niente sempre valore 0 su RX. 4.ho provato le schede con altri sketch e sui pin interessati per controllare che fosse tutto ok e tutto risultava funzionante.

Adesso addirittura trovo delle interferenze su TX che in Serial.monitor mi restituisce valori sballati o addirittura si blocca dopo la stampa di due valori.

sono giorni che cerco una soluzione e spero che qualcuno possa aiutarmi...

Grazie