Вопрос по NRF24L01
- Войдите на сайт для отправки комментариев
Ср, 19/04/2017 - 18:06
Приемник и передатчик домашней метеостанции жена заставила связать посредством NRF24L01. Собрал тестовые передатчик и приемник с минимум кода.
Работает, но как-то странно.
Код передатчика:
// Библиотеки для работы с радиомодулем NRF24L01 #include <SPI.h>; #include <nRF24L01.h>; #include <RF24.h>; // Переменные хранят считанную с датчиков температуру float _tempD1; float _tempD2; float _tempMid; // Переменные хранят данные освещенности, считанные с аналоговых входов A0 и A1 int _photoSens1; int _photoSens2; void fnReadLux(void) { // Счтываем освещенность _photoSens1 = analogRead(A0); _photoSens2 = analogRead(A1); } /*******************************************************************************************************************/ // Библиотеки для работы с датчиком темпереатуры #include "OneWire.h" #include "DallasTemperature.h" /*******************************************************************************************************************/ /******************************************** Датчик температуры ***************************************************/ /*******************************************************************************************************************/ // Выход данных датчика температуры подключен к pin A2 (=16) Arduino #define one_wire_bus 16 // Создаем экземпляр класса oneWire, передаевая ему параметр (номер пина Arduino) OneWire oneWire(one_wire_bus); DallasTemperature sensors(&oneWire); // Функция считывания температуры void fnGetTemp(void) { sensors.requestTemperatures(); _tempD1 = sensors.getTempCByIndex(0); _tempD2 = sensors.getTempCByIndex(1); _tempMid = (_tempD1 + _tempD2)/2; } /*******************************************************************************************************************/ /**************************************** Функции для работы с радиомодулем ***************************************/ /*******************************************************************************************************************/ // Сигналы CE и CSN на пинах 9 и 10 соответственно // RF24 _mrRF24(CE,CSN); RF24 _mrRF24(9,10); // адрес трубы канала const uint64_t _pipe = 0xAF1510009002LL; // Функция инициализации модуля void fnIniRF24(void) { _mrRF24.begin(); _mrRF24.setChannel(72); _mrRF24.setDataRate(RF24_250KBPS); _mrRF24.setPALevel(RF24_PA_HIGH); _mrRF24.stopListening(); _mrRF24.openWritingPipe(_pipe); } // Функция передает данные void fnSendData(void) { _mrRF24.write(&_tempMid, sizeof(_tempMid)); } void setup() { // Начало работы с датчиками температуры sensors.begin(); // Инициализация передатчика fnIniRF24(); } void loop() { fnGetTemp(); fnReadLux(); for(int i = 0; i < 100; i++) { fnSendData(); } }
Код приемника:
// Библиотеки для работы с радиомодулем NRF24L01 #include <SPI.h>; #include <nRF24L01.h>; #include <RF24.h>; /*******************************************************************************************************************/ /**************************************** Функции для работы с радиомодулем ***************************************/ /*******************************************************************************************************************/ // Сигналы CE и CSN на пинах 9 и 10 соответственно // RF24 _mrRF24(CE,CSN); RF24 _mrRF24(9,10); float _tempO; // Температура на улице (outdoor) // адрес трубы канала const uint64_t _pipe = 0xAF1510009002LL; // Функция инициализации модуля void fnIniRF24(void) { _mrRF24.begin(); _mrRF24.setChannel(72); _mrRF24.setDataRate(RF24_250KBPS); _mrRF24.setPALevel(RF24_PA_HIGH); _mrRF24.openReadingPipe(1,_pipe); _mrRF24.startListening(); } // Функция принимает данные void fnReceiveData(void) { if(_mrRF24.available()) { _mrRF24.read(&_tempO, sizeof(_tempO)); } else { _tempO = -99.9; } } void setup() { Serial.begin(9600); fnIniRF24(); } void loop() { fnReceiveData(); Serial.println(_tempO); delay(500); }
Так вот, если в передатчике убрать последний for, т.е. передавать данные просто в цикле loop, то данные не передаются, приемник возвращает в мониторе все время -99.9 .... Если for вернуть, то передается примерно 80% из этого for. Чего в супе не хватает?
откуда жена знает про NRF24L01?
откуда жена знает про NRF24L01?
Я ей во сне признался, что можно убрать провода, за которые она запинается ....
то есть проблема не в NRF24L01 изначально, а в проводах и ногах. может в эту сторону копать