Реакция должна быть такой же как и при нажатии на клавиатуре.
Реакция должна быть такой же как и при нажатии на клавиатуре.
Последний раз редактировалось Chip; 09.02.2013 в 17:33.
Проверить можно тестером. Нажимать кнопки и записать какие при этом будут на тестере показания
Chip
а есть исходники HotKey? если можно, хотел бы их получить, хочу прикрутить ещё rotary encoder.
Хонда Клуб Пермский край Пермь
Инструкции по ремонту и эксплуатации Honda - http://honda-59.ru/books
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?
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)