Кондиционер и ИК передатчик из Ардуино.

Mariev
Offline
Зарегистрирован: 17.08.2016

Продолжу в этой теме.

Если у кого то есть еще вопросы по считыванию длинных сигналов с кондиционеров - мне помогла эта страница ссылка

Но столкнулся я с такой проблемой - у меня 349 интервалов для одной команды.

Когда загружаю хотя бы 2 команды в скетч - при проверке предупреждает, что не хватает памяти:

 
"Скетч использует 3 110 байт (9%) памяти устройства. Всего доступно 32 256 байт.
Глобальные переменные используют 1 615 байт (78%) динамической памяти, оставляя 433 байт для локальных переменных. Максимум: 2 048 байт.
Недостаточно памяти, программа может работать нестабильно."
 
А это только лишь 2 сигнала. Мне надо хотя бы 4 (в этом случае используется 147% динамической памяти)
 
Есть у кого пути решения?
 

/*******************************************************************************************************************************
Pin 6 IR-led (ИК-светодиод. Пин можно выбрать в файле IRremoteInt.h между 5,6,9,11,46 для Arduino Mega)
*******************************************************************************************************************************/
#include <IRremote.h> // Подключение библиотеки для работы с IR-светодиодом
IRsend irsend;

unsigned int ConditionerOff[349] = {500,17840,3000,9000,500,500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,1500,500,1500,500,500,500,1500,500,1500,500,1500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,1500,500,3000,3000,9000,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,1500,500,500,500,1500,500,1500,500,1500,500,1500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,3000,3000,9000,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,500,500,1500,500,1500,500,1500,500,500,500,1500,500,1500,500,1500,500,1500,500,1500,500,1500,500,1500,500,1500,500,500,500,500,500,500,500,1500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,500,500,1500,500,1500,500,1500,500,500,500,1500,500,500,500,500,500,500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,1500,500
};
unsigned int ConditionerON[349] = {500,17932,3000,9000,500,500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,1500,500,500,500,500,500,1500,500,1500,500,1500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,1500,500,1500,500,1500,500,3000,3000,9000,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,1500,500,500,500,1500,500,1500,500,1500,500,1500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,3000,3000,9000,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,500,500,500,500,1500,500,1500,500,500,500,1500,500,1500,500,1500,500,1500,500,1500,500,1500,500,1500,500,1500,500,500,500,500,500,500,500,1500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,500,500,1500,500,1500,500,1500,500,500,500,1500,500,500,500,500,500,500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,1500,500,1500,500,1500,500
};
unsigned int ConditionerTurboOff[349] = {500,17212,3000,9000,500,500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,1500,500,500,500,500,500,1500,500,1500,500,1500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,1500,500,1500,500,1500,500,3000,3000,9000,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,500,500,500,500,1500,500,1500,500,500,500,1500,500,1500,500,1500,500,1500,500,1500,500,1500,500,1500,500,1500,500,500,500,500,500,500,500,1500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,500,500,1500,500,1500,500,1500,500,500,500,1500,500,500,500,500,500,500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,1500,500,1500,500,1500,500
};
unsigned int ConditionerTurboON[349] = {500,17228,3000,9000,500,500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,1500,500,500,500,500,500,1500,500,1500,500,1500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,1500,500,1500,500,1500,500,3000,3000,9000,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,500,500,1500,500,500,500,1500,500,500,500,1500,500,1500,500,1500,500,1500,500,1500,500,1500,500,1500,500,1500,500,1500,500,1500,500,500,500,1500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,500,500,1500,500,1500,500,1500,500,500,500,1500,500,500,500,500,500,500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,1500,500,1500,500,1500,500
};
void setup(){
}; 

void loop(){
 irsend.sendRaw(ConditionerOff, 349, 38);
delay (5000);


 irsend.sendRaw(ConditionerON, 349, 38);
delay (5000);

 irsend.sendRaw(ConditionerTurboON, 349, 38);
delay (5000);


 irsend.sendRaw(ConditionerTurboOff, 349, 38);
delay (5000);
};

 

 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Написать свою посылалку и хранить не в raw, а в виде бинарных данных.

Mariev
Offline
Зарегистрирован: 17.08.2016

Покажусь немного наглым, но сначала хотел узнать - может у кого есть уже посылала, чтобы не изобретать велосипед дважды

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Mariev пишет:
Покажусь немного наглым, но сначала хотел узнать - может у кого есть уже посылала, чтобы не изобретать велосипед дважды

Давай порассуждаем:

1. У каждого кондиционера свой протокол управления. Простой пример, DAIKIN разных моделей имеет разное количество пересылаемой информации. Это факт, потому что я сейчас этим занимаюсь. В моем это две посылки по 64 бита и одна в 152 бита. В других моделях - другое количество.

2. В твоем сообщении нет названия/модели кондиционера/сплит-системы.

Выводы (мои, разумеется): Для какой модели нужна посылалка не указано. Значит и ответ дать нереально.

PS И да, у меня нет посылалки, мой DAIKIN пока еще в доме только появился и я еще не занимался софтом. Пока что отлаживаю плагин для Saleae LLC, который будет это протокол распознавать по частям. И уже потом что то появится для управления. Не факт, что на Ардуине, скорее на арме, но это еще когда будет, даже я не знаю :)

Надесь мой ответ будет понят правильно, как попытка помочь, т.е. призыв сформулировать вопрос более корректно и понятно. А то в последнее время появилось множество гопоты, которая на любой ответ сразу даёт в зубы. Потому терять впустую время на пустые разговоры - нет никакого желания.

 

Mariev
Offline
Зарегистрирован: 17.08.2016

Спасибо за уделено внимание.
Кондиционер Samsung.

Для моих целей я не хотел расшифровывать протокол передачи, ограничившись 4 сигналами (вкл/выкл с установленными настройками и вкл/выкл турбо режима).
Но при этом не учел размер сигналов, так как не знал точно их длину.

Поэтому возник - вопрос как другие люди решают эту проблему?
Если обязательно расшифровать протокол передачи и писать свою программу для определенной модели кондиционера, тогда придется это делать.
Но я думал есть варианты по проще, например использование другой библиотеки для отправки raw сигнала, кодировка значений интервалов в двоичный код для разгрузки динамической памяти не расшифровывая сам протокол или что-то в этом роде.

Думаю не суть в модели кондиционера и его протоколе. Если есть рабочий вариант для другого кондиционера - будет легче его переделать, чем делать все с нуля.

no_nic
Offline
Зарегистрирован: 12.06.2016

А можно в двух словах схему таких манипуляций с разными кодировками? Есть raw коды считанные с пульта, их я так понял нужно перекодировать в бинарные и зашить в программу передатчика?

bolotin.denis
bolotin.denis аватар
Offline
Зарегистрирован: 15.09.2013

Mariev посмотри, может пригодится. http://pastebin.com/8A5SGAfB