Nrf24l01+ Daten Senden, Empfangen und zurück senden

Nun, die Fernbedienung ist mit Potis ausgestattet, also Joysticks. Und deren Status wird permanent abgefragt und zum Empfänger (Ein RC-Boot) gesendet. Das Boot muss permanent Steuerbefehle erhalten, sonst fährt es ja nicht richtig.

Sender code

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

//RF24 radio(48, 49); // für Arduino Mega
RF24 radio(8, 7); // für Arduino Nano/Uno/etc

static const uint64_t pipes[6] = {0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL, 0xF0F0F0F0C3LL, 0xF0F0F0F0B4LL, 0xF0F0F0F0A5LL, 0xF0F0F0F096LL};

int poti1Val;
int poti2Val = 0;
int poti1 = 1;
int poti2 = 0;
int motorrpm;
int servowinkel;
int beep = 3;
int pong;
int sent = 0;

#define code 1337

void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.setChannel(50);                // Funkkanal - Mögliche Werte: 0 - 127
  radio.setAutoAck(0);
  radio.setRetries(15, 0);
  radio.setPALevel(RF24_PA_MIN);
  // Sendestärke darf die gesetzlichen Vorgaben des jeweiligen Landes nicht überschreiten!
  // RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM, and RF24_PA_HIGH=0dBm
  pinMode(beep, OUTPUT);
  radio.openWritingPipe(pipes[0]);
  radio.openWritingPipe(pipes[1]);
  radio.openWritingPipe(pipes[2]);
  radio.openReadingPipe(1, pipes[1]);
  radio.openReadingPipe(2, pipes[2]);
  radio.openReadingPipe(3, pipes[3]);
}


void loop()
{
  poti1Val = analogRead(poti1);
  poti2Val = analogRead(poti2);
  poti1Val = map(poti1Val, 0, 1023, 170, 10);
  poti2Val = map(poti2Val, 0, 1023, 255, 0);
  long message[8] = {int(poti1Val), int(poti2Val), (code)};
  if (sent == 0)
  {
    radio.stopListening();
    radio.write(&message, sizeof(message));
    Serial.println("Sent");
    sent = 1;
  }
  if (sent == 1)
  {
    radio.startListening();
    Serial.println("Start listening");
    delay(10);
    if (radio.available()) {
      long got_message[8] = {0, 0, 0, 0, 0, 0, 0, 0};
      bool done = false;
      while (!done) {
        done = radio.read(&got_message, sizeof(got_message));
      }
      pong = got_message[0];
      Serial.println(pong);
      if (pong = 69)
      {
        Serial.println("Recieved");
      }
      sent = 0;
    }
  }
//  Serial.println(poti1Val);
//  Serial.println(poti2Val);
//  Serial.println(code);
}

Empfänger

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

RF24 radio(8, 7);

static const uint64_t pipes[6] = {0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL, 0xF0F0F0F0C3LL, 0xF0F0F0F0B4LL, 0xF0F0F0F0A5LL, 0xF0F0F0F096LL};

int poti1Val;
int poti2Val;
int motor = 3;
Servo myservo1;
int motorrpm;
int servowinkel;
int code;

#define pong 69

void setup()
{
  radio.begin();
  radio.setChannel(50);                // Funkkanal - Mögliche Werte: 0 - 127
  radio.setAutoAck(0);
  radio.setPALevel(RF24_PA_MIN);     // Sendestärke darf die gesetzlichen Vorgaben des jeweiligen Landes nicht überschreiten!
  // RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM, and RF24_PA_HIGH=0dBm
  radio.openWritingPipe(pipes[1]);
  radio.openWritingPipe(pipes[2]);
  radio.openWritingPipe(pipes[3]);
  radio.openReadingPipe(1, pipes[0]);
  radio.openReadingPipe(2, pipes[1]);
  radio.openReadingPipe(3, pipes[2]);
  pinMode(motor, OUTPUT);
  myservo1.attach(10);
  Serial.begin(9600);
  radio.startListening();
}

void loop()
{
  if (radio.available()) {
    long got_message[8] = {0, 0, 0, 0, 0, 0, 0, 0};
    bool done = false;
    while (!done) {
      done = radio.read(&got_message, sizeof(got_message));
    }
    poti1Val = got_message[0];
    poti2Val = got_message[1];
    code = got_message[2];
    if (code == 1337)
    {
      analogWrite(motor, poti2Val);
      myservo1.write(poti1Val);
      Serial.println(poti1Val);
      Serial.println(poti2Val);
      Serial.println(code);
      Serial.println("Sent");
      long message[8] = {(pong)};
      delay(1);
      radio.stopListening();
      radio.write(&message, sizeof(message));
      radio.startListening();
    }
  }
}

So sieht mein code momentan aus.

Jetzt Sendet der Sender einmal die Werte der Analog eingänge, wenn der Empfänger es empfängt, schickt er eine Bestätigung zurück. Wenn der Sender diese erhält, darf er erst erneut senden.

Wenn ich das ganz ohne delays benutze, kommt rein garnichts zurück.
Mit ein paar Millisekunden delay dazwischen, läuft es ca. 20 Programmzyklen durch, und bleib dann bei

    radio.startListening();
    Serial.println("Start listening");
    delay(10);

..hängen.

Keine ahnung wie ich das löse?