Нужна помощь. Как сделать Переключение режимов на кастомной PS2 клавиатуре (Leonardo)

Нет ответов
Lex_91
Offline
Зарегистрирован: 19.05.2019

Доброго времени суток. 
Задумка такая. Есть Ардуино 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();
    } 
 }      
        
      //здесь может быть любое ваше действие 
    }