Показать сообщение отдельно
Старый 02.01.2014, 20:42   #1
putok
Новый Пользователь
 
Регистрация: 05.04.2010
Регион: 54
Сообщений: 7
putok is on a distinguished road
По умолчанию Крутилка громкости Arduino HID

Так как регулировать громкость в машине с экрана тача это тот еще ад решил сделать крутилку. Случайно наткнулся на библиотеку MouseKeyboard и решил что это идеально мне подходит =) купил плату Leonardo. Суть такова, берем фубар, ему назначаем хот кеи на уменьшение звука и увеличение, а также на паузу ( в данном случае это сочетание CTRL + SHIFT + Q, A, P ) и эмулируем их. Как видно кнопок можно прикручивать огромную кучу =)

скетч
PHP код:
unsigned long currentTime;
unsigned long loopTime;
const 
int pin_enc_A = 2;       
const 
int pin_enc_B = 3;    
const 
int pin_pause = 4;    
unsigned char encoder_A;
unsigned char encoder_B;
unsigned char encoder_A_prev=0;
unsigned char pause;

void setup() {
  
pinMode(pin_enc_A, INPUT_PULLUP); // encoder 1
  
pinMode(pin_enc_B, INPUT_PULLUP); // encoder 2
  
pinMode(pin_pause, INPUT_PULLUP); // encoder pause
  
currentTime = millis();
  
loopTime = currentTime; 
  
Keyboard.begin();
}
 
void loop() {
  
currentTime = millis();
  if(
currentTime >= (loopTime + 5)){ // проверяем каждые 5мс (200 Гц)
    
encoder_A = digitalRead(pin_enc_A);     // считываем состояние выхода А энкодера 
    
encoder_B = digitalRead(pin_enc_B);     // считываем состояние выхода А энкодера    
    
if((!encoder_A) && (encoder_A_prev)){    // если состояние изменилось с положительного к нулю
      
if(encoder_B) 
       {
        
// выход В в полож. сост., значит вращение по часовой стрелке
         
Keyboard.press(KEY_LEFT_CTRL);
         
Keyboard.press(KEY_LEFT_SHIFT);
         
Keyboard.press('q');
         
delay(50);   
         
Keyboard.releaseAll();     
       }   
      else {
         
Keyboard.press(KEY_LEFT_CTRL);
         
Keyboard.press(KEY_LEFT_SHIFT);
         
Keyboard.press('a');
         
delay(50);   
         
Keyboard.releaseAll();          
      }   
    }   
    
encoder_A_prev = encoder_A;     // сохраняем значение А для следующего цикла 
    
    
    
if ( !digitalRead(pin_pause) )   {
       
pause=1;           
     }
     else {
      if ( 
pause ) {          
       
Keyboard.press(KEY_LEFT_CTRL);
       
Keyboard.press(KEY_LEFT_SHIFT);
       
Keyboard.press('p');
       
delay(50);   
       
Keyboard.releaseAll(); 
       
pause=0;
      }          
     }

    
loopTime = currentTime;
  }                         
} 
Миниатюры
Нажмите на изображение для увеличения
Название: DSCF0144.jpg
Просмотров: 1960
Размер:	123.4 Кб
ID:	34187   Нажмите на изображение для увеличения
Название: DSCF0145.jpg
Просмотров: 1781
Размер:	113.1 Кб
ID:	34188  
putok вне форума   Ответить с цитированием