» » » Резистивная клавиатура на 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качиваний: 331)
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Понедельник
10-12-2018
07:04
Поиск по сайту

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


Логин:
Пароль:
Поиск документации
Новое на форуме
проектирование схем электрич [Поиск схем] Ответов 0, последний: 8-10-2018, 18:38 от Openair
как впихнуть модели? [OrCAD] Ответов 0, последний: 11-09-2018, 16:35 от BIOS
светодиодная индикация на буфере с открытым коллектором [Поиск схем] Ответов 0, последний: 26-05-2018, 14:40 от maxim-us
Унч на полевых транзисторах [Усилители] Ответов 31, последний: 12-01-2018, 16:34 от GTS
Регулятор к швейной машинке [Поиск схем] Ответов 33, последний: 28-05-2017, 22:12 от GeoS
Новое в блогах
Если arduino не переходит в режим DFU 16.04.2017 - Если arduino не переходит в режим DFU (0)
Программатор ключей Ibutton RW1990 на arduino 05.05.2016 - Программатор ключей Ibutton RW1990 на … (3)
Регулятор громкости на Arduino и энкодере 31.03.2016 - Регулятор громкости на Arduino и энкод… (2)
Двухканальный ШИМ регулятор мощности на AtTiny 13 27.03.2016 - Двухканальный ШИМ регулятор мощности н… (2)
Резистивная клавиатура на Arduino pro micro 23.03.2016 - Резистивная клавиатура на Arduino pro … (0)
Статистика
Пользователей онлайн: 51
Гостей: 51
Реклама
Социальные сети
Теги
10 полосный анализатор спектра, adch, ARM, atmega, atmega8, AVR, codevisin, codevision, Eagle3D, Layout, mega8, NEC, RGB, twi, USB, Wi-Fi, антенна, высокое напряжение, журнал, звуковая карта, зу, индикатор, компилятор, Конкурс 2013, микроконтроллер, микроконтроллеры, ПДУ, первый, программа, проект, прошивка, радиолоцман, распиновка, расчёт, тестер, трансформатор, усилитель, ЦАП, часы, электронный предохранитель

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