Помогите напиcать скетч для Carduino Nano за денюшку

Crashmilan
Offline
Зарегистрирован: 07.01.2013

Требуется написать скетч для Carduino Nano для обработки сигнал.
Есть устройство(блок MMI к блоку подключен пульт управления), которое отправляет и принимает сигналы в формате HEX 1002649901100323, нужно написать скетч который будет преобразовывать в нажатия клавиатуры давая при этом ответ, либо пропускать не трогая их.
Сигналов очень много, я дам список, что с каждым сигналом должно происходить.
Более подробнее в личной переписке.

Icq 422210 мыло 7712498@mail.ru

maksim
Offline
Зарегистрирован: 12.02.2012

Все-таки опишите подробнее что хотите.

1. Что за блок MMI ?
2. Что за пульт управления?
3. Как подключен?
4. По какому интерфейсу общаются блок и пульт?
5. Как и куда подключен Carduino Nano?
6. Что значит "преобразовывать в нажатия клавиатуры"?
7. Куда и чему "давая при этом ответ..."?

 

Crashmilan
Offline
Зарегистрирован: 07.01.2013

 

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 а в ардуино я как понял их много, а мне нужно по два каждого. Также написанная программа достаточно долго обрабатывает сигнал принятый от пульта, к примеру когда я кручу крутилку. Я думаю, что ардуино должна работать быстрее.

 

maksim
Offline
Зарегистрирован: 12.02.2012

Из вашего описания понятно, что пульт и блок общаются по RS-232(UART), уровни которого неизвестны, к пульту вы подключаетесь по 3-м проводам - RX, TX и GND через преобразователь PL2303.

Во-первых. У Наны аппаратный UART всего один, а не много, но можно поднять и программный (есть свои недостатки).

Во-вторых.  Определение дуины компом как HID-устройство - клавиатура зависит от версии вашей Carduino Nano, если на ней стоит FT232, то она будет работать только как СОМ-порт и ни как иначе, а если у вас установлен ATmega8U2, то теоретически его можно прошить так что бы он определялся как клавиатура. Если же у вас на компе есть разъем PS2 для клавиатуры, то тогда теоретически можно сэмитировать клавиатуру через него независимо от версии дуины.

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

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

 

Crashmilan
Offline
Зарегистрирован: 07.01.2013

Я могу любую купить ардуино, мне главное чтобы все работало. Что посоветуете?

maksim
Offline
Зарегистрирован: 12.02.2012

Прежде чем что либо покупать/делать надо знать будет ли оно работать. Так есть в компе разъем PS/2 для клавиатуры?

Crashmilan
Offline
Зарегистрирован: 07.01.2013

да есть.

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

maksim пишет:

Из вашего описания понятно, что пульт и блок общаются по RS-232(UART), уровни которого неизвестны, к пульту вы подключаетесь по 3-м проводам - RX, TX и GND через преобразователь PL2303.

Судя PL2303 то почти наверняка 5V уровни. (сам PL2303 3-х вольтовый, но не думаю что в машине 3v).

maksim пишет:

Во-вторых.  Определение дуины компом как HID-устройство - клавиатура зависит от версии вашей Carduino Nano, если на ней стоит FT232, то она будет работать только как СОМ-порт и ни как иначе, а если у вас установлен ATmega8U2, то теоретически его можно прошить так что бы он определялся как клавиатура. Если же у вас на компе есть разъем PS2 для клавиатуры, то тогда теоретически можно сэмитировать клавиатуру через него независимо от версии дуины.

Теоретически есть еще вариант написать в трей програму, которая будет читать COM-порт и эмулировать нажатие клавишь. Но тут нужно с WinApi быть хорошо знакомым. Как вариант поискать готовые проги типа AutoIt, у них бывают довольно развитые внутрение возможности скриптования-триггеров. С хотеев, всяких IR-ремотом и т.п. Думаю и что-то "из сериал" у нах найдется. А уж "сделать вид что нажали клавиши" - для этого они и создавались :)

Но, конечно, такое решение канает только если "делаешь для себя", а не "серийное". Когда "поставить дравера, проинсталить прогу" - не является проблемой.

 

Crashmilan
Offline
Зарегистрирован: 07.01.2013

У меня есть написанная программа для PL2303 но она меня не устраивает быстратой и возможностью только по одному Rx Tx подключить.

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

И, кстати, еще нужно выяснить "а нужно ли нажатие клавиш эмулировать". Есть вероятность когда нужно просто выводить что-то в текстовое поле, или просто сохранять в файл. А задача "отправлять нажатия сторонним программам" - на самом деле не стоит.

maksim
Offline
Зарегистрирован: 12.02.2012

leshak пишет:
Судя PL2303 то почти наверняка 5V уровни. (сам PL2303 3-х вольтовый, но не думаю что в машине 3v.
Сложно сказать, кто знает, что там за переходник, может и 12 вольт оказаться, но врядли конечно.

leshak пишет:
Теоретически есть еще вариант написать в трей програму, которая будет читать COM-порт и эмулировать нажатие клавишь. Но тут нужно с WinApi быть хорошо знакомым. Как вариант поискать готовые проги типа AutoIt, у них бывают довольно развитые внутрение возможности скриптования-триггеров. С хотеев, всяких IR-ремотом и т.п. Думаю и что-то "из сериал" у нах найдется. А уж "сделать вид что нажали клавиши" - для этого они и создавались :)

Но, конечно, такое решение канает только если "делаешь для себя", а не "серийное". Когда "поставить дравера, проинсталить прогу" - не является проблемой.

Если я правильно понял, то сейчас так и есть.

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

Crashmilan пишет:

У меня есть написанная программа для PL2303 но она меня не устраивает быстратой и возможностью только по одному Rx Tx подключить.

Тут важно понять откуда ее "тормозучесть" возникла. Одно дело "написанна не брежно", другое "скорости serial не хватает". В первом случае - поправимо (как ни крути, а комп шустрей дуины), во втором - а чем дуина поможет у нее будет тоже самое ограничение?

Если "автономность" не предполагается и комп всегда будет присутсвовать, то не проще ли еще один PL2303 купить и все делать на компе? От мобилки кабель с PL2303 Обойдется в $2-$3.

maksim
Offline
Зарегистрирован: 12.02.2012

leshak пишет:

И, кстати, еще нужно выяснить "а нужно ли нажатие клавиш эмулировать". Есть вероятность когда нужно просто выводить что-то в текстовое поле, или просто сохранять в файл. А задача "отправлять нажатия сторонним программам" - на самом деле не стоит.

А вот тут, действительно, а чем в результате хотите управлять? плеером?

Crashmilan
Offline
Зарегистрирован: 07.01.2013

 

Смотрите. 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 (блок+пульт). Я думал, что ардуино будет работать автономно, и не будет таких задержек.

Crashmilan
Offline
Зарегистрирован: 07.01.2013

Потом у меня возникла проблема в приеме сигнала на PL2303, в чем она выражается, сигнал приходят немного не четко. Все сигналы должны начинаться с 10 полученные с пульта, а у меня начинаются с 68, судя по форуму  http://www.car-pc.info/phpBB2/viewtopic.php?t=14529&postdays=0&postorder.... К сигнальному я подключился без резисторов, я не думаю что из-за этого может приходить не тот сигнал. Сейчас попробовал через cararduino проверить, все также приходит все сигналы с 68 начинаются, из-за этого я не могу сделать хоть какую-то переадресацию на блок. Может что-то посоветуете?

maksim
Offline
Зарегистрирован: 12.02.2012

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

Crashmilan
Offline
Зарегистрирован: 07.01.2013

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

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

maksim
Offline
Зарегистрирован: 12.02.2012

Это откуда такой лог? из какой программы?

Crashmilan
Offline
Зарегистрирован: 07.01.2013

Я вроде писал, от пульта

maksim
Offline
Зарегистрирован: 12.02.2012

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

maksim
Offline
Зарегистрирован: 12.02.2012

Короче. Вот вам немного измененный стандартный пример работы програмного UART. Подключаете к 2 выводу дуины TX пульта, а к 3 выводу - RX пульта, заливаете скейтч в дуину, запускаете дуиновский сериал-монитор и нажимаете на кнопки на пульте, все то что есть в мониторе выкладываете сюда.

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // RX, TX

void setup()  
{
  Serial.begin(9600); 
  Serial.println("Started");
  mySerial.begin(9600);

}

void loop() // run over and over
{
  if (mySerial.available())
  { 
    Serial.print((byte)mySerial.read(), HEX);
    Serial.print(" ");
  }
}

 

Crashmilan
Offline
Зарегистрирован: 07.01.2013

Если нажать на кнопку то нужно давать пульту ответ.

ВОт как у меня сейчас в программе:

код имя ответ Действие
10 02 79 FF 10 03 9D Включения 0600100270121003A70006001002609A01100320  
10 02 35 10 03 5A включения 2 0600100270121003A70006001002609A01100320  
10 02 30 38 10 03 8D Mute 0600100270121003A70006001002609A01100320 CTRL+1
10 02 31 38 10 03 8E mute2 06  
10 02 79 38 10 03 D6 включения 3 0600100270121003A70006001002609A01100320  
10 02 40 01 10 03 66 Громкость+ 0600100270121003A70006001002609A01100320 CTRL+2
10 02 41 01 10 03 67 Громкость- 0600100270121003A70006001002609A01100320 CTRL+3
10 02 50 01 10 03 76  Крутилка вверх 06 UP
10 02 51 01 10 03 77  Крутилка вниз 06 DOWN
10 02 30 18 10 03 6D  Radio 06 CTRL+4

 

Crashmilan
Offline
Зарегистрирован: 07.01.2013

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

maksim
Offline
Зарегистрирован: 12.02.2012

Тогда подключите только 2 вывод дуины к линии RX пульта -> ТX преобразователя и сделайте как написано в сообщении #20.

Crashmilan
Offline
Зарегистрирован: 07.01.2013

Вы видимо вообще не понимаете про что я говорю.

Я и так знаю какой будет лог

100279FF10039D - это будет идти 12 раз подряд пока не получит код в ответ 06

 
Crashmilan
Offline
Зарегистрирован: 07.01.2013

Короче тема закрыта. Видимо очень трудно понять про что идет речь. Всем спасибо.

maksim
Offline
Зарегистрирован: 12.02.2012

Я как раз понимаю о чем вы говорите, НО с вами невозможно работать дистанционно, потому как не имея достаточных знаний, вы решаете что нужно мне для понимания протокола! Вы не понимаете как работает UART и не даете мне возможности увидеть как пульт общается с блоком, ни как это вы видите где-то там у себя, а как он общается с ним в действительности - что собственно и нужно мне (да и любому другому программеру), что бы написать ПО, ваша табличка понадобилась бы только в самом конце.
Задача вполне решаема, НО что бы что то сделать, решать что нужно программисту должен программист, а не вы, потому как например вы только сейчас заикнулись о длинне и о повторах, что я бы увидел из лога, если бы вы его сделали, да и еще много чего нужно видеть...

Удачи.

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

maksim совершенно прав и добавить нечего