Les1at, +1
Тоже энкодер прикручиваю.
Chip,
расскажи, пожалуйста, как в Hotkey реализована функция нажатия клавиш. здесь я что-то написал, но кривовато получилось. кнопки работают, но не отображаются при настройке клавиш в центрифуге например.
Les1at, +1
Тоже энкодер прикручиваю.
Chip,
расскажи, пожалуйста, как в Hotkey реализована функция нажатия клавиш. здесь я что-то написал, но кривовато получилось. кнопки работают, но не отображаются при настройке клавиш в центрифуге например.
Последний раз редактировалось Chip; 12.04.2013 в 12:32.
так и сделал, на примере
http://www.compcar.ru/forum/showthre...?t=4640&page=8
// Для рулевых кнопок
// Задержки между нажатиями конкретных кнопок, миллисекунды
#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 (445)
#define KEY_CH_PLUS (640)
#define KEY_VOL_MINUS (90)
#define KEY_VOL_PLUS (270)
#define KEY_MODE (805)
// Погрешность при чтении кнопок
#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(57600);
}
void loop()
{
ReadSteering();
delay(50);
}
// Читает рулевые кнопки и пишет в порт код нажатой кнопки
void ReadSteering()
{
unsigned long TimeKeyPressed;
int KeyPressed = NONE;
int dt1 = analogRead(0);
delay(50);
int dt2 = analogRead(0);
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);
}
}
Хонда Клуб Пермский край Пермь
Инструкции по ремонту и эксплуатации Honda - http://honda-59.ru/books
Chip, спасибо. Все получилось
Еще забыл написать, нужно паузу между нажатием и отпусканием выдержать 10-30 мс
Добрый день. Подскажите возможно ли параллельная работа рулевых кнопок со штатной магнитолой и carduino?
Возможна поле небольшой модернизации, но команды запрограммированные на кнопки будут выполнятся на обоих устройствах
Сейчас на одном выводе с кнопок висит 0В, на втором 4,5В. при нажатии одной кнопки 1,75В, другой 2,65. их и надо завести в ПК. когда на штатной магнитоле включен вход aux, то кнопки вперед-назад ни на на что не влияют, их и надо завести на ПК.
То есть мне надо просто убрать подтягивающий резистор на +пит, а вот что делать с общим проводом? если его подключить то получиться земляная петля, а если не подключать то в принципе ведь должно работать?
Задам вопрос еще здесь. если я преобрету JoyStick здесь, то мне тоже как бы надо будет его модернизировать получается?
Последний раз редактировалось Lehas; 24.05.2013 в 11:22.
ДаТо есть мне надо просто убрать подтягивающий резистор на +пит
Должно работать если питание компа подключено аккумулятору и без гальванической развязкиа вот что делать с общим проводом? если его подключить то получиться земляная петля, а если не подключать то в принципе ведь должно работать?
Даесли я преобрету JoyStick здесь, то мне тоже как бы надо будет его модернизировать получается?
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)