Здравствуйте, у меня две платы Arduino Uno, подключенный к одному компьютеру, хочу настроить связь между ними через nRF24L01. На передатчике ввожу символ, на приемнике его получаю. Проблема в том, что первый символ передается хорошо, а дальше данные теряются, но когда начинаю "спамить" в передатчик на приемнике, условно через раз, данные начинают появляться. Также заметил, что если передавать несколько символов, то первый не передается, а последующие передаются. Подскажите, в чем проблема? КОД ПЕРЕДАТЧИКА: Код (C++): #include <SPI.h> #include "nRF24L01.h" #include "RF24.h" RF24 radio(9, 10); byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; void setup() { Serial.begin(9600); radio.begin(); radio.setAutoAck(0); radio.setRetries(0, 15); radio.enableAckPayload(); radio.setPayloadSize(32); radio.openWritingPipe(address[0]); radio.setChannel(0x60); radio.setPALevel (RF24_PA_MAX); radio.setDataRate (RF24_250KBPS); radio.powerUp(); radio.stopListening(); } void loop() { if (Serial.available() > 0){ char counter = Serial.read(); radio.write(&counter, sizeof(counter)); Serial.print("Sent: "); Serial.println(counter); } } КОД ПРИЕМНИКА: Код (C++): #include <SPI.h> #include "nRF24L01.h" #include "RF24.h" RF24 radio(9, 10); //RF24 radio(9,53); byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб void setup() { Serial.begin(9600); radio.begin(); radio.setAutoAck(0); radio.setRetries(0, 15); radio.enableAckPayload(); radio.setPayloadSize(32); radio.openReadingPipe(1, address[0]); radio.setChannel(0x60); radio.setPALevel (RF24_PA_MAX); radio.setDataRate (RF24_250KBPS); radio.powerUp(); radio.startListening(); } void loop() { byte pipeNo; char gotByte; while (radio.available(&pipeNo)) { radio.read(&gotByte, sizeof(gotByte)); Serial.print("Recieved: "); Serial.println(gotByte); } }
Замените Serial.read() на Serial.readString(). Учтите, что там ещё Enter передаётся в конце, код '\n'.
плохой совет, со стрингом и работать надо иначе. Да и процедура readString() - одна из самых неоднозначных а Ардуино. начинающим я бы советовал считать. что ее нет. Ну а опытные и сами ее не используют По коду ТС должны откправляться лишние символы. а не теряться.
попробуйте в программе сделать так - если символ вами вводимый в сериал равен '&' Амперсанд - то radio.write("GOBABYGO!") - так Вы хоть убедитесь, что радиомодуль норм
В соседней большой теме я уже давал совет по поводу этого модуля. Модуль не простой - для начала необходимо изучить документацию на него, чтобы понимать принцип передачи информации.