Нужна помощь. Как сделать Переключение режимов на кастомной 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();
}
}
//здесь может быть любое ваше действие
}