radio.write() всегда возвращает 0

Я пытаюсь отправить char [] через NRF2401, но метод radio.write() всегда возвращает 0. Убедитесь, что msg содержит сообщение, прочитанное из str.

#define TAM 50

RF24 radio(9,10);

const uint64_t pipe = 0xE8E8F0F0E1AA;

char  msg[TAM];

void setup() {

  Serial.begin(9600);

  radio.begin();

  radio.openWritingPipe(pipe);
}

void loop() {
    if(Serial.available() > 0){
      String str = Serial.readString();
      str.toCharArray(msg,TAM);
      if(!radio.write(msg, TAM)){
        Serial.println("Message not send");
      }
      else
        Serial.println(msg);
    }
}

Что я делаю не так?

Обновление1: Что я заметил, так это то, что в первый раз мне было разрешено отправить его, а другим - нет.

Изменить2: Удалите ввод с клавиатуры с помощью символа [] и без проблем отправьте его. Почему это может быть? Что-нибудь еще происходит, когда я ввожу ввод с клавиатуры?

, 👍1

Обсуждение

Проверьте максимальный размер полезной нагрузки. Всего NRF24L01 не позволяет использовать более 32 байтов., @Mikael Patel

Если вы хотите отправить более длинное сообщение, вам придется разделить его на несколько сообщений, а затем объединить их у получателя., @Mikael Patel

Есть ли другой Arduino, получающий сообщение? nrf24 проверит, получит ли он ответное сообщение ACK. Если это не так, метод записи вернет 0, @Gerben

@Gerben Да, есть еще одна Arduino, которая действует как приемник. Также проверьте, и radio.write возвращает 0., @Jorge Gonzalez

@MikaelPatel Да, я отправил один символ, чтобы проверить это, и продолжаю в том же духе., @Jorge Gonzalez


1 ответ


3

Надеюсь, вы уже решили свою проблему, но у меня была такая же проблема с комбинацией Arduino UNO/nRF24l01+, и этот вопрос был одним из результатов поиска.

В моем случае вызов write() вернул ложь, но получатель получил сообщение.

Как только я добавил в mix вызов write() начал возвращать true.

Мое необоснованное предположение заключается в том, что отправка, а затем переключение с передачи на получение и последующее ожидание получения ACK потребляют слишком много энергии или что-то в этом роде.

В любом случае, несмотря на то, что все рекомендуют добавлять конденсатор, а у меня были платы адаптера руку, я думал выстоять без него и посмотреть, как далеко я смогу добраться.

Я корил себя за потраченное впустую время, но в процессе я многому научился, и теперь мне очень нравится работать с платами приемопередатчиков. Я рад, что не пожал плечами и не сказал: "Ну, сообщение дошло, так что какая разница?"

,