I want to control my car with nRF24L01 2.4GHz Radio/Wireless Transceivers. I am using an Arduino Mega, Arduino UNO, joystick, LED and two nRF24L01 2.4GHz radio/wireless transceivers. Here the Arduino Mega is the transmitter circuit and the Arduino UNO is the receiver circuit.
In the transmitter the circuit connections are:
- GND
- VCC 3.3V
- CE to Arduino pin 9
- CSN to Arduino pin 10
- SCK to Arduino pin 13
- MOSI to Arduino pin 11
- MISO to Arduino pin 12
- Joystick X axis to Arduino pin A0
- Joystick Y axis to Arduini pin A1
- Joystick Vcc and GND
Here I want to send the joystick's x and y axis with the module. Here are the receiver circuit connections:
- GND
- VCC 3.3V
- CE to Arduino pin 9
- CSN to Arduino pin 10
- SCK to Arduino pin 13
- MOSI to Arduino pin 11
- MISO to Arduino pin 12
- LED to Arduino pin 3.
This LED helps to control. Actually I want to control my car with joystick like a remote controlled car. Here is the transmitter's code:
#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);
}
}
Here is the receivers's code:
#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);
}
}
}
It's not working. The LED is not lighting. What can I do to solve this problem?
Is const uint64_t pipe = 0xE8E8F0F0E1LL;
wrong? I saw some different numbers for this equation. What is this logic?
Best Answer
I would suggest you edit this question and use the
code
format to pretty print your code as it's very hard to follow the way it currently is.The value for the
pipe
variable is an address, more or less the equivalent of your computer IP address: when a message is broadcast into the air all the potential receivers will filter out any message not corresponding to an address they are interested into.In particular your nRF24L01+ chip is capable to listen for up to 6 addresses.
Another address is the one you use to transmit, so that everybody receiving your message knows who has sent it and to reply to.
So, in your code
radio.openReadingPipe(1,pipe); // pipe value being 0xE8E8F0F0E1LL
means hey, radio, use the second pipe to listen for any message incoming from address 0xE8E8F0F0E1LL, while
radio.openWritingPipe(pipe); // pipe value being 0xE8E8F0F0E1LL
means hey, radio, when sending messages identify yourself with address 0xE8E8F0F0E1LL.
That's the explanation for the
pipe
thing and in a short form: those two values in your sketch must match.Regarding the fact you are not receiving the message, I suggest the following:
radio.setPayloadSize(1)
radio.setPALevel(RF24_PA_HIGH); radio.setDataRate(RF24_250KBPS);