Официальный сайт компании Arduino по адресу arduino.cc
Помогите напиcать скетч для Carduino Nano за денюшку
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пнд, 07/01/2013 - 22:40
Требуется написать скетч для Carduino Nano для обработки сигнал.
Есть устройство(блок MMI к блоку подключен пульт управления), которое отправляет и принимает сигналы в формате HEX 1002649901100323, нужно написать скетч который будет преобразовывать в нажатия клавиатуры давая при этом ответ, либо пропускать не трогая их.
Сигналов очень много, я дам список, что с каждым сигналом должно происходить.
Более подробнее в личной переписке.
Icq 422210 мыло 7712498@mail.ru
Все-таки опишите подробнее что хотите.
1. Что за блок MMI ?
2. Что за пульт управления?
3. Как подключен?
4. По какому интерфейсу общаются блок и пульт?
5. Как и куда подключен Carduino Nano?
6. Что значит "преобразовывать в нажатия клавиатуры"?
7. Куда и чему "давая при этом ответ..."?
1. Блок управления медиа системой в автомобиле ауди.
2. От автомобиля http://polish.autonp.com/media/2010/01/201001241800181260.jpg
3. Как подключен?
4. не понимаю
5. Пока никак, на данный момент использую pl2303 для считывания сигналов и преобразования их в нажатия клавиатуры
6. пришел код с пульта mmi отправляется сигнал на комп с определенной комбинацией клавиатуры (к примеру ctrl_c)
7. Пульт с главным блоком постоянно общаются, блок постоянно шлет сигнал на который пульт дает ответ 06, к примеру если я нажимаю на пульте кнопку NAVI с пульта идет сигнал на блок 01011312 при получении данного сигнала блок дает пульту ответ 7Е, что для пульта обозначает получения сигнала. Мне нужно чтобы ардуино автономно без компьютерных программы могла распределять эти сигналы, какие-то отправлять на блок а какие-то отправлять в комп преобразовывая их в нажатия клавиш на клавиатуре. Сейчас у меня все работает через TTL преобразователь на чипе PL2303 с программой написанной для обработки этих сигналов, но меня она не совсем устраивает, в первую очередь при подключении через PL2303 я могу только принимать и отправлять сигнал на пульт но при этом не общаться с блоком, т.е мне пришлось полностью отключить от блока пульт mmi для того чтобы я мог управлять CARPC. В pl2303 по одному TX и RX а в ардуино я как понял их много, а мне нужно по два каждого. Также написанная программа достаточно долго обрабатывает сигнал принятый от пульта, к примеру когда я кручу крутилку. Я думаю, что ардуино должна работать быстрее.
Из вашего описания понятно, что пульт и блок общаются по RS-232(UART), уровни которого неизвестны, к пульту вы подключаетесь по 3-м проводам - RX, TX и GND через преобразователь PL2303.
Во-первых. У Наны аппаратный UART всего один, а не много, но можно поднять и программный (есть свои недостатки).
Во-вторых. Определение дуины компом как HID-устройство - клавиатура зависит от версии вашей Carduino Nano, если на ней стоит FT232, то она будет работать только как СОМ-порт и ни как иначе, а если у вас установлен ATmega8U2, то теоретически его можно прошить так что бы он определялся как клавиатура. Если же у вас на компе есть разъем PS2 для клавиатуры, то тогда теоретически можно сэмитировать клавиатуру через него независимо от версии дуины.
Втретих. Если я вас правильно понял, то вы хотите весь функционал программы, которая сейчас у вас работает перенести в дуину.
По своему опыту скажу - проэкт не из простых, очень много подводных камней, а результатом может оказаться - с чего начали к тому и пришли.
Я могу любую купить ардуино, мне главное чтобы все работало. Что посоветуете?
Прежде чем что либо покупать/делать надо знать будет ли оно работать. Так есть в компе разъем PS/2 для клавиатуры?
да есть.
Из вашего описания понятно, что пульт и блок общаются по RS-232(UART), уровни которого неизвестны, к пульту вы подключаетесь по 3-м проводам - RX, TX и GND через преобразователь PL2303.
Судя PL2303 то почти наверняка 5V уровни. (сам PL2303 3-х вольтовый, но не думаю что в машине 3v).
Во-вторых. Определение дуины компом как HID-устройство - клавиатура зависит от версии вашей Carduino Nano, если на ней стоит FT232, то она будет работать только как СОМ-порт и ни как иначе, а если у вас установлен ATmega8U2, то теоретически его можно прошить так что бы он определялся как клавиатура. Если же у вас на компе есть разъем PS2 для клавиатуры, то тогда теоретически можно сэмитировать клавиатуру через него независимо от версии дуины.
Теоретически есть еще вариант написать в трей програму, которая будет читать COM-порт и эмулировать нажатие клавишь. Но тут нужно с WinApi быть хорошо знакомым. Как вариант поискать готовые проги типа AutoIt, у них бывают довольно развитые внутрение возможности скриптования-триггеров. С хотеев, всяких IR-ремотом и т.п. Думаю и что-то "из сериал" у нах найдется. А уж "сделать вид что нажали клавиши" - для этого они и создавались :)
Но, конечно, такое решение канает только если "делаешь для себя", а не "серийное". Когда "поставить дравера, проинсталить прогу" - не является проблемой.
У меня есть написанная программа для PL2303 но она меня не устраивает быстратой и возможностью только по одному Rx Tx подключить.
И, кстати, еще нужно выяснить "а нужно ли нажатие клавиш эмулировать". Есть вероятность когда нужно просто выводить что-то в текстовое поле, или просто сохранять в файл. А задача "отправлять нажатия сторонним программам" - на самом деле не стоит.
Но, конечно, такое решение канает только если "делаешь для себя", а не "серийное". Когда "поставить дравера, проинсталить прогу" - не является проблемой.
У меня есть написанная программа для PL2303 но она меня не устраивает быстратой и возможностью только по одному Rx Tx подключить.
Тут важно понять откуда ее "тормозучесть" возникла. Одно дело "написанна не брежно", другое "скорости serial не хватает". В первом случае - поправимо (как ни крути, а комп шустрей дуины), во втором - а чем дуина поможет у нее будет тоже самое ограничение?
Если "автономность" не предполагается и комп всегда будет присутсвовать, то не проще ли еще один PL2303 купить и все делать на компе? От мобилки кабель с PL2303 Обойдется в $2-$3.
И, кстати, еще нужно выяснить "а нужно ли нажатие клавиш эмулировать". Есть вероятность когда нужно просто выводить что-то в текстовое поле, или просто сохранять в файл. А задача "отправлять нажатия сторонним программам" - на самом деле не стоит.
А вот тут, действительно, а чем в результате хотите управлять? плеером?
Смотрите. http://www.pccar.ru/showthread.php?t=17562
http://video.mail.ru/mail/crashmilan/_myvideo/5.html
Сейчас у меня Пульт мми подключен через http://sun-store.ru/product_211.html к компьютеру в машине.
На компе написана программа, которая получает сигналы от пульта, дает ответ на пульт и если нужно, эмулирует нажатия на клавиатуре. Проблема состоит в том, что скорость работы меня не устраивает, если крутилку крутить быстро, то сигнал обрабатывается достаточно долго, простое нажатия на кнопку вполне все устраивает. Так сделано у меня в одной машине, в которой, я вообще отключил пульт от главного блока машины, что повлекло за собой отключения медиа MMI в авто. Сейчас я делаю вторую машину, audi a6c7 http://www.pccar.ru/showthread.php?t=18399 в которой пульт нельзя отключать от главного блока машины, т.к там нет замены акустики и соответственно нужно общения пульта с главным блоком.
Изначально я планировал подключиться следующем образом используя PL2303
Блок мми имеет вход и выход сигнала
PL2303 имеет вход и выход сигнала
Пульт имеет вход и выход сигнала
Я подключаю
Пульт выход - вход PL2303
Блок вход - выход PL2303
При данной схеме получается следующее:
При нажатии на кнопку NAVI включается режим фильтрации (программа использует сигналы и преобразовывает их в клаву) программой сигналов.
При нажатии на кнопку RADIO фильтрация отключается и происходить тупо переадресация полученных сигналов на блок от пульта.
Также у пульта есть регулировка звука которая планируется постоянно переадресовываться на блок, задержка обработки сигнала не позволяет нормально регулировать громкость, т.е переадресация сигнала происходит не так быстро как когда подключено без PL2303 (блок+пульт). Я думал, что ардуино будет работать автономно, и не будет таких задержек.
Потом у меня возникла проблема в приеме сигнала на PL2303, в чем она выражается, сигнал приходят немного не четко. Все сигналы должны начинаться с 10 полученные с пульта, а у меня начинаются с 68, судя по форуму http://www.car-pc.info/phpBB2/viewtopic.php?t=14529&postdays=0&postorder.... К сигнальному я подключился без резисторов, я не думаю что из-за этого может приходить не тот сигнал. Сейчас попробовал через cararduino проверить, все также приходит все сигналы с 68 начинаются, из-за этого я не могу сделать хоть какую-то переадресацию на блок. Может что-то посоветуете?
Не совсем понятно о чем вы пишите, покажите лог того чего вы там получаете с пульта. И я так и не понял как эмуляция клавиатуры вам может помоч ? кргда вы с клавиатуры нажимаете все работает четко и быстро?
67 1A 02 DF FE 31
19:
00
20:
67 1A 02 DF FE 31
21:
67 1A 1E BE F2 53
22:
00
23:
67 1A 1E BE F2 53
24:
67 1A 1E BE F2 53
Клавиатуру нажимаю все четко естественно, программа долго думает если приходит сразу много сигналов.
Это откуда такой лог? из какой программы?
Я вроде писал, от пульта
Я понимаю, что от пульта, я спрашиваю вы какой программой пользуетесь? лог откуда? Вы откуда эти данные копировали?
Короче. Вот вам немного измененный стандартный пример работы програмного UART. Подключаете к 2 выводу дуины TX пульта, а к 3 выводу - RX пульта, заливаете скейтч в дуину, запускаете дуиновский сериал-монитор и нажимаете на кнопки на пульте, все то что есть в мониторе выкладываете сюда.
Если нажать на кнопку то нужно давать пульту ответ.
ВОт как у меня сейчас в программе:
Нельзя просто подключить и нажимаю кнопки получать тупо код. Нужно сначало запустить пульт, потом если нажимается кнопка то нужно дать ответ пульту.
Тогда подключите только 2 вывод дуины к линии RX пульта -> ТX преобразователя и сделайте как написано в сообщении #20.
Вы видимо вообще не понимаете про что я говорю.
Я и так знаю какой будет лог
100279FF10039D - это будет идти 12 раз подряд пока не получит код в ответ 06
Короче тема закрыта. Видимо очень трудно понять про что идет речь. Всем спасибо.
Я как раз понимаю о чем вы говорите, НО с вами невозможно работать дистанционно, потому как не имея достаточных знаний, вы решаете что нужно мне для понимания протокола! Вы не понимаете как работает UART и не даете мне возможности увидеть как пульт общается с блоком, ни как это вы видите где-то там у себя, а как он общается с ним в действительности - что собственно и нужно мне (да и любому другому программеру), что бы написать ПО, ваша табличка понадобилась бы только в самом конце.
Задача вполне решаема, НО что бы что то сделать, решать что нужно программисту должен программист, а не вы, потому как например вы только сейчас заикнулись о длинне и о повторах, что я бы увидел из лога, если бы вы его сделали, да и еще много чего нужно видеть...
Удачи.
maksim совершенно прав и добавить нечего