Problema con nRF24L01 transceptores de radio / inalámbricos de 2.4GHz

1

Quiero controlar mi auto con nRF24L01 2.4GHz Radio / Transceptores inalámbricos. Estoy usando un Arduino Mega, Arduino UNO, joystick, LED y dos transceptores de radio / inalámbricos nRF24L01 de 2.4GHz. Aquí, el Arduino Mega es el circuito del transmisor y el Arduino UNO es el circuito del receptor.

En el transmisor, las conexiones del circuito son:

  1. GND
  2. VCC 3.3V
  3. CE a Arduino pin 9
  4. CSN a Arduino pin 10
  5. SCK a Arduino pin 13
  6. MOSI a Arduino pin 11
  7. MISO a Arduino pin 12
  8. Eje del joystick X al pin A0 de Arduino
  9. Eje del joystick Y al pin A1 de Arduini
  10. Joystick Vcc y GND

Aquí quiero enviar los ejes x e y del joystick con el módulo. Aquí están las conexiones del circuito del receptor:

  1. GND
  2. VCC 3.3V
  3. CE a Arduino pin 9
  4. CSN a Arduino pin 10
  5. SCK a Arduino pin 13
  6. MOSI a Arduino pin 11
  7. MISO a Arduino pin 12
  8. LED a Arduino pin 3.

Este LED ayuda a controlar. En realidad, quiero controlar mi auto con un joystick como un auto con control remoto. Aquí está el código del transmisor:

#include "SPI.h"
#include "nRF24L01.h"
#include "RF24.h"
#define VRx A0
#define VRy A1

int VRxPos = 90;
int VRyPos = 90;
int msg[1];
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;

void setup()
{
    radio.begin();
    radio.openWritingPipe(pipe);
}

void loop()
{
    VRxPos = analogRead(VRx);
    VRxPos = map(VRxPos, 0, 1023, 0, 180);
    VRyPos = analogRead(VRy);
    VRyPos = map(VRyPos, 0, 1023, 0, 180);
    if((VRxPos==88) && (VRyPos==85))
    {
        msg[0] = 111;
        radio.write(msg, 1);
    } else {
        msg[0] = 112;
        radio.write(msg, 1);
    }
}

Aquí está el código del receptor:

#include "SPI.h"
#include "nRF24L01.h"
#include "RF24.h"

int msg[1];
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL; 
int LEDpin = 3;

void setup()
{
    radio.begin();
    radio.openReadingPipe(1,pipe); 
    radio.startListening(); 
    pinMode(LEDpin, OUTPUT);
}

void loop()
{
    if (radio.available())
    {
        bool done = false;
        while (!done)
        {
            done = radio.read(msg, 1);
            if (msg[0] == 111)
            {
                delay(10);
                digitalWrite(LEDpin, HIGH);
            } else {
                digitalWrite(LEDpin, LOW);
            }
            delay(10);
        }
    }
}

No está funcionando. El LED no se enciende. ¿Qué puedo hacer para resolver este problema? ¿Es const uint64_t pipe = 0xE8E8F0F0E1LL; incorrecto? Vi algunos números diferentes para esta ecuación. ¿Qué es esta lógica?

    
pregunta user33610

1 respuesta

3

Le sugiero que edite esta pregunta y use el formato code para imprimir su código, ya que es muy difícil de seguir la forma en que se encuentra actualmente.

El valor de la variable pipe es una dirección, más o menos el equivalente de la dirección IP de su computadora: cuando se transmite un mensaje al aire, todos los receptores potenciales filtrarán cualquier mensaje que no corresponda a una dirección como están interesado en.

En particular, su chip nRF24L01 + es capaz de escuchar hasta 6 direcciones.

Otra dirección es la que usas para transmitir, para que todos los que reciban tu mensaje sepan quién la ha enviado y para responder.

Entonces, en tu código radio.openReadingPipe(1,pipe); // pipe value being 0xE8E8F0F0E1LL

significa hey, radio, usa el segundo conducto para escuchar cualquier mensaje entrante desde la dirección 0xE8E8F0F0E1LL , mientras radio.openWritingPipe(pipe); // pipe value being 0xE8E8F0F0E1LL

significa hey, radio, al enviar mensajes, identifíquese con la dirección 0xE8E8F0F0E1LL .

Esa es la explicación de pipe thing y en una forma breve: esos dos valores en tu boceto deben coincidir .

En cuanto al hecho de que no está recibiendo el mensaje, sugiero lo siguiente:

  1. intente establecer el tamaño de carga útil del mensaje en un valor fijo con radio.setPayloadSize(1)
  2. agregue un corto de condensador de 1uF entre GND y Vcc en su tarjeta nRF24
  3. intente usar la configuración más confiable que, en el nRF24L01 + es el de 250 Kbps con el nivel máximo de PA al configurar radio.setPALevel(RF24_PA_HIGH); radio.setDataRate(RF24_250KBPS);
respondido por el Roberto Lo Giacco

Lea otras preguntas en las etiquetas