You might like to try these two programs
EDIT 25 Feb 2016 - there is a newer version of these programs here
EDIT 22 Apr 2017 - this Simple nRF24L01+ Tutorial is newer and more comprehensive
TRANSMITTER
// TrackControl - the master or the transmitter
// http://tmrh20.github.io/RF24/
// NB I have added 'TmR' at the start of the names of the library file to distiguish
// this version from maniacBug's version. Eg TmRRF24.h
//~ - CONNECTIONS: nRF24L01 Modules See:
//~ http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo
//~ 1 - GND
//~ 2 - VCC 3.3V !!! NOT 5V
//~ 3 - CE to Arduino pin 9
//~ 4 - CSN to Arduino pin 10
//~ 5 - SCK to Arduino pin 13
//~ 6 - MOSI to Arduino pin 11
//~ 7 - MISO to Arduino pin 12
//~ 8 - UNUSED
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define CE_PIN 9
#define CSN_PIN 10
// NOTE: the "LL" at the end of the constant is "LongLong" type
// These are the IDs of each of the slaves
const uint64_t slaveID = 0xE8E8F0F0E1LL;
RF24 radio(CE_PIN, CSN_PIN); // Create a Radio
int dataToSend[2];
unsigned long currentMillis;
unsigned long prevMillis;
unsigned long txIntervalMillis = 1000;
int txVal = 0;
int ackMessg[4];
byte ackMessgLen = 2;
void setup() {
Serial.begin(9600);
Serial.println("Track Control Starting");
radio.begin();
radio.setDataRate( RF24_250KBPS );
radio.enableAckPayload();
radio.setRetries(3,5); // delay, count
}
//====================
void loop() {
currentMillis = millis();
if (currentMillis - prevMillis >= txIntervalMillis) {
radio.openWritingPipe(slaveID); // calls each slave in turn
dataToSend[0] = txVal; // this gets incremented so you can see that new data is being sent
txVal += 1;
dataToSend[1] = txVal;
txVal += 1;
bool rslt;
rslt = radio.write( dataToSend, sizeof(dataToSend) );
Serial.print("\nRSLT ");
Serial.println(rslt);
Serial.print("Data Sent ");
Serial.println(dataToSend[0]);
if ( radio.isAckPayloadAvailable() ) {
radio.read(ackMessg,ackMessgLen);
Serial.print("Acknowledge received: ");
Serial.println(ackMessg[0]);
}
prevMillis = millis();
}
}
RECEIVER
// HandController - the slave or the receiver
// http://tmrh20.github.io/RF24/
// NB I have added 'TmR' at the start of the names of the library file to distiguish
// this version from maniacBug's version. Eg TmRRF24.h
//~ - CONNECTIONS: nRF24L01 Modules See:
//~ http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo
//~ 1 - GND
//~ 2 - VCC 3.3V !!! NOT 5V
//~ 3 - CE to Arduino pin 9
//~ 4 - CSN to Arduino pin 10
//~ 5 - SCK to Arduino pin 13
//~ 6 - MOSI to Arduino pin 11
//~ 7 - MISO to Arduino pin 12
//~ 8 - UNUSED
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define CE_PIN 9
#define CSN_PIN 10
// NOTE: the "LL" at the end of the constant is "LongLong" type
const uint64_t deviceID = 0xE8E8F0F0E1LL; // Define the ID for this slave
int valChange = 1;
RF24 radio(CE_PIN, CSN_PIN);
int dataReceived[2];
int ackData[2] = {12,0};
byte ackLen = 2;
void setup() {
Serial.begin(9600);
delay(1000);
Serial.println("Hand Controller Starting");
radio.begin();
radio.setDataRate( RF24_250KBPS );
radio.openReadingPipe(1,deviceID);
radio.enableAckPayload();
radio.writeAckPayload(1, ackData, ackLen);
radio.startListening();
}
void loop() {
if ( radio.available() ) {
radio.read( dataReceived, sizeof(dataReceived) );
Serial.print("Data0 ");
Serial.print(dataReceived[0]);
Serial.print(" Data1 ");
Serial.println(dataReceived[1]);
radio.writeAckPayload(1, ackData, ackLen);
ackData[0] += valChange; // this just increments so you can see that new data is being sent
}
}
They are cut-down versions of code I use to control model trains.
...R