Пацаны привет. Есть проблема. Короче есть у меня 2 штучки NRF24L01+PA+LNA (тобиш с антенной). И вначале они вообще не подключались к друг другу! Не видели в тестовом скетче, но всё решилось когда припоял к выводам по питанию конденсаторы: Понимаю что немного не в тему, но вдруг у кого проблемы с такой же диковинкой. После подключение прошло на ура. Сигнал правда не очень далёкий, всего метров 250, хотя заявлено на целый 1 км. После этого появилась задумка, что бы управлять одной NRF-кой через другую путём подключение ИК датчика. Получается когда я жму на пульту на одну и ту же кнопку, то всё нормалды и появляется этот код: Но как только одна NRFка связалась с другой, код сразу начинает коверкаться вот в такую дичь! Я продолжаю жать на одну и ту же кнопку, но код выпадает совершенно рандомный! Библиотеки менял. От них ничего не зависит и возникает подобная ерундень, и именно в тот момент когда NRF-ки связались друг с другом. Подскажите в чём беда, замаился уже.
О необходимости дополнительного конденсатора пишут в любой статье по данному модулю. А по вашей беде - выложите для начала код. Будем смотреть.
Один передатчик. Код (C++): #include <SPI.h> // Подключаем библиотеку для работы с шиной SPI #include <nRF24L01.h> // Подключаем файл настроек из библиотеки RF24 #include <RF24.h> // Подключаем библиотеку для работы с nRF24L01+ RF24 radio(9, 10); // Создаём объект radio для работы с библиотекой RF24, указывая номера выводов nRF24L01+ (CE, CSN) int data[2]; // Создаём массив для приёма данных bool flag1=0,mode=1; uint32_t myTimer1,myTimer2; void setup(){ pinMode(3,INPUT); // Датчик движения Serial.begin(9600); delay(1000); radio.begin(); // Инициируем работу nRF24L01+ radio.setChannel(66); // Указываем канал приёма данных (от 0 до 127), 5 - значит приём данных осуществляется на частоте 2,405 ГГц (на одном канале может быть только 1 приёмник и до 6 передатчиков) radio.setDataRate (RF24_250KBPS); // Указываем скорость передачи данных (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Мбит/сек radio.setPALevel (RF24_PA_MAX); // Указываем мощность передатчика (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm) radio.openReadingPipe (1, 0x1234567890LL); // Открываем 1 трубу с идентификатором 0x1234567890 для приема данных (на ожном канале может быть открыто до 6 разных труб, которые должны отличаться только последним байтом идентификатора) radio.openWritingPipe (0x1234567890LL); radio.powerUp(); radio.stopListening (); // radio.stopListening (); // Выключаем приёмник, если потребуется передать данные } void loop(){ upd(); light(); movement(); } void movement(){ if(digitalRead(3)==1){ radio.stopListening (); data[0] = 1; radio.write(data[2], 0); radio.startListening (); } } void light(){ data[1] = analogRead(0); } void upd(){ if(mode==0){ if (millis() - myTimer1 >= 5000) { radio.stopListening (); radio.write(data[2], 0); radio.startListening (); myTimer1 = millis(); } } if(mode==1){ if (millis() - myTimer2 >= 500) { radio.stopListening (); radio.write(data[2], 0); radio.startListening (); myTimer2 = millis(); } } if(radio.available()){ radio.startListening (); radio.read(&data, sizeof(data)); Serial.println(data[0]); Serial.println(data[1]); Serial.println(data[2]); } } Второй передатчик Код (C++): #define SoundPin 3 #define DelaySound 100 #include <SPI.h> // Подключаем библиотеку для работы с шиной SPI #include <nRF24L01.h> // Подключаем файл настроек из библиотеки RF24 #include <RF24.h> // Подключаем библиотеку для работы с nRF24L01+ #include <IRremote.h> RF24 radio(9, 10); // Создаём объект radio для работы с библиотекой RF24, указывая номера выводов nRF24L01+ (CE, CSN) int data[2],movement=0,svet,ir_code; // Создаём массив для приёма данных bool pin=0,flag1=0,mode=0; byte irVal = 255; const byte IR_PIN = 2; uint32_t myTimer1,myTimer2; IRrecv irReciver(IR_PIN); decode_results results; void setup(){ pinMode(8 ,OUTPUT); // Светодиод ON pinMode(7 ,OUTPUT); // Светодиод LIGHT pinMode(6 ,OUTPUT); // Светодиод DANGER pinMode(5 ,OUTPUT); // Светодиод ANT pinMode(4 ,OUTPUT); // Светодиод --- pinMode(3,OUTPUT); // Динамик связи pinMode(2,INPUT); IrReceiver.begin(IR_PIN, ENABLE_LED_FEEDBACK); Serial.begin(9600); radio.begin(); // Инициируем работу nRF24L01+ radio.setRetries(20, 45); radio.setChannel(66); // Указываем канал передачи данных (от 0 до 127), 5 - значит передача данных осуществляется на частоте 2,405 ГГц (на одном канале может быть только 1 приёмник и до 6 передатчиков) radio.setDataRate (RF24_250KBPS); // Указываем скорость передачи данных (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Мбит/сек radio.setPALevel (RF24_PA_MAX); // Указываем мощность передатчика (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm) radio.openWritingPipe (0x1234567890LL); // Открываем трубу с идентификатором 0x1234567890 для передачи данных (на одном канале может быть открыто до 6 разных труб, которые должны отличаться только последним байтом идентификатора) radio.openReadingPipe (1, 0x1234567890LL); radio.startListening (); radio.powerUp(); irReciver.enableIRIn(); digitalWrite(8,1); // Включение светодиода питания } void loop(){ upd(); IK(); //IKcode(); //radio.write(&data, sizeof(data)); // отправляем данные из массива data указывая сколько байт массива мы хотим отправить. Отправить данные можно с проверкой их доставки: if( radio.write(&data, sizeof(data)) ){данные приняты приёмником;}else{данные не приняты приёмником;} } void upd(){ if(radio.available()){ radio.read(&data, sizeof(data)); digitalWrite(5,1); tone(SoundPin, 400); delay(15); } if(!radio.available()){ digitalWrite(5,0); noTone(SoundPin); } } void IK(){ if (irReciver.decode(&results)) { // если данные пришли Serial.println( results.value, HEX ); // выводим данные irReciver.resume(); // принимаем следующую команду } } Ну это круто что пишут, вот только обычные NRFки у меня и без кондёров нормально сигналят. А насчёт модулей с антенной я вообще ничего не нашёл. Причём иногда пишут вообще странную фигню, например что Si24r1(клон NRF) не работает в паре с нормальной NRF. Как ни странно у меня работает. Получается кому как повезёт с этими модулями.