nrf24l01 принимает данные только один раз при включении
- Войдите на сайт для отправки комментариев
Пт, 29/12/2017 - 07:03
Здравствуйте, не судите строго, в ардуино новичек. Есть такая проблема. Имеются две ардуино с модулями nrf24l01, одна передает другой показания температуры с датчика DHT22, проблема заключается в следующем, данные температуры передаются только один раз, при включении приемника, что бы обновить данные приходится нажимать кнопку рестарт на ардуино. Вообще не могу понять в чем проблема. код приемника ниже. Заранее спасибо, не пинайте сильно)))))))))
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3F, 16, 2); #include <SPI.h> #include "nRF24L01.h" #include "RF24.h" byte tT; RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно byte recieved_data[2]; // массив принятых данных byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб void setup() { Serial.begin(9600); //открываем порт для связи с ПК lcd.init(); lcd.backlight(); radio.begin(); //активировать модуль radio.setAutoAck(1); //режим подтверждения приёма, 1 вкл 0 выкл radio.setRetries(0, 15); //(время между попыткой достучаться, число попыток) radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал radio.setPayloadSize(32); //размер пакета, в байтах radio.openReadingPipe(1, address[0]); //хотим слушать трубу 0 radio.setChannel(0x60); //выбираем канал (в котором нет шумов!) radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS radio.powerUp(); //начать работу radio.startListening(); //начинаем слушать эфир, мы приёмный модуль } void loop() { while (radio.available()){ radio.read( &recieved_data, sizeof(recieved_data) ); // читаем входящий сигнал tT = recieved_data[0]; tT = map(tT, 0, 200, -98, 101); // конвертируем данные lcd.setCursor(0, 0); lcd.print(tT); Serial.println(recieved_data[0]); lcd.setCursor(0, 1); int i; i++; lcd.print(i); // добавил для проверки работает ли в принципе цикл } }
проверял на передатчике значение массива с температурой через серийный монитор, значения меняются при изменении температуры на датчике
Сам разобрался.
Удалил из скетча на приемнике и передатчике строку
radio.enableAckPayload();
и все за работало
Тему можно закрыть
Добрый день! Нужна помощь. У меня похожая проблема, данные принимаются и отображаются на экране, но когда выключаю передатчик, приемник продолжает отображать последнее значение температуры. Скетчи брал за основу с https://github.com/liamjack/Arduino-NRF24L01-Thermometer, но переделал для led индикатора. Буду использовать в качестве термостата, поэтому и необходимо в случае ошибки с приемом данных "бить тревогу". Подскажите как исправить
Вот мои старания:
Я на приёмнике, при каждом приёме сбрасываю счётчик. Если счётчик не сбрасывается 10 - 30 мин. включаю ALARM. Но есть другая проблема, Если температура и напряжение ИП стабильны и не меняются длительное время, загорается ALARM. NRF24L01 не воспринимает второй пакет если он такой же как предыдущий.
Flush_rx не помогает.