» » » Резистивная клавиатура на Arduino pro micro

Резистивная клавиатура на Arduino pro micro

Автор: Tonich от 23-03-2016, 12:07

Резистивная клавиатура на Arduino pro micro

Один из первых моих проектов на Arduino. Устройство предназначено для использования совместно с ПК или планшетом, для расширения возможностей стандартной клавиатуры.

Резистивная клавиатура на Arduino pro micro


Резистивные кнопки подключаются к аналоговому входу A0, при нажатии кнопки на АЦП контроллера появляется определённый уровень напряжения и эмулируется нажатие клавиатурной клавиши.
Описание библиотеки MouseKeyboard.

Я использовал данный контроллер для обработки нажатий резистивного подрулевого джойстика в автомобиле. Обрабатываются клавиши управление громкостью и Mute, переключения треков(при коротком нажатии) и перемотки(при удержании), а также воспроизведение/пауза (при длительном нажатии) и ALT+TAB при коротком. Можно назначить большое количество других клавиш или их комбинаций.
В данной схеме можно изменить количество кнопок, подобрав сопротивления резисторов.

int analogPin=0;    //пин для подключения кнопок 
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<=175 && flag == 0) // все кнопки отпущены 
  { 
    eventTime=millis(); 
  } 

 // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
  if(millis()-eventTime>10 && millis()-eventTime<499 && data>=881 && data<=901 && flag == 0)  
  {  
    Remote.increase(); 
    flag = 5; 
    delay(10); 
    Remote.clear(); 
  } 
  // удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500)
  if(millis()-eventTime>500 && data>=881 && data<=901 && flag == 5 || data>=881 && data<=901 && flag == 3)  
  {  
    Remote.increase(); // действие после удержание кнопки, Увеличить громкость каждые 0,1 секунды 
    flag = 3; 
    Remote.clear(); 
    delay(100); 
  } 
  
  // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
  if(millis()-eventTime>10 && millis()-eventTime<499 && data>=961 && data<=981 && flag == 0)  
  {  
    Remote.decrease(); 
    flag = 6; 
    delay(10); 
    Remote.clear(); 
  } 
  
  
  // удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500)
  if(millis()-eventTime>500 && data>=961 && data<=981 && flag == 6 || data>=961 && data<=981 && flag == 3)  
  {  
    Remote.decrease(); // действие после удержание кнопки, Уменьшить громкость каждые 0,1 секунды 
    flag = 3; 
    Remote.clear(); 
    delay(100); 
  } 

  //********************** AltTab + Play/pause ************************************     
  // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
  if(millis()-eventTime>10 && millis()-eventTime<499 && data>=490 && data<=510)  
  {  
    flag = 1; 
  } 

  if(data<=175 && flag == 1 && 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<=175 && flag == 1 && pauseMillis != 0) // действие после короткого повторного нажатия кнопки, Alt+Tab 
  { 
    Keyboard.press(KEY_TAB); 
    Keyboard.release(KEY_TAB); 
    flag = 0; 
    pauseMillis = millis(); 
  } 

  if(pauseMillis && millis()-pauseMillis >= 800 && data<=175) // && flag == 7 && data<=175) 
  { 
    flag = 0; 
    pauseMillis = 0; 
    Keyboard.releaseAll(); 
  } 
  
 // удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500) 
  if(millis()-eventTime>500 && data>=490 && data<=510 && flag == 1) 
  {  
    Remote.play_pause(); // действие после удержание кнопки, воспроизведение / пауза 
    flag = 0; 
    delay(10); 
    Remote.clear(); 
  } 
  //********************** Next и Fast Forward ************************************     
  // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
  if(millis()-eventTime>10 && millis()-eventTime<499 && data>=644 && data<=664)  
  {  
    flag = 2; 
  } 

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

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

  if(data<=175 && flag == 4) // действие после короткого нажатия кнопки, Previous 
  { 
    Remote.previous(); 
    flag = 0; 
    delay(10); 
    Remote.clear(); 
  } 
  // удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500)
  if(millis()-eventTime>500 && data>=775 && data<=795 && flag == 4 || data>=775 && data<=795 && flag == 3)  
  {  
    Remote.rewind(); // действие после удержание кнопки, Rewind 
    flag = 3; 
    Remote.clear(); 
    delay(100); 
  } 

  if(data<=175 && flag == 3 || data<=175 && flag == 5 || data<=175 && flag == 6) // действие после отпускания кнопки 
  { 
    flag = 0; 
  }    
}    


Скачать скетч: resistkeyboard.ino [5,68 Kb] (cкачиваний: 197)
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Четверг
17-08-2017
20:36
Поиск по сайту

Профиль
Здравствуйте Гость


Логин:
Пароль:
Поиск документации
Новое на форуме
Регулятор к швейной машинке [Поиск схем] Ответов 33, последний: 28-05-2017, 22:12 от GeoS
вопрос по mk cd4017 [Болталка] Ответов 2, последний: 23-02-2017, 17:43 от skameykin22
датчик движения из видеокамеры [Болталка] Ответов 0, последний: 9-02-2017, 07:18 от Germ
платы расширения arduino due [Поиск аналогов] Ответов 0, последний: 9-02-2017, 07:03 от Germ
Часы пропеллер [Светоэффекты] Ответов 103, последний: 9-01-2017, 21:17 от Andrey
Новое в блогах
Если arduino не переходит в режим DFU 16.04.2017 - Если arduino не переходит в режим DFU (0)
Программатор ключей Ibutton RW1990 на arduino 05.05.2016 - Программатор ключей Ibutton RW1990 на … (3)
Регулятор громкости на Arduino и энкодере 31.03.2016 - Регулятор громкости на Arduino и энкод… (1)
Двухканальный ШИМ регулятор мощности на AtTiny 13 27.03.2016 - Двухканальный ШИМ регулятор мощности н… (0)
Резистивная клавиатура на Arduino pro micro 23.03.2016 - Резистивная клавиатура на Arduino pro … (0)
Статистика
Пользователей онлайн: 23
Гостей: 23
Реклама
Социальные сети
Теги
10 полосный анализатор спектра, 5.1 регулятор, ARM, atmega, atmega8, AVR, bc547, codevision, Eagle3D, khazama, mega8, NEC, PIC, twi, USB, Wi-Fi, анализатор, антенна, высокое напряжение, ЖК, звуковая карта, зу, индикатор, Конкурс 2013, микроконтроллер, микроконтроллеры, ПДУ, первый, программа, программирования, проект, прошивка, радиолоцман, распиновка, симулируем, трансформатор, усилитель, халява, ЦАП, часы

Показать все теги