Показать сообщение отдельно
Старый 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_AINPUT_PULLUP); // encoder 1
  
pinMode(pin_enc_BINPUT_PULLUP); // encoder 2
  
pinMode(pin_pauseINPUT_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
Просмотров: 1524
Размер:	123.4 Кб
ID:	34187   Нажмите на изображение для увеличения
Название: DSCF0145.jpg
Просмотров: 1401
Размер:	113.1 Кб
ID:	34188  
putok вне форума   Ответить с цитированием