- 
	
	
		
Вложений: 13
	
	
		Управление рулевыми кнопками при помощи Carduino.
	
	
		Софт написан для Arduino v.7 
Выкладываю программу для управления компьютером рулевыми кнопками. Можно сделать резистивную клавиатуру и тоже ее использовать совмесно с Arduino. Программа легко одним нажатием настраивается на любые комбинации клавиш , также настраивается на расширенные мультимедийные клавиши(проверил лично) . Тому у кого нет мультимедийных клавиш на клавиатуре могут прописать в ручную в файле config.txt, например регулировка громкости в виндовс использует сканкод мультимедийных клавиши (уменьшить это код -174, увеличить это код-175)
Список горячих клавиш для Centrafuse
 
 
Сначала настраиваем на рулевые кнопки горячие клавиши запустив файл KeyConfig.exe, нажимать клавиши на клавиатуре нужно последовательно и по очереди. Набрав нужную комбинацию нажмите кнопку на руле и потом кнопку Добавить. Таким образом можно добавлять до 100 комбинаций и больше. После того как вы назначили все нужные вам кнопки. Нажмите кнопку Сохранить и выйдите из программы.
Теперь ставим в автозагрузку программу HotKey.exe и пользуемся.
 
Код для Arduino Nano v.7 работающий с одним нажатием: 
	PHP код:
	
//http://compcar.ru  
#define PIN 5  //номер аналогового порта 
#define LIMIT 5 //предел погрешности сопротивления 
byte bytes[2];  
int res_dt1, res_d; 
unsigned long math_time,old_time,real_time;  
void setup()       
{      
Serial.begin(115200); // настроить скорость com порта       
}  
void loop()      
{    
  res_d = analogRead(PIN); // прочитать данные АЦП
  delay(30);
  res_dt1 = analogRead(PIN); // прочитать данные АЦП 
        old_time = millis(); 
        math_time = 0;  
        while(math_time < 300 && (res_dt1 > res_d-LIMIT && res_dt1 < res_d+LIMIT )) 
          { 
             real_time = millis();             //получить реальное время  
             math_time = real_time - old_time; //считаем длительность нажатия
            res_dt1 = analogRead(PIN); // прочитать данные АЦП    
          } 
    
    if( math_time > 50)  //если нет дребезга то короткое нажатие
      {  
        bytes[0] = res_d & 255;          // преобразовать в 2-байта   
        bytes[1] = (res_d & 768) >> 8;   
        Serial.write( bytes,2); // отправить прочитаное значение компьютеру       
      }    
} 
 
Код для Arduino, работает с длинным и коротким нажатием.
	PHP код:
	
//http://compcar.ru  
#define PIN 5  //номер аналогового порта 
#define LIMIT 6 //предел погрешности сопротивления 
byte bytes[2];  
int res_dt1; 
byte idx=0; 
unsigned long math_time,old_time,real_time; 
void setup()       
{      
Serial.begin(115200); // настроить скорость com порта       
}   
void loop()       
{   
  old_time = real_time; 
  math_time = 0;  
  res_dt1 = analogRead(PIN); // прочитать данные АЦП    
        while(math_time < 500 && analogRead(PIN)>res_dt1-LIMIT && analogRead(PIN) < res_dt1+LIMIT && res_dt1 != 1023) 
          { 
             real_time = millis();             //получить реальное время  
             math_time = real_time - old_time; //считаем длительность паузы 
          } 
    
         if(math_time > 30 && res_dt1 != 1023)  //если нет дребезга 
         {  
           if (idx==1 && math_time < 500){ res_dt1 = 1023; idx=0; }  
           else if(math_time > 499){ res_dt1 |= 1024; idx=1; } 
               
            bytes[0] = res_dt1 & 255;        // преобразовать в 2-байта   
            bytes[1] = (res_dt1 & 1792) >> 8; 
            Serial.write( bytes,2);         // отправить прочитаное значение компьютеру   
          } else idx=0;  
} 
 
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		А как подключить кнопки с руля к Arduino?
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		Прочти первый пост внимательней , там написано.
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		на autohotkey будет ли подерживатся?
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		Я с autohotkey не разбирался , а для чего если прога есть настраиваешь свои клавиши и все
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		Мне надо что бы она работала с окнами приложения, например если запущено окно приложения и оно не активно, делала его активным и нажимала в нём нужную кнопку.
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		Откуда программе знать какому приложению ты посылаешь нажатия?
Для этого нужно переписывать программу.
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		ну вот если бы она была совместима с автохоткей то тогда бы можно было научить. Мб есть вариант прикрутить его к драйверу джойстика?
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		А что имеется ввиду про совместимость с  автохоткей ?
Опиши задачу .
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		
	Цитата:
	
		
		
			
				Сообщение от 
Chip
				
			 
			А что имеется ввиду про совместимость с  автохоткей ?
Опиши задачу .
			
		
	 
 Под совместимостью я подразумевают что бы можно было данный девайс индефицировать в скрипте autohotkeya, получать от него координаты, имя устройства и т.д. то что понадобится, а далее прикручивать скриптовым языком к чему либо. Например как дела обстоят с микрухой от джойстика, когда она подсоединена к усб и настроена. По этому линку лежат 2 скрипта для автохоткей, первый это для настройки кнопок и индификации, а второй для узнавания координат по осям. Вот это я имел ввиду есть ли возможно как-то прикрутить данный девайс к драйверу джойстика, или каким нибудь другим способом что бы оно распознавалось автохоткеим.
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		Chip - респект за программу :) А количество кнопок можно увеличить? А то катастрофически нужно 14 шт.
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		Прогу переделываю потихоньку, в новой версии можно будет назначать до 100 кнопок через программу, а в в текущей версии можно хоть 40 кнопок назначить, только в ручную прописывать в файле config.txt
Ивините за временное неудобство
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		Потихоньку начал переделывать программу, визуальной частью пока не занимаюсь, делаю программу удобной в использовании(юзабильной).
Что переделал: 
Интерфейс стал намного удобнее и понятнее
Для конфигурирования число горячих клавиш не ограничено(ограничен возможностью АЦП)
Добавились звуковые эффекты
Программу можно посадить в трей нажав кнопку минимизация
Следующий этап скрестить конфигурацию и программу hotkey в один флакон. 
Хотел бы поинтересоватся стоит ли так делать?
Скачать новую версию программы 
http://www.compcar.ru/forum/attachme...4&d=1253162092
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		
	Цитата:
	
		
		
			
				Сообщение от 
ghostic
				
			 
			Под совместимостью я подразумевают что бы можно было данный девайс индефицировать в скрипте autohotkeya, получать от него координаты, имя устройства и т.д. то что понадобится, а далее прикручивать скриптовым языком к чему либо. Например как дела обстоят с микрухой от джойстика, когда она подсоединена к усб и настроена. По этому 
линку лежат 2 скрипта для автохоткей, первый это для настройки кнопок и индификации, а второй для узнавания координат по осям. Вот это я имел ввиду есть ли возможно как-то прикрутить данный девайс к драйверу джойстика, или каким нибудь другим способом что бы оно распознавалось автохоткеим.
 
			
		
	 
 Для чего ? В программе это у все реализовано и намного удобнее чем в autohotkey
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		Очередное обновление, тестируем. 
Увеличено разрешение (шаг сопротивления), теперь измерение производится с шагом примерно 1ом . Добавлена погрешность измерения  в пределах 10ом  +5ом -5ом, это значит кнопки можно назначать с шагом 11ом (всего 93 кнопки)
Теперь управляющая программа садится в трей ,  можно настраивать на любые клавиши которые есть на вашей клавиатуре, в том числе и мультимедийные клавиши. Еще хотелось бы услышать ваши пожелания .
Что бы вам еще хотелось добавить? Управление какими устройствами , задержку на включение камеры з.х. и т.д.
Следующая версия будет поддерживать работу с Энкодером
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		
	Цитата:
	
		
		
			
				Сообщение от 
Chip
				
			 
			Для чего ? В программе это у все реализовано и намного удобнее чем в autohotkey
			
		
	 
 т.е. вы хотите сказать что можно с помощью вашего ПО и железяки указывать комбинацию клавиш или клавишу на активное или не активное окно? Если ДА, то хорошо, а если НЕТ, то хотелось бы видеть в ПО данную фитчу.
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		Эмуляция нажатий любых клавиш или их комбинаций , передаются любому активному окну.
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		
	Цитата:
	
		
		
			
				Сообщение от 
Chip
				
			 
			Эмуляция нажатий любых клавиш или их комбинаций , передаются любому активному окну.
			
		
	 
 Значит еще не всё реализовано.
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		Как это не все?
Все требуется пользователю реализовано.
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		Я как пользователь для меня данное ПО пригодится только для регулировки звука, а остальные кнопочки будут отдыхать, ибо оно не умеет нажимать в неактивные окна и делать их активными или нажимать и оставлять их неактивными.
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		Стандартная клавиатура тоже не умеет передавать нажатия не активным приложениям, но почему то ни у кого не возникает вопросов.
Для меня не проблема добавить функцию отпрвки сообщений всем  окнам. Просто ты пока один кому это нужно.
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		Да хотелось бы такую функцию видеть, но отправка сообщения всем окнам это жестковато. :) Можно же наверно сделать поиск нужно окна который вбит в конфиг, если ПО в конфиге найдет нужное имя окна то отправка ему сообщения о нажатие клавиши.
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		Тогда можно только для AHK отправлять
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		Напиши имя окна у AHK, сейчас нет проги под рукой посмотреть.
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		(Имя окна "Панель управления AVerTV" его ahk class "AVerTVApp" Кст а можно ли взглянуть на исх ПО и на каком языке они написаны?
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		
	Цитата:
	
		
		
			
				Сообщение от 
ghostic
				
			 
			Да хотелось бы такую функцию видеть, но отправка сообщения всем окнам это жестковато. :) Можно же наверно сделать поиск нужно окна который вбит в конфиг, если ПО в конфиге найдет нужное имя окна то отправка ему сообщения о нажатие клавиши.
			
		
	 
 Настрой на одну из кнопок пульта функцию переключения между открытими приложениями ALT+TAB и активируй то окно какое тебе надо.
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		А такое можно добавить? :)
	Цитата:
	
		
		
			При появлении +12в. нажимается любая введенная комбинация кнопок, при пропадании любая другая комбинация.
			
		
	
 
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		+12В НА ВХОД Ардуино подавить?
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		
	Цитата:
	
		
		
			
				Сообщение от 
Chip
				
			 
			+12В НА ВХОД Ардуино подавить?
			
		
	 
 Через резистор.
Возможно будет автоматом включать плагин камеры в Centrafuse.
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		Думал реализовать это  , но в последнее время времени не хватает.
Сделаю по позже.
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		Чип вот я собрал пультик из старого джойстика сони
RMX4S 
http://www.telekom.com.pl/sony/images/RM-X4S_1.jpg
Так там сопротивление немного плавает на некоторых кнопках, надо сильно давить чтоб было стабильно.
Можно и добавить в программу чтоб она понимала диапазоны, в конфиг даже если ручками писать.
например:<46>Key1=80 />
a сделать <40-50>Key1=80 />
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		Сделаю чуть позже , а какое максимальное и минимальное сопротивление пульта?
У программмы есть диапозон плюс минус 5  , выглядит вот так  35<-40->45
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		большинство укладываются в +-5 но есть 1 или две капризные которые приходится давить чтоб уложиться, хотя конечно может разобрать почистить
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		Залил обновленую версию программы.
Теперь можно регулировать пределы срабатывания.
Если например вы выбрали значение 10 то значит предел срабатывания будет лежать в пределах 10 едениц как меньшую так и в большую сторону. Для добавления значения в конфиг кликните по измененной вами цифре .
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		Обновил программу в шапке.
Теперь программа работает и с поворотным энкодером
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		Здрвствуйте, спасибо за столь полезную программулину для кар пс! 
Есть несколько пожеланий если у вас будет время для обновления программы! 
1. Добавить функцию удержания кнопок, (для выборочных кнопок , например сделать в вашем скетче поле выбора с удержанием или без)
   
2. Функция кнопки MODE 
 
 у меня в скрипте под AHK это выглядело так 
1: 
     if  (joyz >= JKey_PREV_min) and (joyz <= JKey_PREV_max)
      
         {
          timer:=timer+1
           if (timer = 15)
             {
              send, ^+3 ; УДЕРЖАИЕ PREV
             }
            return
            }
      SetTimer, PREV_T, off  ; Stop monitoring the button.
      if (timer < 15)
      	{
        send, ^+4 ; КОРОТКИЙ PREV
        }
        timer=0
2. ;-----------------------
MODE_T: 
     
     if  (joyz >= JKey_MODE_min) and (joyz <= JKey_MODE_max)
      
         {
          timer:=timer+1
           if (timer = 15)
             {
              send, ^+5 ; УДЕРЖАИЕ MODE
             }
            return
            }
      SetTimer, MODE_T, off  ; Stop monitoring the button.
      if (timer < 15)
      	{
 if (mode_b = 1)
   {
   send,  ^+9  ; Первое нажатие МОДЕ
   }
  else
   {
    send,  ^+0 ; Втрое нажатие моде
   }
   }
        timer=0
        mode_b:=mode_b-1
        mode_b:=ABS(mode_b)
        return 
тоесть кнопка мод имеет 3 назначения 
при первом нажатии посылает одну первую комбинацию клавишь при втором другую и так по круга, а при удержании еще одну ( в центрифуге очень удобно радио-плейлис, и при удержании навигация!
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		А энкодеры с нажатием не появятся в кармониторе?
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		Есть но дорогие. 200руб.
Их и выкладывать не стали потому как дорого купили
	 
 - 
	
	
	
		
Re: Управление рулевыми кнопками при помощи Carduino.
	
	
		Код подправлю под короткое нажатие и нажатие с удержанием