Надо отправить IR сигнал с ардуино

ЕвгеничЪ
Offline
Зарегистрирован: 30.09.2013

Клапауций пишет:

ЕвгеничЪ пишет:

Как же как же заставить включаться и выключаться кондей, ибо все было задуманно именно из-за него.

вы точно уверены, что пульт кондея выдаёт одну команду, а не, управляющий всей кондейной халабудой, пакет команд?

честно говоря сложно сказать, но если верить данным в формате NEC, то команда повторяется, при этом RAW данные разные...

hugoboss317
Offline
Зарегистрирован: 21.03.2013

igorcds пишет:

Крым. тоже землячек. правда я ща под иркутском....:) а так живу под Керчью :)

В Горностаевке или в Багерово))?  

ЕвгеничЪ пишет:

команда повторяется, при этом RAW данные разные...

Я бы остановился на добивании этого:

irsend.sendNEC(0x9040060A, 32);

 

igorcds
Offline
Зарегистрирован: 03.12.2013

:) щелкино:)

согласен- лучше добивать nec... я когда пытался свой RAW запустить считывал четыре кноки кода RAW, потом принимал эти коды второй ардуино( переданные ардуино), ну и все на печать, маркер в зубы, помечаешь в чем отличие в оригинальном пульте разными кнопками между и сравниваешь с отправленном ардуино и т.д

ЕвгеничЪ
Offline
Зарегистрирован: 30.09.2013

Господа, а как можно добить NEC, если кондиционер игнорирует? Ну частоту можно перебрать от 36 до40 верно? А еще какие гайки можно покрутить?

igorcds
Offline
Зарегистрирован: 03.12.2013

считайте пультом несколько раз код. кроме FFFFFFFF, КОД ОДИНАКОВ ВСЕГДА?

ЕвгеничЪ
Offline
Зарегистрирован: 30.09.2013

Да, NEC код одинаков всегда для кнопки вкл/выкл, точнее чередуются два варианта кодов, один, видимо на вкл, а другой на выкл.

При этом RAW данные как правило всегда отличаются, т.е. несколько нажатий на вкл совпадают NEC кодом и отличаются RAW данными. 

А вот кнопка повышения температуры кондиционера при каждом нажатии выдает разный NEC код, видимо это не просто +1 к значению температуры, а именно передача конкретного значения.

igorcds
Offline
Зарегистрирован: 03.12.2013

поднесите впритык к морде кондея ир диод и пробуйте отправлять так:

	#include <IRremote.h>
	IRsend irsend;
	void setup()
	{
          Serial.begin(9600);
	  irrecv.enableIROut(38);
	  }
	void loop()
          {
	    irsend.sendNEC(0x9090060A,32); 
	     delay(5000);
	              }

 

ЕвгеничЪ
Offline
Зарегистрирован: 30.09.2013

Вечером доберусь до кондея и попробую. Обязательно отпишусь. Спасибо!

igorcds
Offline
Зарегистрирован: 03.12.2013

что то у вас NEC разный - 9040060A и еще видел 9090060A?

ваши 79 пост и 85 пост. может быть всеж таки 9040060A?

пробуйте и тот и этот код.

добавте в строку 11

irsend.sendNEC(0x9040060A, 32);

чтобы вещало два кода сразу. считайте еще раз 10 пульт. и попробуйте все значения, т.е  irsend.sendNEC(0xваш код, 32); добавте несколько раз(все коды что покажет те и вбейте) и delay между ними  в 1 секунду

ЕвгеничЪ
Offline
Зарегистрирован: 30.09.2013

igorcds пишет:

что то у вас NEC разный - 9040060A и еще видел 9090060A?

ваши 79 пост и 85 пост. может быть всеж таки 9040060A?

это одна кнопка чередует два кода на включение и выключение кондиционера, вечером поробую сразу оба кода забацать в скетч...  и даже больше ))

 

Вот тут чего нагуглил про ардуину, NEC протокол и кондиционеры Gree (у меня как раз эта фирма):

Еще в ардуину можно залить пример IRrecvDump из комплекта irremote. Тогда потыкав пультом в приемник можно узнать, что использется протокол NEC. Неприятный момент состоит в том, что либа нормально поддерживает работу с посылками до 32 битов, а кондей хочет целых 35.

http://stinky.su/index.php/2013/08/16/ocherednaya-upravlyalka-kondicionerom-po

 

это не может быть разгадкой?

igorcds
Offline
Зарегистрирован: 03.12.2013

попробуйте два скетча с двумя разными кодами(выше написанные), т.е один скетч с одим кодом, попробовали, если не пошло- то второй скетч со вторым кодом. попробуйте изменить 32 на 35(но скорее всего надо будет чинить библиотеку)...если не пойдет ищите специалиста по библиотеки, или сами попытайтесь разобраться. пробуйте - два скетча с двумя кодами, потом те же два скетча, только вместо 32-35 бит....

igorcds
Offline
Зарегистрирован: 03.12.2013

может быть и разгадка, тогда вам к гуру си++ или гуру библиотеки irremote, чтобы или в си++ сделали или подправили библиотеку. в той статье сказано, что бит управлением питанием идет в начале посылки, т.е поидее его можно передать,но только как все это увязать воедино с 32бит.....попробуйте пока то что я вам понаписал....

igorcds
Offline
Зарегистрирован: 03.12.2013

не делайте все коды в одном скетче, по одному коду делайте, или через кнопки...чтобы вам проще было - без кнопок - один скетч-один код, второй скетч-второй код,и т.д

igorcds
Offline
Зарегистрирован: 03.12.2013

кстати в той статье есть схема IR передатчика, можете ее соорудить. Я такую же сделал себе, работает изумительно

ЕвгеничЪ
Offline
Зарегистрирован: 30.09.2013

Только что попробовал все Вами предложенное, результат нулевой((

Для того, что бы поднести ардуину впритык к кондею пришлось завести нетбук, сразу же нетбуком награбил несколько раз кнопку вкл/выкл. Вот что получил:

 

 

9A40060A
Decoded NEC: 9A40060A (32 bits)
Raw (74): -25264 8950 -4450 650 -1600 700 -500 700 -500 700 -1600 700 -1600 650 -550 650 -1600 700 -500 700 -500 700 -1600 650 -550 650 -550 650 -550 650 -500 700 -500 700 -500 700 -500 700 -500 700 -500 700 -500 700 -500 700 -1600 650 -1600 700 -500 700 -500 700 -500 700 -500 700 -500 700 -1600 650 -500 700 -1600 700 -500 700 -500 700 -1600 650 -550 650

8A40060A
Decoded NEC: 8A40060A (32 bits)
Raw (74): 21520 8950 -4450 650 -1600 700 -500 700 -500 700 -500 700 -1600 650 -550 650 -1600 700 -500 700 -500 700 -1600 700 -500 650 -550 650 -550 650 -550 650 -550 650 -500 700 -500 700 -500 700 -500 700 -500 700 -500 700 -1600 650 -1600 700 -500 700 -500 700 -500 700 -500 700 -500 700 -1600 650 -550 650 -1600 700 -500 700 -500 700 -1600 650 -550 650

9A40060A
Decoded NEC: 9A40060A (32 bits)
Raw (74): 12718 8950 -4450 650 -1600 700 -500 700 -500 700 -1600 650 -1650 650 -550 650 -1600 700 -500 700 -500 700 -1600 650 -550 650 -550 650 -550 650 -500 700 -500 700 -500 700 -500 700 -500 700 -500 700 -500 650 -550 650 -1650 650 -1600 700 -500 700 -500 700 -500 700 -500 700 -500 700 -1600 650 -500 700 -1600 700 -500 700 -500 700 -1600 650 -550 650

8A40060A
Decoded NEC: 8A40060A (32 bits)
Raw (74): -13076 8950 -4450 650 -1600 700 -500 700 -500 700 -500 650 -1650 650 -550 650 -1600 700 -500 700 -500 700 -1600 650 -550 650 -550 650 -550 650 -500 700 -500 700 -500 700 -500 700 -500 700 -500 700 -500 700 -500 650 -1650 650 -1600 700 -500 700 -500 700 -500 700 -500 700 -500 700 -1600 650 -550 650 -1600 700 -500 700 -500 700 -1600 650 -550 650

9A40060A
Decoded NEC: 9A40060A (32 bits)
Raw (74): 12588 8950 -4450 650 -1600 700 -500 700 -500 700 -1600 650 -1650 650 -500 700 -1600 700 -500 700 -500 700 -1600 650 -550 650 -500 700 -500 700 -500 700 -500 700 -500 700 -500 700 -500 700 -500 700 -500 700 -500 650 -1650 650 -1600 700 -500 700 -500 700 -500 700 -500 650 -550 650 -1600 700 -500 700 -1600 700 -500 700 -500 700 -1600 650 -550 650

8A40060A
Decoded NEC: 8A40060A (32 bits)
Raw (74): -22484 9000 -4400 700 -1600 700 -500 700 -500 650 -550 650 -1650 650 -500 700 -1600 700 -500 700 -500 650 -1650 650 -550 650 -500 700 -500 700 -500 700 -500 700 -500 700 -500 700 -500 700 -500 700 -500 650 -550 650 -1600 700 -1600 700 -500 700 -500 700 -500 650 -550 650 -550 650 -1600 700 -500 700 -1600 700 -500 700 -500 650 -1650 650 -550 650

9A40060A
Decoded NEC: 9A40060A (32 bits)
Raw (74): -28070 8950 -4450 650 -1600 700 -500 700 -500 700 -1600 650 -1650 650 -550 650 -1600 700 -500 700 -500 700 -1600 650 -550 650 -550 650 -550 650 -500 700 -500 700 -500 700 -500 700 -500 700 -500 700 -500 650 -550 650 -1650 650 -1600 700 -500 700 -500 700 -500 700 -500 700 -500 650 -1600 700 -500 700 -1600 700 -500 700 -500 700 -1600 650 -550 650

8A40060A
Decoded NEC: 8A40060A (32 bits)
Raw (74): 8616 8950 -4400 700 -1600 700 -500 700 -500 700 -500 700 -1600 650 -550 650 -1600 700 -500 700 -500 700 -1600 650 -550 650 -550 650 -550 650 -500 700 -500 700 -500 700 -500 700 -500 700 -500 700 -500 700 -500 650 -1650 650 -1600 700 -500 700 -500 700 -500 700 -500 700 -500 700 -1600 650 -550 650 -1600 700 -500 700 -500 700 -1600 650 -550 650

 

ЕвгеничЪ
Offline
Зарегистрирован: 30.09.2013

Как видимо коды включения и выключения слегка изменились, но они стабильны, возможно смена оборудования (компа) дало какой то эффект. И рав данные стали достаточно стабильные. Наверно надо пробовать пулять рав. Что скажете?

Постараюсь попробовать завтра, из-за работы совершенно нет времени на эксперименты((

igorcds
Offline
Зарегистрирован: 03.12.2013

попробуйте raw. в рав массиве убираете первое значение массива, попробуйте без первого значения и с первым значением

igorcds
Offline
Зарегистрирован: 03.12.2013

а вы нек пробовали который награбили поновой?

ЕвгеничЪ
Offline
Зарегистрирован: 30.09.2013

Да, конечно пробовал новый NEC. Очень интересно почему из-за смены компьютера получаем новые результаты. Или может быть дело не в этом, но на прежнем компе коды NEC тоже были стабильны, а вот raw "прыгал".

igorcds, а Вы не в курсе почему первое значение в раве всегда разное? это же вроде как сигнал о начале передачи? ну что то типа "алле, начинаю передавать".

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

Насколько помню это время паузы, потому его использовать не нужно

ЕвгеничЪ
Offline
Зарегистрирован: 30.09.2013

kisoft пишет:
Насколько помню это время паузы, потому его использовать не нужно

интересно почему оно всегда разное и влияет ли это как то на результат... 

хотя может это просто грубо говоря время "побудки" пульта после простоя...

igorcds
Offline
Зарегистрирован: 03.12.2013

ЭТО ПУЛЬТ ГОВОРИТ- приговся, я начинаю вещать, длительность импульса может быть разная(по крайней мере у меня, ну и судя по форумам- у многих).

пробуйте в разных вариациях, включите кондей- вещайте, отключите -вещайте, вдруг что нибудь и нащупаете.

изучите как пользоваться в ардуино кнопками, залейте в нее коды и используя кнопки вещайте....это чтобы не перезаливать код постоянно(или перезаливайте)....попробуйте RAW считанный по новой, только приготовте его правильно....

эксперементируте, и удача улыбнется вам :)

igorcds
Offline
Зарегистрирован: 03.12.2013

обратите внимание - в RAW изменяется только первое значение, а второе и последуещее остаются неизменными,  т.е - основное тело кода начинается со второго элемента, и еще, не знаю - может быть поможет - я опробовал много пультов на считывание(кондеи тоже были) и почемуто более 68 элементов в массиве не было....может убрать чуток в хвосте, чтобы было к примеру 68(у вас 74, т.е  минус 6 и скорее всего минус первый элемент)....или поищите другую библиотеку на irremote....

купите себе вторую ардуино, вам будет проще нащупать.

про покупки - я покупаю на ебай у продавца alice1101983  по крайней мере адекватная цена, и все вопросы по косякам решаемые и доставка до иркутска 20 дней....

igorcds
Offline
Зарегистрирован: 03.12.2013

а другие данные считывает, может и не за смены компа, может и влияние лампы дневного света, и питания компа и т.д

igorcds
Offline
Зарегистрирован: 03.12.2013

и желательно вылажите скетчи кодов которые вещали и RAW и NEC. И чтобы код не засорял экран на форуме при вставке кода используйте вкладку дополнительно, там есть настройки скрывающие код.

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

ЕвгеничЪ пишет:

kisoft пишет:
Насколько помню это время паузы, потому его использовать не нужно

интересно почему оно всегда разное и влияет ли это как то на результат... 

хотя может это просто грубо говоря время "побудки" пульта после простоя...

Уфф попкорн кончился, не хотелось вам мешать, вы тут уже такого нагородили вдвоем.

Время паузы - это время от начала измерения (или от предыдущего измерения, не суть важно) ДО начала полезного кода, т.е. до того момента, как Вы нажали кнопку на пульте. Это не зависит ни от компа, ни от погоды, нажимайте всегда с одной и той же паузой и будет у Вас примерно одно и то же число (ну примерно).

После времени паузы идут измерения так называемых MARK и SPACE (в терминах библиотеки IRemote), которые означают MARK - наличие несущей частоты, а SPACE наоборот - пауза между частотами.

Вот здесь теория достаточно доступно описана: http://www.sbprojects.com/knowledge/ir/index.php там же рядом можно найти описание кода NEC, например.

Посему, если перепутать MARK со SPACE, то приемник сойдет с ума, точнее не поймет китайской грамоты. Следовательно, нужно отправить RAW код без первого числа, потому что он, правильно, нафиг не нужно. Bingo!

Это так и никак иначе (напоминаю я говорю про библиотеку IRemote).

А еще неплохо время от времени заглядывать в исходники библиотек, чтобы не раздувать фантазии.

Удачи! Пойду за попкорном..

 

ЕвгеничЪ
Offline
Зарегистрирован: 30.09.2013

kisoft спасибо за информацию, познавательно... но поймите, не всем так просто даются внутренности библиотек, если бы исходники были просты и понятны мне, я бы даже не регестрировался тут :)

сегодня, если время позволит, постараюсь подать рав на кондиционер...

igorcds
Offline
Зарегистрирован: 03.12.2013

я всего 3 месяца в ардуино и без лишней скромности - балбес в вопросе :) рассказываю то что знаю и личные  предполжения :) не спорю - скорее всего фантазия... но чесно говоря всегда думал - первое значение в RAW коде, которое имеет опреденную длительность - сигнал передатчика о начале вещания кода...по крайней мере многие форумы об этом говорят...

вот к примеру

http://habrahabr.ru/post/189248/

а так-

на цифр осциллографе видно, что только в случае использования команды IROut есть определенная закономерность между тем что передается и принимается(имею ввиду идентичнось передачи пульта и передача того же кода с ардуино) и прием соответственно....ну да хер с ним.... почему при передачи RAW массива пультом длительность(или значение первого символа в массиве-разное) разная, но отработка самого кода кнопки пульта (или набора длительностей команды этой же кнопки) и дальше происходит по заднему фронту первого импульса(полярность отрицательная - можно сказать, что это похоже на паузу....) по моему важно не длительность стартового импульса, а точное местоположение заднего фронта этого стартового импульса именно в данный момент времени... может я и перемудрил...при наличии IROut - mark равно значению указанного в ()....IROut(38) 38 кГц....если без IROut - значение частоты плавает( в пределах 9 кГц)...т.е нет модуляции на несущей частоте....передача происходит на положительной полярности, а прием на отрицательной полярности и соответствие увидел такое-задний фронт передатчика соответствует переднему фронту приемника и к примеру три- четыре логических нуля по длительности может в сумме соответсвовать логической единице приемника...наверное это и есть процесс деманипуляции... в итоге я пока в ступоре и раздумьях...пока эксперементы и понимание процесса.... но вот как увязать процесс понимания работы библиотеки программирования и наблюдений......

igorcds
Offline
Зарегистрирован: 03.12.2013

понятно, что логический ноль может иметь длительность до 560 мксек, единица до 1550-1650 мксек.... и наверное скорее всего эти длительности в разных кодировках разные....и по идеи это зависит от частоты манипуляции...и деманипуляции соответственно....и наверное поэтому в библиотеку вложено уже готовые протоколы вещания и сони и т.д...т.е готовый алгоритм отработки... 

прошу меня извенить если я не прав, я просто пытаюсь понять и увидеть как и что работает

 

igorcds
Offline
Зарегистрирован: 03.12.2013

спасибо за информацию, а у вас нет подобной информации на русском языке, или ссылки?

конечно воспользуюсь переводчиком, но хотелось бы если есть и по русски посмотреть :)

igorcds
Offline
Зарегистрирован: 03.12.2013
ЕвгеничЪ
Offline
Зарегистрирован: 30.09.2013
#include <IRremote.h>
	IRsend irsend;
	 
	unsigned int powerOn[74] = {9000, 4400, 700, 1600, 700, 450, 700, 500, 700, 1600, 700, 1600, 700, 500, 700, 1600, 700, 450, 750, 1550, 700, 1600, 700, 1600, 700, 500, 650, 500, 700, 500, 700, 500, 700, 500, 700, 500, 700, 500, 700, 500, 700, 500, 700, 500, 700, 1600, 650, 1600, 700, 500, 700, 500, 700, 500, 700, 500, 700, 500, 700, 1550, 700, 500, 700, 1600, 700, 500, 750, 450, 700, 1600, 700, 500, 700, 11408, 9000, 4400, 700, 1600, 700, 450, 700, 500, 700, 1600, 700, 1600, 700, 500, 700, 1600, 700, 450, 750, 1550, 700, 1600, 700, 1600, 700, 500, 650, 500, 700, 500, 700, 500, 700, 500, 700, 500, 700, 500, 700, 500, 700, 500, 700, 500, 700, 1600, 650, 1600, 700, 500, 700, 500, 700, 500, 700, 500, 700, 500, 700, 1550, 700, 500, 700, 1600, 700, 500, 750, 450, 700, 1600, 700, 500, 700};
	void setup() 
    {	 
	Serial.begin(9600);
    irsend.enableIROut(40);
	}
	void loop() 
       {
	       irsend.sendRaw(powerOn, 74, 32);
	       delay (5000);
	   }

Вот такой скетч использовал, менял коды, частоту, биты менял на 35, делал двойной код (читал, что кому то это помогло), пока что результата нет( копаю дальше))

ЕвгеничЪ
Offline
Зарегистрирован: 30.09.2013

а разные NEC данные при смене компа объясняются тем, что вместе с командой на влючение передается и значение температуры, так вот я просто на разной температуре включал как оказалось, в процессе экспериментов ее значение изменил не подумав...

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

ЕвгеничЪ пишет:

#include <IRremote.h>
	IRsend irsend;
	 
	unsigned int powerOn[74] = {9000, 4400, 700, 1600, 700, 450, 700, 500, 700, 1600, 700, 1600, 700, 500, 700, 1600, 700, 450, 750, 1550, 700, 1600, 700, 1600, 700, 500, 650, 500, 700, 500, 700, 500, 700, 500, 700, 500, 700, 500, 700, 500, 700, 500, 700, 500, 700, 1600, 650, 1600, 700, 500, 700, 500, 700, 500, 700, 500, 700, 500, 700, 1550, 700, 500, 700, 1600, 700, 500, 750, 450, 700, 1600, 700, 500, 700, 11408, 9000, 4400, 700, 1600, 700, 450, 700, 500, 700, 1600, 700, 1600, 700, 500, 700, 1600, 700, 450, 750, 1550, 700, 1600, 700, 1600, 700, 500, 650, 500, 700, 500, 700, 500, 700, 500, 700, 500, 700, 500, 700, 500, 700, 500, 700, 500, 700, 1600, 650, 1600, 700, 500, 700, 500, 700, 500, 700, 500, 700, 500, 700, 1550, 700, 500, 700, 1600, 700, 500, 750, 450, 700, 1600, 700, 500, 700};
	void setup() 
    {	 
	Serial.begin(9600);
    irsend.enableIROut(40);
	}
	void loop() 
       {
	       irsend.sendRaw(powerOn, 74, 32);
	       delay (5000);
	   }

Вот такой скетч использовал, менял коды, частоту, биты менял на 35, делал двойной код (читал, что кому то это помогло), пока что результата нет( копаю дальше))


В массиве две посылки. Ваши коды всегда начинаются с 9000 и 4400, это маркер начала кода. Соответственно перед второй посылкой, 11800 это не код, а пауза.
Сори, еду в маршрутке, почерк неровный.

ЕвгеничЪ
Offline
Зарегистрирован: 30.09.2013

kisoft т.е. перед второй посылкой надо что то убрать? убираем 9000 и 4000?

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

Не не не, делим массив на два, каждый должен начинаться с 9000 и 4400. 11408 нужно убрать. Затем нужно проанализировать оба массива, если они одинаковые, оставить один массив, его и забить в жерло кондиционера! В смысле его и передавать.

igorcds
Offline
Зарегистрирован: 03.12.2013

век живи век учись :)

leshak
Offline
Зарегистрирован: 29.09.2011

Лично мне не понятен "ход размылшений". Предположим что я ничего не знаю о библиотеке (обычно это "естественное состояние", нельзя знать все). Я смотрю семплы бибилиотеки.

Лично я бы, сделал два предположения исходя из здравого смысла:

1. Если библиотека сказала что "распознала код". И это NEC, то я бы пользовался соотвесвующей функцией sendNEC. Ну просто потому что это проще.
2. Если у библиотеки есть функция "sendRaw", то опять-таки из-здравого смысла, я бы предположил что умеет посылать массив который ЭТА ЖЕ библитоека и сама и сдампила. Без необходимости его править руками, решать "что убирать, а что нет". Логично предположить что одно из двух, что либо функция sendRaw сама игнорирует первую цифру, либо... первая цифра ни на что не влияет в процессе декодирования?

Ну и, само собой, я бы посмотрел ВСЕ примеры идущие с библиотекой. И поискал бы поиском, места где используются интересующие меня функции.

Поиск по исходникам примеров на слова sendNEC, sendRaw и неминуемо наткнулся бы на пример IRRecord.ino. В котором видно как отсылается массив rawCodes. Далее, естественно возник-бы вопрос "а откуда там берутся значения?". Ищем по коду примера где заполняется этот массив... там и комментарии, и даже в Serial выводи "Recived unknown code, saving as raw". Остается или разобраться как он работает, или тупо выдрать к себе функции с говорящими именами storeCode(), sendCode(). Которые УЖЕ готовы и написаны автором библиотеки. Потом, потихоньку, когда заработает можно повыкидывать из них лишнее (поддержку ненужных протоколов и т.п.) каждый раз проверяя "не поломалось ли..".

Или вообще, прежде чем начинать писать свой код. Взял этот пример целиком. Так как он умеет и записывать и отсылать по нажатию кнопки.

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

Про "первое значение".

Что такое RAW? Это, грубо говоря, запись "сколько времени был/небыл сигнал". Логично предположить, что время "сколько небыло сигнала" зависит от того сколько времени никто не нажимал кнопку? Тогда понятно "почему он разный" и "это ни на что не влияет". А вот вторая цифра, ~9000 - вот это и есть "приготовься". Он всегда одинаковый, причем это время именно "длина сигнала", а не "время его отсуствия" (в соседней ветке, по поводу IRRemote я рассказывал откуда берется эта цифра, и где ее можно поправить, если пульт немного не стандартный).

>что то у вас NEC разный - 9040060A и еще видел 9090060A?

Тут может быть две причины. Либо действительно "нечеткое декодирование" (помехи, длина кода неправильная, не совпадает частота), либо....

Это на самом деле один и тот же код. Код кнопки. А не "код команды".

Вряд ли это "код включения"/"код выключения". Пульт-то не знает текущие состояние кондишина. Он шлет "код кнопки", а что делать по этому поводу, это уже приемник решает.

А два кода возникают из попытки решить следующую задачу: приемнику нужно отличать две ситуации "кнопку нажали и держат", и "кнопку НАЖАЛИ многократно".

Разные пульты решают это про разном. Два основных подхода таки:

Подход 1: каждая кнопка имеет один код. При ее нажатии пульт посылает этот код, если кнопку продолжают держать, то он посылает особый "код повтора" (вот тот самый FFFFF). Который "один для всех кнопок". Который означает "удерживают кнопку, код которой мы уже послали". Если приемник опять получил "код кнопки", то он четко уверен что "это повторное нажатие", а не "удерживание".

 

Подход 2: каждая кнопка имеет ДВА кода (как правило отличающиеся одним битом). И пульт шлет их по очереди. Чередует их при каждом реальном нажатии на клавишу. Предположим. клавиша Power имеет коды A и B, тогда посылки будут означать:

A A A A A - нажали кнопку Power и держат
B B B B B - нажали кнопку Power и держат
A B B B B - нажали кнопку Power два раза. При втором нажатии - палец застрял на кнопке.
B A B A B - нажали кнопку Power 5-ть раз
B A A A B - нажали кратко, нажали подержали, еще раз нажали. 

 

 

ЕвгеничЪ
Offline
Зарегистрирован: 30.09.2013

leshak пишет:

>что то у вас NEC разный - 9040060A и еще видел 9090060A?

Тут может быть две причины. Либо действительно "нечеткое декодирование" (помехи, длина кода неправильная, не совпадает частота), либо....

Вряд ли это "код включения"/"код выключения". Пульт-то не знает текущие состояние кондишина. Он шлет "код кнопки", а что делать по этому поводу, это уже приемник решает.

 

мне кажется тут немного иная ситуация, если закрыть ИК диод на пульте рукой и начинать давить на кнопку вкл/выкл, то на экране пульта будет меняться статус как будто кондиционер либо включени либо выключен соответственно, но кондиционер при этом конечно же не будет реагировать...

так же можно ложно включить кондиционер и начинать менять режимы и температуру, и пульт это все будет отображать...

 

т.е. я так понимаю все таки пульт шлет именно нужные команды, а "увидит"  эти команды кондиционер или нет пульт особо не волнует...

 

 

 

 

ЕвгеничЪ
Offline
Зарегистрирован: 30.09.2013

igorcds

решил таки прикупить вторую ардуино в надежде, что это поможет заставить кондей включаться... скажите, это ведь и есть ардуино мини с юсб? я правильно понимаю? или это доп. модуль для ардуино мини?

 

http://www.ebay.com/itm/New-Mini-USB-Nano-V3-0-ATmega328-5V-16M-Micro-co...

ЕвгеничЪ
Offline
Зарегистрирован: 30.09.2013

Пробовал сейчас укорачивать рав, подчищать лишнее, пробовал 35 бит посылать, а так же награбил по новой коды... пока без результата... 

igorcds
Offline
Зарегистрирован: 03.12.2013

kisoft пишет:
Не не не, делим массив на два, каждый должен начинаться с 9000 и 4400. 11408 нужно убрать. Затем нужно проанализировать оба массива, если они одинаковые, оставить один массив, его и забить в жерло кондиционера! В смысле его и передавать.

А как советовал kisoft пробовали эксперементировать?

А ардуино конечно покупать лучше с USB, вам так проще будет на него залить скетч.

igorcds
Offline
Зарегистрирован: 03.12.2013

ЕвгеничЪ пишет:

igorcds

решил таки прикупить вторую ардуино в надежде, что это поможет заставить кондей включаться... скажите, это ведь и есть ардуино мини с юсб? я правильно понимаю? или это доп. модуль для ардуино мини?

 

http://www.ebay.com/itm/New-Mini-USB-Nano-V3-0-ATmega328-5V-16M-Micro-controller-board-For-Arduino-/200964325858?pt=LH_DefaultDomain_0&hash=item2eca6841e2

аха. это и есть ардуино мини, и сразу озаботтесь кабелем для нее

igorcds
Offline
Зарегистрирован: 03.12.2013

как писал leshak пробовали?

.....

Ну и, само собой, я бы посмотрел ВСЕ примеры идущие с библиотекой. И поискал бы поиском, места где используются интересующие меня функции.

Поиск по исходникам примеров на слова sendNEC, sendRaw и неминуемо наткнулся бы на пример IRRecord.ino. В котором видно как отсылается массив rawCodes. Далее, естественно возник-бы вопрос "а откуда там берутся значения?". Ищем по коду примера где заполняется этот массив... там и комментарии, и даже в Serial выводи "Recived unknown code, saving as raw". Остается или разобраться как он работает, или тупо выдрать к себе функции с говорящими именами storeCode(), sendCode(). Которые УЖЕ готовы и написаны автором библиотеки. Потом, потихоньку, когда заработает можно повыкидывать из них лишнее (поддержку ненужных протоколов и т.п.) каждый раз проверяя "не поломалось ли..".

Или вообще, прежде чем начинать писать свой код. Взял этот пример целиком. Так как он умеет и записывать и отсылать по нажатию кнопки........

ЕвгеничЪ
Offline
Зарегистрирован: 30.09.2013

igorcds по поводу кабеля к ардуино мини, там же вроде используется обычный ЮСБ или нет? по картинке точно не могу понять...

 

igorcds пишет:

как писал leshak пробовали?

 

да, пробовал, убрал лишнюю паузу, но не помогло...

 

думаю без второй ардуино будет очень сложно, дождусь ее, глядишь потом что то станет понятнее...

 

 

igorcds
Offline
Зарегистрирован: 03.12.2013

обычный кабель usb. если у вас дома есть и хорошо(мини или микро usb)...

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

от этого продавца, по крайней мере до иркутской области идет в пределах 20 суток....

igorcds
Offline
Зарегистрирован: 03.12.2013

Да и всех с праздником :)))

ЕвгеничЪ
Offline
Зарегистрирован: 30.09.2013

Понял, большое спасибо!

Присоединяюсь к поздравлениям!

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

Сегодня таки добил стенд для макетирования ИК передатчика. Кондиционера нет, потому помочь не смогу.

Зато наступил на граблю, сначала впаял ИК светик наоборот. Смотрю, вроде всё нормально, логическим анализатором посмотрел, всё путем, идут посылки, модулированные частототй 38 КГц, потом подключил красный обычный светодиод параллельно ИК и понял, что ИК впаял наоборот, потому что красный свтодиод мигает хорошо-заметно. Рекомендую для отладки вместо ИК использовать обычный свтодиод, а потом подключать ИК в той же полярности.

 

leshak
Offline
Зарегистрирован: 29.09.2011

1. Поищите на форуме, где-то чуть меньше года назад, была тема где человек танцевал именно с кондиционером. Именно у кондишинов там были какие-то "свои заморочки". Плюс, если мне не изменяет память, там была еще "заморочк" с нестандартной частотой (56 кажись). И если при передачи "подправить частоту" нет проблем, но на приеме - нужно искать другой приемник (хотя, в вашем случае не похоже, что "неправильный приемник", дампы выглядят "стабильно повторяемыми", NEC расшифровывается)

2. Попробуйте с помощью IRRecord.ino вначале добится стабильной работы не кондиционера, а какого-нибудь муз.центра телевизора. Желательно тоже на NEC кодировке. Просто что-бы быть уверным в "железе". А потом уже выковыривать "особенности" самого пакета данных.

3. Если вы уже заказали вторую ардину (я еще гадал "зачем тут две ардуины?") то можно попробовать следющий "тестовый сценарий".
а. Записываем первой ардуиной "посылку" оригинального пульта. И сохраняем, куда-нибудь в текстовый файлик дамп/коды.
б. Проигрываем первой ардуиной эту запись и ловим ее "второй ардуиной". Тоже сохраняем в вайлик дамп.

Потом сравниваем записи "оригинала" и "нашего воспроизведения". Если они не совпадают - значит что-то у нас неправильно с железом (скорее всего в "передающей части"). Вообщем нужно убедится что "мы передаем хоть что-то...". А то, если светик неправильно впаяли, то.... можно частоты и биты подбирать до морковкиного заговения :)

P.S. Кстати, то что светик "хотябы как-то светится", частенько можно увидеть с помощью камеры старого мобильника. У них плохие ИК фильтры, и можно увидеть "свечение пульта" в момент передачи.