Using TMRh20's RF24 Library - Having Troubles

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