Работа со сплитом. ИТОГ
- Войдите на сайт для отправки комментариев
Втр, 10/11/2015 - 20:54
Коллеги! Друзья!
Перелопатил не один форум, посмотрел все возможные темы на форуме, но интересует один вопрос - кто-нибудь сделал управление сплитом по ИК?
Затык в отправке RAW в сплит. Не хочет принимать. Но самое стремное то, что не меняя параметров на пульте, каждый раз приходит на приемник разные данные, даже если постоянно нажимаю включить (выключение закрываю что бы не счивался код). И наоборот.
Есть похожие темы, но суть не раскрывается:
http://arduino.ru/forum/programmirovanie/pult-du-dlya-split-sistemy-lessar
http://arduino.ru/forum/programmirovanie/nado-otpravit-ir-signal-s-arduino
Коллеги! Друзья!
Перелопатил не один форум, посмотрел все возможные темы на форуме, но интересует один вопрос - кто-нибудь сделал управление сплитом по ИК?
Затык в отправке RAW в сплит. Не хочет принимать. Но самое стремное то, что не меняя параметров на пульте, каждый раз приходит на приемник разные данные, даже если постоянно нажимаю включить (выключение закрываю что бы не счивался код). И наоборот.
Есть похожие темы, но суть не раскрывается:
http://arduino.ru/forum/programmirovanie/pult-du-dlya-split-sistemy-lessar
http://arduino.ru/forum/programmirovanie/nado-otpravit-ir-signal-s-arduino
А в пульте случайно нету никаких устройств/датчиков?
Может часы, таймер или датчик температуры, нет?
Как на всех пультах новых сплитов есть часы, таймер. Про дачики не знаю, пойду искать манул)
Разные коды, возможно приёмник с другой частотой, потому и коды разные.
Как на счёт выложить несколько рав кодов, если длинные, хотя бы начало, байтов 40-50.
Только для одной и той же кнопки. И производителя сплита.
Производитель: LESSAR
Вот какие коды считались при нажатии пульта на включение (напомню, только включение, выключал пульт не в видимости приёмника):
Включение 1
B24D9F60 (32 bits)
Raw (100): 4350 -4300 500 -1650 500 -550 500 -1600 500 -1600 500 -600 500 -550 500 -1600 500 -550 500 -550 500 -1650 500 -550 500 -550 550 -1550 500 -1650 550 -500 500 -1600 500 -1650 500 -550 550 -500 500 -1600 500 -1650 450 -1650 500 -1600 600 -1550 500 -550 500 -1600 500 -1600 600 -500 500 -550 500 -550 500 -550 500 -550 500 -1650 500 -1600 500 -1600 600 -500 550 -500 500 -1600 550 -500 500 -550 500 -550 500 -600 500 -550 500 -1600 500 -1650 500 -550 500 -1600 500 -1600 500
Включение 2
B24D9F60 (32 bits)
Raw (100): 4300 -4350 500 -1650 550 -500 550 -1550 600 -1550 500 -550 550 -500 550 -1550 600 -450 600 -500 550 -1550 600 -450 600 -450 600 -1550 550 -1550 600 -450 600 -1550 550 -1550 500 -550 600 -450 600 -1550 550 -1550 550 -1550 600 -1550 550 -1550 550 -500 600 -1500 500 -1650 550 -500 600 -450 600 -450 600 -500 550 -500 550 -1550 600 -1500 600 -1550 550 -500 550 -500 600 -1500 600 -500 550 -500 550 -500 500 -550 500 -550 600 -1550 500 -1600 550 -500 600 -1500 600 -1550 550
Включение 3
B24D9F60 (32 bits)
Raw (101): 4400 -4300 500 -1600 500 -550 600 -1550 550 -1550 600 -450 600 -450 500 -1650 550 -500 550 -500 600 -1500 600 -500 550 -500 550 -1550 600 -1500 600 -500 550 -1550 550 -1550 600 -450 500 -600 550 -1550 500 -1600 600 -1550 550 -1550 550 -1550 600 -500 550 -1550 550 -1550 600 -450 500 -600 550 -500 550 -500 550 -500 600 -1500 600 -1550 550 -1550 600 -450 600 -450 500 -1650 550 -500 550 -500 600 -450 500 -550 600 -500 550 -1550 600 -1500 600 -500 550 -1550 550 -1550 600 -5050
Код, которым отправлял код на сплит с Arduino (у меня есть ПК приемник, который на эту отправку срабатывает диодом):
Посмотрел мануал, на моей модели нет датчика температуры в пульте (у Лессара функция называется Follow me)
Протокол очень похож на NEC http://www.sbprojects.com/knowledge/ir/nec.php
В скетче в массиве Вы в начале убрали 4400, а это принципиально. Там должно быть два раза 4400
Я тоже на этом подвис. Однако подключил юсб логический анализатор обнаружил...
что пульт ( митсубиши) отсылает не один пакет!!!
Все обследованные кнопки осылали по два пакета.
С довольно большим интервалом.
Не исключаю, что пакетов может быть и больше.
Т.е. повторить два раза первую цифру из массива? Пробовал несколько скетчей для считывания, NEC не определился((
Индикатором с диодом вижу только один отправленный массив. Конечно это все на глаз)
NEC это просто похоже, потому что адрес посылается прямой и инверсный, затем также команда, прямая и инверсная. Всего три адреса и три команды.
Сначала 4400 и скетч сюда, потом будем думать дальше, если не получится.
Считал код:
B24D9F60 (32 bits)
Raw (101): 4350 -4300 500 -1650 500 -550 550 -1550 600 -1500 500 -600 500 -550 550 -1550 600 -450 600 -450 500 -1650 550 -500 500 -550 600 -1500 500 -1650 550 -500 550 -1550 500 -1650 550 -500 550 -500 550 -1550 500 -1650 500 -1600 500 -1600 600 -1550 550 -500 500 -1600 600 -1500 500 -600 500 -550 500 -550 500 -550 500 -550 600 -1550 500 -1600 500 -1600 500 -550 600 -500 500 -1600 500 -550 550 -500 500 -550 500 -600 550 -500 500 -1600 550 -1550 500 -600 550 -1550 550 -1550 600 -5050
Добавлял в скетч и 4400 (не убирая 4350), добавлял 4350 (вместо первого 4400). Убирал первую цифру 4350 (добавляя 4400) и добавлял 4350. Результата 0 :(
Один из стекчей:
Я писал, что 4400 должно быть 2 раза, а оба скетча содержат один или три раза.
Никакой разницы между 4350 и 4400 нет, можно использовать одно и тоже значение.
Так у меня в коде пришло 2 раза 4350 и 4300. В прошлом посте я к ним добавил в начало 4400.
Сейчас попробовал с другим кодом:
B24D9F60 (32 bits)
Raw (100): 15670 4300 -4350 600 -1550 500 -550 500 -1600 500 -1600 600 -500 550 -500 500 -1600 500 -550 500 -550 500 -1650 500 -550 550 -500 500 -1600 500 -1650 500 -550 500 -1600 500 -1650 500 -550 500 -550 550 -1550 500 -1650 500 -1600 500 -1600 500 -1650 550 -500 500 -1600 500 -1600 500 -600 500 -550 550 -500 500 -550 500 -550 500 -1650 500 -1600 500 -1600 500 -600 450 -600 550 -1550 500 -550 500 -550 500 -550 500 -600 500 -550 500 -1600 500 -1600 500 -600 500 -1600 500 -1600 500
Скетч в который взял исходный код, убрал минусы, заменил пробелы на зпт и добавил в начало 4400:
Я повторю ещё раз, 4400 должно быть ДВА (2!) раза.
Не надо в каждом скетче использовать разные значения, последовательность для начала нужно использовать одну и ту же.
Спасибо за подсказки и терпение! :) Добавил 2 раза 4400. Результат тот же :(
Я понял, мы теряем время. Повторю первое, что я предложил, а я пойду заниматься своими делами, увы, моё время не бесконечно.
"Протокол очень похож на NEC http://www.sbprojects.com/knowledge/ir/nec.php
В скетче в массиве Вы в начале убрали 4400, а это принципиально. Там должно быть два раза 4400"
Если Вам это непонятно, то я Вам не смогу помочь, увы.
Делал подобное на сплит. Если у Вас при одинаковых командах с пульта получаются RAW разной длинны, то скорее всего сграбленная команда просто не помещается в массив (в моём случае длинна была 212). Какое у Вас значение в библиотеке IRRemote присваивается RAWBUF ?
Добавлю свои 5 копеек. Я начинал изучение теммы протокола кондиционеров, но в результате мне хватилло функций самого устройства. Как я понял у большинства кондиционеров протокол оченнь похож. Посылки отличаются от "телевизонных", в том числе, принцириально большей длиной. Возможно Вам поможет ссылка н сайт програмы предназначенной для анализа протоколов инфракрасных пультов управления. На этой странице как раз разбирают протокол пульта кондиционера Panasonic, в нем длина посылки 216 в двух кадрах, что, видимо, подтверждает слова pka_ua.
http://www.analysir.com/blog/2014/12/27/reverse-engineering-panasonic-ac-infrared-protocol/
Возможно наверное, обрести и использовать саму програму.
Как я понял у большинства кондиционеров протокол оченнь похож.
Угу. И не только кондиционеров. Это и зовется "протокол NEC". Это стандарт, один из возможных стандартизированых "дэ факто" вариантов. И по стандарту отправка начинается импульсом порядка 9 мс, потом пауза типа 4.4мс. Без этого никак, что и продемонстрировал ТС.
ЗЫ. В очередной раз просто "убит" подходом в ардуиновской либе. Хороше что я в IRremote.h никогда не смотрел, теперь точно и не буду! Массив длительностей... писец.... Выдрал из своего рабочего проекта.
В лупе для начала отправки B24D9F60 пишем типа OutIR(0xb2,0x9f);
В лупе вызовы ProcessOutIR() часто в процессе отправки, пока не вернет true, например for(;!ProcessOutIR();)
pka_ua спасибо!
В IRremote.h RAWBUF стоял по-умолчанию 100. Поставил 216 (212 пробовал):
#define RAWBUF 216 // Length of raw duration buffer
При считывании не всегда попадался RAW длинной 200 (1 раз из 5), взял первый попавшийся и, О ЧУДО, сплит включился! Теперь нужно раскуривать составляющую кода:
Raw (200): 1854 4350 -4300 550 -1600 550 -500 550 -1550 600 -1500 600 -450 600 -500 550 -1550 600 -450 600 -450 600 -1550 550 -500 550 -500 600 -1500 600 -1550 550 -500 600 -1500 600 -1550 550 -500 550 -500 600 -1500 600 -1550 550 -1550 600 -1500 600 -1550 550 -500 550 -1550 600 -1500 600 -500 550 -500 550 -500 600 -450 600 -450 600 -1550 550 -1550 600 -1500 600 -450 600 -500 550 -1550 600 -450 600 -450 600 -450 600 -500 550 -500 500 -1600 600 -1500 600 -500 550 -1550 600 -1500 600 -5050 4350 -4350 550 -1550 600 -450 550 -1600 500 -1600 600 -450 600 -450 600 -1550 550 -500 550 -500 600 -1500 600 -500 550 -500 550 -1550 600 -1500 600 -500 550 -1550 550 -1550 600 -450 600 -500 500 -1600 500 -1600 600 -1550 550 -1550 500 -1600 600 -450 600 -1550 500 -1600 550 -500 550 -500 600 -500 500 -550 550 -500 500 -1600 550 -1600 500 -1600 500 -550 500 -550 500 -1650 500 -550 500 -550 500 -550 500 -550 500 -550 500 -1650 500 -1600 500 -550 500 -1650 500 -1600 500
Как я успел узнать, RAWBUF это не размер посылки, это размер буфера для приема команд. Чем он длинне тем более длинные посылки входят. Минимальный размер буфера необходим немного разный из за немного разной по времени длительности команд в силу разной длительности нулей и едениц в команде. И немного разного состава разных команд. Для команд одного кондиционера.
Похоже у Вас, AKa, получилось значение "на грани". В него могут не помещаться некоторые команды. Стоит, наверно, еще немного увиличить буфер. Пишут, что для кондиционеров с длинной посылкой, а у вас такой, стоит использовать значения RAWBUF 230-255 . 255 максимально возможное значение.
Я у себя ставил длину RAWBUF 300 "шоб не думать" :) , там памяти на Arduino Pro Mini хватает.
С реверс-инжинирингом команд я не заморачивался, поскольку мне нужен был определённый режим без вариантов.
Удачи!
Я у себя ставил длину RAWBUF 300 "шоб не думать" :) , там памяти на Arduino Pro Mini хватает.
С реверс-инжинирингом команд я не заморачивался, поскольку мне нужен был определённый режим без вариантов.
Удачи!
Пишут, что в результате RAWBUF хранится в одной 8 битной ячейке, максимум 255. Если так, наверно компилятор записывал туда максимальное значение 255. Но теперь мы знаем что если написать значение больше, по крайней мере беды не произойдет. А по умолчанию значение меньше, да, для сокращения использования памяти. Для большенства применений хватает значения по умолчанию.