Не могу заставить работать RCSwitch

Dima85
Offline
Зарегистрирован: 07.01.2013

У меня достаточно большой код, более 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");

работает.

Подскажите пожалуйста из за чего могут быть такие проблемы?

MaksMS
Offline
Зарегистрирован: 11.03.2013

А вообще-то ,если на выход м/к для радиомодуля подключить светодиод ,то он мигает ? Скорее всего интервалы в работе mySwitch.send из-за прерывания очень сильно меняются и код получается длинее и приемник не понимает.

Попробуйте на время отправки mySwitch.send запретить прерывание. 

Dima85
Offline
Зарегистрирован: 07.01.2013

Я наверное не понятно объяснил. У меня все реботает не работает только RCSwitch - радио модуль. IR и все остальное работает.

Причем RCSwitch работает (отправляет 1 раз) если отправку сигнала разместить в void setup(){*} если отправку разместить куда либо в vaid loop(){*} радио модуль почему-то не отправляет сигнал. Точнее прибор на который он возможно и отправляет сигнал не включается. Но все остальное в скетче работает как ни в чем не бывало.

Какие могут быть причины?

MaksMS
Offline
Зарегистрирован: 11.03.2013

Пробуйте то,что я описал выше: проверить светодиодом и отключить прерывание. Паузы при отправке импульсов в RCSwitch нужны очень точные ,а ИК библиотека,работающая через прерывания искажает все.

DAD
Offline
Зарегистрирован: 23.06.2014

Три дня просидел с библиотеками для 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 Если не туда написал, плиз, перенесите в нужную тему

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

я тоже менял эти значения и помогало

еще тут импульсы можно расширить чтобы разные пульты лучше работали:

 

  min1Period=period*4/10; //Avoid floating point math; saves memory.
  max1Period=period*16/10;
  min3Period=period*23/10;
  max3Period=period*37/10;