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: Удалите ввод с клавиатуры с помощью символа [] и без проблем отправьте его. Почему это может быть? Что-нибудь еще происходит, когда я ввожу ввод с клавиатуры?
@Jorge Gonzalez, 👍1
Обсуждение1 ответ
Надеюсь, вы уже решили свою проблему, но у меня была такая же проблема с комбинацией Arduino UNO/nRF24l01+, и этот вопрос был одним из результатов поиска.
В моем случае вызов write() вернул ложь, но получатель получил сообщение.
Как только я добавил в mix вызов write() начал возвращать true.
Мое необоснованное предположение заключается в том, что отправка, а затем переключение с передачи на получение и последующее ожидание получения ACK потребляют слишком много энергии или что-то в этом роде.
В любом случае, несмотря на то, что все рекомендуют добавлять конденсатор, а у меня были платы адаптера руку, я думал выстоять без него и посмотреть, как далеко я смогу добраться.
Я корил себя за потраченное впустую время, но в процессе я многому научился, и теперь мне очень нравится работать с платами приемопередатчиков. Я рад, что не пожал плечами и не сказал: "Ну, сообщение дошло, так что какая разница?"
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Проверьте максимальный размер полезной нагрузки. Всего NRF24L01 не позволяет использовать более 32 байтов., @Mikael Patel
Если вы хотите отправить более длинное сообщение, вам придется разделить его на несколько сообщений, а затем объединить их у получателя., @Mikael Patel
Есть ли другой Arduino, получающий сообщение? nrf24 проверит, получит ли он ответное сообщение ACK. Если это не так, метод записи вернет 0, @Gerben
@Gerben Да, есть еще одна Arduino, которая действует как приемник. Также проверьте, и radio.write возвращает 0., @Jorge Gonzalez
@MikaelPatel Да, я отправил один символ, чтобы проверить это, и продолжаю в том же духе., @Jorge Gonzalez