nRF24 - порядок включения приёмника и передатчика ?
- Войдите на сайт для отправки комментариев
Пт, 07/03/2014 - 08:37
Доброго.
Экспериментирую с парой nRF24L01+, один модуль в режиме приёмника, другой в режиме передатчика.
Обнаружил странный фокус - чтобы всё работало "приёмник" должен быть включен первым, а затем "передатчик". Если запускать "приёмник" при работающем передатчике - СВЯЗИ НЕТ!
Код для примера взят отсюда (в самом низу страницы) http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo (типа джойстик)
Пробовал явно указывать setChannel в обоих устройствах - повдение не меняется.
Может как-то хитро нужно инициализировать устройства, чтоб они были безразличны к порядку включения.
А если выключить потверждение через radio.setAutoAck(false); ?
С отключеным на стороне передатчика setAutoAck(false); связи вообще нет.
Да ещё. Если связь есть (сначала включаем приёмник, зетем передатчик) reset приёмника приводит к потере связи а reset передатчика не приводит.
Модули менял местами для проверки физической исправности - всё так же.
upd: сейчас сообразил, что Ack нужно, наверное, на приёмнике тоже вырубать - он-же подтверждение о приёме шлёт.
отключил Ack на обеих сторонах - работает так-же. При сбросе приёмника связь пропадает.
Не понятна логика конечно.. А если radio.startListening(); поставить в loop на приемнике ?
Прошу прощения - ввёл в заблуждение - мой код приёмника чуть отличается от того, что в примере.
мой код (не рабоочий):
рабочий код:
upd2:
Так всё работает.
Дурацкий вопрос, но всё-же, почему мой код не работал? Я так понимаю, в цикле while(!done) зачитывается всё содержимое приёмного буфера. Что мешало "дочитать" его в моём коде на следующей итерации loop();
Уже догадался, вот это:
Называется "сам дурак".
Кстати, рабочий код видимо тоже не очень правильный, на больших структурах цикл может крутиться несколько раз в течении которых содержимое буфера не совсем корректно.
Правильней наверное так: