Нужна помощь. Как сделать Переключение режимов на кастомной PS2 клавиатуре (Leonardo)
- Войдите на сайт для отправки комментариев
Доброго времени суток.
Задумка такая. Есть Ардуино Leonardo, библиотека <PS2Keyboard.h> и NUMpad клавиатура.
Макросы, нажатия, написание текста - все срабатывает, все ок. Но хотелось бы сделать переключение режимов по кругу, через нажатие механической кнопки.
Например, по дефолту будет Режим1 и нажатие на NUM 3 = Privet, жмякаем кнопку 1 раз, включается Режим2 - и NUM 3 = Kak dela?.
Трудность для меня заключается в том, что нажатие на клавиши клавиатуры активируют смены режимов. Как заставить клавиатуру не переключать режимы?
Или если еще проще - как сделать адекватное "меню выбора режимов" циклически по нажатию на механическую кнопку?
Вот черновик кода. В нем, почему-то вообще не работает переключение режимов через механическую кнопку. Все ловится с клавиатуры.
#include <PS2Keyboard.h> #include "Keyboard.h" #include "Mouse.h" #define BTN2 A3 // первая кнопка const int BTN1 = 12; const int MOS = 5; //пин подключения транзистора КТ361 const int DataPin = 3; const int IRQpin = 2; int regim=1; int flag=0; PS2Keyboard keyboard; void setup() { pinMode(BTN1, INPUT); pinMode(BTN2, INPUT); delay(1000); keyboard.begin(DataPin, IRQpin); pinMode(MOS, OUTPUT); digitalWrite(MOS, HIGH); delay(1000); digitalWrite(MOS, LOW); //перезагрузка USB клавиатуры для отпределения ее как PS/2 устройства } void loop() { { if (digitalRead(BTN2)==HIGH&&flag==0);{ regim++; flag=1; if (regim>2) { regim=1; } flag = digitalRead(BTN2); } if(digitalRead(BTN2)==LOW&&flag==1)//если кнопка НЕ нажата //и переменная flag равна - 1 ,то ... { flag=0;//обнуляем переменную "knopka" } } { if(regim==1)//1 режим if (keyboard.available()) { // read the next key char c = keyboard.read(); // check for some of the special keys if (c == '3' ) Keyboard.write('t'); delay(600); Keyboard.write('3'); delay(600); Keyboard.write('6'); delay(600); Keyboard.write(10); // Нажатие клавиши Enter (10 - код Американской раскладки ASCII) delay(100); Keyboard.releaseAll(); } } { if(regim==2)//2 режим if (keyboard.available()) { // read the next key char c = keyboard.read(); // check for some of the special keys if (c == '5' ) Keyboard.write('5'); delay(600); Keyboard.write('5'); delay(600); Keyboard.write('5'); delay(600); Keyboard.write(10); // Нажатие клавиши Enter (10 - код Американской раскладки ASCII) delay(100); Keyboard.releaseAll(); } } //здесь может быть любое ваше действие }