Показать сообщение отдельно
Старый 26.02.2014, 20:24   #214
Chubaka885
Старший Пользователь
 
Регистрация: 08.10.2013
Возраст: 41
Регион: 56
Машина: Toyota Corolla e150
Сообщений: 325
Chubaka885 is a jewel in the roughChubaka885 is a jewel in the roughChubaka885 is a jewel in the roughChubaka885 is a jewel in the rough
По умолчанию

Готовый скетч для резестивных кнопок, любезно предоставленный lti1 за что ему огромное спасибо. Для работы требуются модифицированные USBAPI.h, HID.cpp. Скачать вложение с поста #182.
Скетч работает на arduino pro micro, arduino leonardo.

Алгоритм:
Кнопки громкости.
Одиночное нажатие - прибавление/убавление на одну единицу.
Удержание - прибавление/убавление до отпускания.

Кнопки следующий/предидущий трек
Одно нажатие - следующий/предидущий трек
Удержание - перемотка

Кнопка mode
первое нажатие - отсылается нажатие ALT и два раза TAB. Каждое следующее нажатие, если не истекло 800 мили сек. отсылает один раз TAB, ALT остаётся нажатым.
Удержание - плей/пауза.

PHP код:
int analogPin=6;    //пин для подключения кнопок
int data;
unsigned long flag 0;
unsigned long eventTime 0;
unsigned long pauseMillis 0;

void setup()
{
Keyboard.begin();
}

void loop()
{
  
data=analogRead(analogPin); //читаем значение нажатой кнопки
  
//********************** Громкость ************************************

  
if(data>=950 && flag == 0// все кнопки отпущены
   
{
    
eventTime=millis();
   }

  if(
millis()-eventTime>10 && millis()-eventTime<499 && data>=210 && data<=230 && flag == 0// короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
   

    
Remote.increase();
    
flag 5;
    
delay(10);
    
Remote.clear();
   }

  if(
millis()-eventTime>500 && data>=210 && data<=230 && flag == || data>=210 && data<=230 && flag == 3// удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500)
   

    
Remote.increase(); // действие после удержание кнопки, Увеличить громкость каждые 0,1 секунды
    
flag 3;
    
Remote.clear();
    
delay(100);
   }

  if(
millis()-eventTime>10 && millis()-eventTime<499 && data>=457 && data<=477 && flag == 0// короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
   

    
Remote.decrease();
    
flag 6;
    
delay(10);
    
Remote.clear();
   }

  if(
millis()-eventTime>500 && data>=457 && data<=477 && flag == || data>=457 && data<=477 && flag == 3// удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500)
   

    
Remote.decrease(); // действие после удержание кнопки, Уменьшить громкость каждые 0,1 секунды
    
flag 3;
    
Remote.clear();
    
delay(100);
   }
   
//********************** AltTab + Play/pause ************************************    

if(millis()-eventTime>10 && millis()-eventTime<499 && data>=567 && data<=587// короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
   

    
flag 1;
   }

  if(
data>=950 && flag == && pauseMillis == 0// действие после короткого нажатия кнопки, Alt+Tab
   
{
    
Keyboard.press(KEY_LEFT_ALT);
    
Keyboard.press(KEY_TAB);
    
Keyboard.release(KEY_TAB);
    
Keyboard.press(KEY_TAB);
    
Keyboard.release(KEY_TAB);
    
flag 0;
    
pauseMillis millis();
   }
   
  if(
data>=950 && flag == && pauseMillis != 0// действие после короткого повторного нажатия кнопки, Alt+Tab
   
{
    
Keyboard.press(KEY_TAB);
    
Keyboard.release(KEY_TAB);
    
flag 0;
    
pauseMillis millis();
   }
   
  if(
pauseMillis && millis()-pauseMillis >= 800 && data>=950// && flag == 7 && data>=950)
  
{
    
flag 0;
    
pauseMillis 0;
    
Keyboard.releaseAll();
  }
   
  if(
millis()-eventTime>500 && data>=567 && data<=587 && flag == 1// удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500)
   

    
Remote.play_pause(); // действие после удержание кнопки, воспроизведение / пауза
    
flag 0;
    
delay(10);
    
Remote.clear();
   }
//********************** Next и Fast Forward ************************************    
    
  
if(millis()-eventTime>10 && millis()-eventTime<499 && data>=&& data<=10// короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
   

    
flag 2;
   }
   
  if(
data>=950 && flag == 2// действие после короткого нажатия кнопки, Next
   
{
    
Remote.next();
    
flag 0;
    
delay(10);
    
Remote.clear();
   }

  if(
millis()-eventTime>500 && data>=&& data<=10 && flag == || data>=&& data<=10 && flag == 3// удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500)
   

    
Remote.forward(); // действие после удержание кнопки, Fast Forward
    
flag 3;
    
Remote.clear();
    
delay(100);
   }
//********************** Previous и Rewind ************************************    
    
  
if(millis()-eventTime>10 && millis()-eventTime<499 && data>=74 && data<=94// короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
   

    
flag 4;
   }
   
  if(
data>=950 && flag == 4// действие после короткого нажатия кнопки, Previous
   
{
    
Remote.previous();
    
flag 0;
    
delay(10);
    
Remote.clear();
   }

  if(
millis()-eventTime>500 && data>=74 && data<=94 && flag == || data>=74 && data<=94 && flag == 3// удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500)
   

    
Remote.rewind(); // действие после удержание кнопки, Rewind
    
flag 3;
    
Remote.clear();
    
delay(100);
   }
   
  if(
data>=950 && flag == || data>=950 && flag == || data>=950 && flag == 6// действие после отпускания кнопки
   
{
    
flag 0;
   }   


Последний раз редактировалось Chubaka885; 24.01.2015 в 01:14.
Chubaka885 вне форума   Ответить с цитированием