Не могу заставить работать RCSwitch
- Войдите на сайт для отправки комментариев
Втр, 04/03/2014 - 15:06
У меня достаточно большой код, более 900 строк. Не думаю что есть смысл его выкладывать сюда. Сейчас хочу поместить в него и RCSwitch.
Для начала попробовал просто залить скетчь:
#include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); void setup() { mySwitch.enableTransmit(10); } void loop() { mySwitch.send("110100100100011110000100"); //on alarm delay(8000); }
Он замечательно работает, без каких либо нареканий. Но когда я пытаюсь его внедрить с вой код, он отказывается работать.
В то же время если я
mySwitch.send("110100100100011110000100"); //on alarm
помещяю в setup() все работает. Тоесть он отправлет 1 раз сигнал посе загрузки. Если помещаю в loop() комманда не отправляется.
Допустим вот сюда:
if (irrecv.decode(&results)) { if (results.value==16769565) { mySwitch.send("110100100100011110000100"); //on alarm processCommand("all-off"); }
В то же время
processCommand("all-off");
работает.
Подскажите пожалуйста из за чего могут быть такие проблемы?
А вообще-то ,если на выход м/к для радиомодуля подключить светодиод ,то он мигает ? Скорее всего интервалы в работе mySwitch.send из-за прерывания очень сильно меняются и код получается длинее и приемник не понимает.
Попробуйте на время отправки mySwitch.send запретить прерывание.
Я наверное не понятно объяснил. У меня все реботает не работает только RCSwitch - радио модуль. IR и все остальное работает.
Причем RCSwitch работает (отправляет 1 раз) если отправку сигнала разместить в void setup(){*} если отправку разместить куда либо в vaid loop(){*} радио модуль почему-то не отправляет сигнал. Точнее прибор на который он возможно и отправляет сигнал не включается. Но все остальное в скетче работает как ни в чем не бывало.
Какие могут быть причины?
Пробуйте то,что я описал выше: проверить светодиодом и отключить прерывание. Паузы при отправке импульсов в RCSwitch нужны очень точные ,а ИК библиотека,работающая через прерывания искажает все.
Три дня просидел с библиотеками для RF. В конечном итоге обратил внимание, что на разных пультах разная скорость передачи данных. В общем, в библиотеке RemoteSwitch поменял строку
if (duration>3720) { //==31*120 minimal time between two edges before decoding starts.
на
if (duration>1200) { //==31*120 minimal time between two edges before decoding starts.
И все заработало. Смотрел Осиповский канал, удивлялся, что у него все работает, а у меня нет. Потом обратил внимание, что у него 340мс длительность передачи, а у меня 112мс проскакивает раз в минуту при жмякании на пульт. Методом тыка, чисто эмпирически, теперь работает на раз-два. Файл RemoteReceiver.cpp
Удачи
PS Если не туда написал, плиз, перенесите в нужную тему
я тоже менял эти значения и помогало
еще тут импульсы можно расширить чтобы разные пульты лучше работали: