Пример наброска для пинг-понга на паре nRF24L01s работает, но при использовании моего собственного кода происходит сбой после первой успешной передачи.

У меня есть пара nRF24L01, подключенных к двум платам Arduino Uno, и я использую библиотеку RF24 отсюда: RF24 library. При запуске скетча-примера pingpair радиостанции без проблем передают и принимают данные. Поэтому я попытался написать свой собственный очень простой пример, но столкнулся с проблемой: первое сообщение успешно передаётся (и принимается), однако последующие сообщения не отправляются. Вызов radio.write() возвращает false.

Я использую следующий код на «отправителе»:

RF24 radio(9,10);
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };
uint8_t payload[1];

void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.setRetries(15, 15);
  radio.setPayloadSize(1);
  radio.openWritingPipe(pipes[0]);
}

void loop() {
  payload[0] = 1;
  bool ok = radio.write(payload, 1);
  Serial.println("Status: " + (String) ok);
  delay(200);
}

И следующее на «приемнике»:

RF24 radio(9,10);
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };
uint8_t payload[1];

void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.setRetries(15, 15);
  radio.setPayloadSize(1);
  radio.openReadingPipe(1, pipes[0]);
  radio.startListening();
  Serial.println("Listening: " );
}

void loop() {
  if (radio.available()) {
    bool done = false;
    while (!done) {
      done = radio.read(payload, 1);
      Serial.println("Got payload: " + (String) payload[0]);
    }
  }
}

Предполагаю, что проблема в моём коде, поскольку примеры набросков работают, но я не могу понять, в чём проблема. Ещё раз подведу итог: при сбросе Arduino первый вызов radio.write() возвращает true, и сообщение передаётся. После этого последующие вызовы radio.write() возвращают false.

Также обратите внимание, что я пробовал добавить конденсатор емкостью 10 мкФ между +3,3 В и землей, но это не помогло.

Спасибо за любую помощь.

, 👍0