Доброго времени суток! Заранее хочу предупредить, что модули NRF я не выношу из-за крайней привередливости к использованию и питанию, их требованию к библиотеке и абсолютно дурацкого правила "когда шевельнул модуль в процессе работы, включай все заново, ведь он тут же дает сбой". Я лично всегда пользовался модулями LC12S или HC-12, и остался ими доволен. Они работают через serial, и крайне просты в использовании. Но в итоге мне пришлось работать с большими расстояниями, на которые способны только NRF с усилителями. Все как положено: схема спаяна, модуль в переходной плате, с напаянным конденсатором, кодЫ простЫЕ и успешно компилирующиеся, но столкнулся с очень интересной проблемой: два модуля NRF установили связь, передатчик сообщает об успешной отправке пакета, и приемник подтверждает получение. Но здесь спрятан косяк: данные по приходу превращаются в 0. Я пробовал менять плату управления, менять сами модули, пробовал разные примеры из библиотеки и менял каналы, проверял подключение и менял источник питания - НИ-ЧЕ-ГО. Всегда до приемника доходил 0. Я спрашивал у многих знакомых: все разводят руками. Еще один интересный номер: один раз пакеты стали успешно отправляться, до первой перезагрузки. Кроме кнопки reset ничего не трогали. КОД ПЕРЕДАТЧИКА Код (C++): #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба" RF24 radio(9, 10); // CE, CSN void setup(){ Serial.begin(9600); radio.begin(); delay(2); radio.setChannel(9); приемника. radio.setDataRate(RF24_1MBPS); RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM, radio.setPALevel(RF24_PA_HIGH); radio.openWritingPipe(pipe); // открываем трубу на передачу. } void loop() { int data = analogRead(0); // читаем значение radio.write(&data, sizeof(data)); // отправляем данные и указываем сколько байт пакет Serial.print("data: "); Serial.println(data); } КОД ПРИЕМНИКА Код (C++): #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> const uint64_t pipe = 0xF0F1F2F3F4LL; RF24 radio(9, 10); // CE, CSN void setup(){ Serial.begin(9600); radio.begin(); delay(2); radio.setChannel(9); // канал (0-127) radio.setDataRate(RF24_1MBPS); // мощьность передатчика RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM, radio.setPALevel(RF24_PA_HIGH); radio.openReadingPipe(1,pipe); // открываем первую трубу с индитификатором "pipe" radio.startListening(); // включаем приемник, начинаем слушать трубу } void loop() { int data; if (radio.available()){ // проверяем не пришло ли чего в буфер. radio.read(&data, sizeof(data)); // читаем данные, указываем сколько байт читать Serial.print("data: "); Serial.println(data); } }
У меня при "аналогичном" коде все работает. Посмотрите, что вы отправляете. Или проверьте канал(не занят ли он кем).
Если прочитать внимательно мой код, то видно, что отправляемый пакет он также кидает в serial. И еще я упомянул, что менял каналы много раз(
Здесь уже есть ОГРОМНАЯ тема по этим модулям. Я уже просто не знаю, что у вас может быть такого, что еще не описано в той теме. Прям какие-то мистические модули. А все потому, что никто не разбирается как они должны работать, а все тупо перебирают готовые библиотеки, пока не заработает Ну нет там чудес, если с электроникой все в норме (питание, контакты, антенны, конденсаторы). Не получается связь - выводите в порт состояние всех регистров и анализируйте, ищите причину. У меня в моей библиотеке даже настоящие модульки коннектятся с китайскими "каплями".