Решил сделать свой вклад с полным пособием Chip надеюсь ты одобришь.
Это для тех кто хочет сделать не вникая (сделал и забыл)
Для тех кто хочет что бы у него работали кнопки и к тому же можно было настроить часы как это у меня (Хонда Цивик + переходник для магнитолы что бы работал климат контроль).
Шах 1
Берем те 2 провода которые идут от кнопок руля не отсоединяем их от переходника, подключаем к ним параллельно 2 провода которые идут на ардуино по схеме.
А для тех у кого этого нет и не нужно просто 2 провода с кнопок руля по схеме с первой страницы.
место сопротивления 3.3 Ком как было на схеме первой страницы ставим переменный резистор (я свой выпаял с какого то блока сопротивление на тестере было от 0.12 до 84 Ком) нам не нужно большое сопротивление это будет зависеть от длины проводов к ардуино (у меня комп в багажнике).
Шах 2
Скачиваем программатор с офф сайта http://www.arduino.cc/en/Main/Software
распаковываем не важно куда.
Шаг 3
Подключаем Ардуино к компу и устанавливаем драйверы найти их можно тут http://www.google.ru/search?q=CDM+2.06.00+WHQL+Certified&ie=utf-8&oe=utf-8&aq=t&lr=lang_ru&rls={moz:distributionID}:{moz:lo cale}:{mozfficial}
Так же можно проверить если все драйвера установились успешно зайдя в диспетчер устройств.
Шаг 4
Желательно освободить все порты, отключить все не нужные вещи на время.
Открываем скачавшийся программатор ардуино и подключим его к нашему ардуино.
1. Нажимаем на Tools-->Board и выберем вашу модель ардуино.
2. Нажимаем на Tools-->Serial Port и выберем порт к которому подключён ардуино.
Можно узнать в диспетчере устройств-->Порты (Com LPT) нажать на плюс и там уведите ваше устройство а возле него написан на каком порте он подключён.
Шаг 5
Заливаем скетч тут у каждого разный работает может из за того что не все шаги были описаны понятно.
Я воспользуюсь скетчем от HAMSTERa
PHP код:
/// Для рулевых кнопок
// Задержки между нажатиями конкретных кнопок, миллисекунды
#define KEY_CH_MINUS_DELAY (200)
#define KEY_CH_PLUS_DELAY (200)
#define KEY_VOL_MINUS_DELAY (150)
#define KEY_VOL_PLUS_DELAY (150)
#define KEY_MODE_DELAY (300)
// Значения кнопок
#define KEY_CH_MINUS (175)
#define KEY_CH_PLUS (330)
#define KEY_VOL_MINUS (0)
#define KEY_VOL_PLUS (73)
#define KEY_MODE (530)
// Погрешность при чтении кнопок
#define KEY_DELTA (30)
// Коды кнопок, что отсылаем в порт внешней проге
#define CH_MINUS (1)
#define CH_PLUS (2)
#define VOL_MINUS (3)
#define VOL_PLUS (4)
#define MODE (5)
#define NONE (0)
unsigned long LastTimeKeyPressed = millis();
int LastKeyPressed = NONE;
void setup()
{
Serial.begin(9600);
}
void loop()
{
ReadSteering();
delay(50);
}
// Читает рулевые кнопки и пишет в порт код нажатой кнопки
void ReadSteering()
{
unsigned long TimeKeyPressed;
int KeyPressed = NONE;
int dt1 = analogRead(5);
delay(50);
int dt2 = analogRead(5);
if (abs(dt1-dt2)<=5 and dt1<900 ) //если нет дребезга и что-то есть
{
// Регистрируем время нажатия кнопки
TimeKeyPressed = millis();
//CH_MINUS
if ( (dt1-KEY_DELTA <= KEY_CH_MINUS) and (dt1+KEY_DELTA >= KEY_CH_MINUS) )
{
if ( (LastKeyPressed != CH_MINUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_MINUS_DELAY) )
{
LastKeyPressed = CH_MINUS;
KeyPressed = CH_MINUS;
LastTimeKeyPressed = TimeKeyPressed;
}
}
//CH_PLUS
else if ( (dt1-KEY_DELTA <= KEY_CH_PLUS) and (dt1+KEY_DELTA >=KEY_CH_PLUS) )
{
if ( (LastKeyPressed != CH_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PLUS_DELAY) )
{
LastKeyPressed = CH_PLUS;
KeyPressed = CH_PLUS;
LastTimeKeyPressed = TimeKeyPressed;
}
}
//VOL_MINUS
else if ( (dt1-KEY_DELTA <= KEY_VOL_MINUS) and (dt1+KEY_DELTA >=KEY_VOL_MINUS) )
{
if ( (LastKeyPressed != VOL_MINUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_VOL_MINUS_DELAY) )
{
LastKeyPressed = VOL_MINUS;
KeyPressed = VOL_MINUS;
LastTimeKeyPressed = TimeKeyPressed;
}
}
//VOL_PLUS
else if ( (dt1-KEY_DELTA <= KEY_VOL_PLUS) and (dt1+KEY_DELTA >=KEY_VOL_PLUS) )
{
if ( (LastKeyPressed != VOL_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_VOL_PLUS_DELAY) )
{
LastKeyPressed = VOL_PLUS;
KeyPressed = VOL_PLUS;
LastTimeKeyPressed = TimeKeyPressed;
}
}
//MODE
else if ( (dt1-KEY_DELTA <= KEY_MODE) and (dt1+KEY_DELTA >=KEY_MODE) )
{
if ( (LastKeyPressed != MODE) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_MODE_DELAY) )
{
LastKeyPressed = MODE;
KeyPressed = MODE;
LastTimeKeyPressed = TimeKeyPressed;
}
}
if (KeyPressed != NONE)
{
Serial.print(char(255));
Serial.print(KeyPressed,DEC);
}
Serial.print(dt1,DEC);
Serial.print(" ");
Serial.println(dt2,DEC);
}
}
Только нужно его изменить под вас а конкретно( на каком порте подключён ардуино, какая скорость) часто не обращают на это внимание а потом возникают ошибки (я лично из за того что не заметил что не тот порт написан бился об стенку пол часа)
PHP код:
Serial.begin(9600)
вместо 9600 впишите свою скорость порта узнать можно все там же в диспетчере устройств нажимает правой мишкой по вашему устройству-->Свойства-->Параметры порта-->Скорость, так же ее можно изменить на ту которая вам нужна.
PHP код:
int dt1 = analogRead(5);
int dt2 = analogRead(5);
Изменить вместо 5 поставить свой порт к которому подключён ардуино.
можно проверить на ошибки нажав на иконку ВИ (Компиляция)
Внизу напишет что все успешно прошло, если будут ошибки то он их напишет там же.
Шаг 6
Закачиваем скеч который мы отредактировали под себя нажатием кнопок на клавиатуре CTRL+U или же нажимаем на рисунок стрелочку в право.
Все должно пройти без проблем но если выдает ошибку типап не может сделать синхронизацию то прорвете выбрали вы правильный порт и правильное название вашего устройства.
Шаг 7
Нажимаем CTRL+SHIFT+M или Tools-->Serial Monitor, откроется новое окошко в котором мы будем смотреть какие значения выдают кнопки руля.
Для тех кто воспользовался схемой с первой страницы то это по проще просто нажимаем на любую кнопку руля и видим какое он дает значение будут маленькая погрешность это нормально записываем каждой кнопки значения где нибудь и переходим к следующему шагу.
Для тех кто воспользовался моей схемой.
Начинаем искать с какого сопротивления нажатия кнопок руля не дадут настраивать часы, поясню часы начинают настраиваться если долго зажать кнопку MODE оно дает определенное сопротивление (или диапазон), и если такое же сопротивление появиться то к примеру при нажатии кнопки добавить звук будет давать такое же сопротивление то каждый раз будет редактировать часы при этом нажатии, по этому будем искать при каком сопротивлении не будет вызывать настройку часов и будут работать все кнопки итак начнем.
Ставим самое маленькое сопротивление и начинаем нажимать
кнопки короткими затем долинными нажатиями видим что часы не затрагивает хорошо идем дальше.
Смотрим при каждом нажатии кнопки в Serial Monitor должно выдавать какое то значение если выдает значение каждой кнопке то значит записываем значение каждой кнопки и переходим к следующему шагу если не на всем кнопкам выдает значение то не расстраиваемся и подымаем сопротивление немножко и так до тех пор покамест не будет выдавать значение всех кнопок и они не будут реагировать на настройки часов.
Терпение и все получиться у меня это взяло около 2 минут.
Шаг 8
Все значения кнопок которые мы записали вставляем в тот же скетч которым мы прошивали ардуино.
PHP код:
// Значения кнопок
#define KEY_CH_MINUS (175)
#define KEY_CH_PLUS (330)
#define KEY_VOL_MINUS (0)
#define KEY_VOL_PLUS (73)
#define KEY_MODE (530)
меняем на те которые получили
в конце скрипта находим
PHP код:
Serial.print(dt1,DEC);
Serial.print(" ");
Serial.println(dt2,DEC);
и стираем эти строчки, или можно их отключить поставить в начале каждой строчкой // и видно будет сразу как они станут серими.
Вот так
PHP код:
// Serial.print(dt1,DEC);
// Serial.print(" ");
// Serial.println(dt2,DEC);
Теперь проверяем на ошибки и прошиваем.
Шаг 9
Я допишу завтра когда разберусь с Autohotkeys