![]() |
Адаптер рулевых кнопок. Безжалостный и беспощадный.
Вложений: 5
Выкладываю свою версию адаптера рулевых кнопок.
На данный момент устройство работает - спасибо Дмитрию (Demon083)! Я не претендую на гениальность. Развивать данный адаптер дальше не буду, так как это временная мера. Адаптер изготавливался под определенный руль и определенную магнитолу, но это не исключает возможность переделки и использования для других комплектов руль-магнитола. Итак, поехали! После установки руля с медиа-кнопками возник естественный вопрос: «А как его «подружить» с магнитолой?» Конечно, существует великое множество всевозможных адаптеров на любой вкус и кошелёк, но это не для нас. Поскольку моя магнитола (Kwnwood KDC-6051U) понимает только протокол NEC, была использована имеющаяся Arduino Nano, немножко резисторов, стабилизатор 7812, пара кондеров и кусок монтажной платы. Всё это хозяйство было собрано на монтажке. Вложение 43556 Вложение 43557 Вложение 43558 Вложение 43559 Для снятия кодов был использован самый обычный ИК-фотодиод, купленный с известного всем сайта, и родной пульт от магнитолы. В скетче использовал специально заточенную под это дело библиотеку IRremote.h. На сколько я понял описание этой библиотеки, выход только D3. Его можно даже не прописывать, всё и так работает. Достоинства: Дёшево, быстро. Недостатки: Подходит только для магнитол с импульсным управлением. Настроить можно только на месте и только с ноутбуком, Нужна модифицированная библиотека: Вложение 43584. Рабочий скетч: PHP код:
PHP код:
PHP код:
Нужна была программа, которая умеет конвертировать между собой, шестнадцатеричные, десятичные и двоичные числа и первая, которая пришла мне на ум была калькулятор из винды в расширенном виде и обратил внимание на двоичный код и пришло прозрение! Возьмем наш код из ардуины 9D6228D7, где 9D62-является адресов, а 28D7-командой. Теперь представим 9D62 в двоичном виде и получим 1101100101100010. А теперь самое интересное. Надо прочитать с конца данный двоичный код 0100011010011011 и преобразовать обратно в HEX. Получаем 469B. Это уже знакомые нам цифры, не так ли? Теперь команда. С ней немножко сложнее. Её надо разбить на 2 части 28 и D7. Получаем 28 00101000 D7 11010111 Как видим, одно значение инверсно другому. Читаем 28 наоборот и получаем 14. Теперь обратное преобразование Возьмем адрес:46B9 и команду:15 [Vol-] и переведем это на язык ардуины. 46B9 -> 0100 0110 1011 1001 ->1001 1101 0110 0010 -> 9D62 15-> 0001 0101 -> 1010 1000 -> A8 (читаем наоборот) 1010 1000 0101 0111 -> 57 (инвертируем) Складываем всё в кучу и получаем 9D62A857. Надеюсь кому-нибудь пригодится. |
Я бы границы уставок увеличил по максимуму, до "упора" в соседние, работать надежнее будет, если резисторы/контакты/напряжения поплывут.
Вот так: if (val1>840&&val1<870)//Громкость + if (val1>871&&val1<999)//Громкость - |
Народ, помогайте! Адаптер работает только на половину. Если на выход цепляю ИК-диод - работает. Подключаю к магнитоле - реакции 0.
|
Цитата:
На ИК-диод подается модулированный сигнал частотой 38кГц (описание протокола NEC http://radiohlam.ru/teory/nec.htm ), с ИК приемника подается без несущей частоты. На вход магнитолы необходимо подавать сигнал без несущей частоты. Для этого правил библиотеку IRremote.cpp (в место включения и выключения ШИМ выдавал в порт логические 1, 0), в функции sendNEC в место enableIROut(38); записал pinMode(3, OUTPUT);, в функциях marc, space: в место TCCR2A… записал digitalWrite(3, HIGH) (для mark), digitalWrite(3, LOW) (для space). Вход у магнитолы может быть инверсный, тогда digitalWrite(3, LOW) (mark), digitalWrite(3, HIGH) (space). После такого вмешательства в библиотеку работа с ИК-диодом не возможна. |
Цитата:
PHP код:
|
Цитата:
В функциях MARK и SPACE кроме включения и выключения ШИМ дополнительно формируются задержки, длительность которых задается при вызове функции (NET_BIT_MARK, NET_ONE_MARK, NEC_ZERO_SPACE), поэтому digitalWrite предлагаю вставлять в место строчек TCCR2A|=_BV(COM21); в функции marc, TCCR2A&=~(_BV(COM21)); в функции space. инициализацию порта (pinMode) оставить в sendNEC |
В этом не может быть дело? Сигнал возможно нужно инвертировать.
Цитата:
|
Всё заработало, шапку обновил
|
Цитата:
|
Цитата:
|
Часовой пояс GMT +4, время: 01:45. |
Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot