Прошивка написана, по большей части, методом "гугления" в Яндексе по разным нюансам работы библиотек
///////////////////////////////////////////////////////////////////////////////////////
//
//    Клавиатура макросов на основе Arduino Leo / Arduino PRO Micro
//    автор: Акулов А.С. aka DrAku1a
//    дата: 18.08.2021
//
//    Thanks to: https://forum.arduino.cc/t/numpad-keys/257542/8
//          and  https://forum.arduino.cc/t/numpad-keys/257542/9            
//  	      and: https://habr.com/ru/post/460409/
//
//    (с) Free + Open Source
//
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
//
//  В данной прошивке прописаны макросы для программирования на языке "1С"
//  Опрашивается 12 клавиш кейпада (4 ряда x 3 колонки) 
//  Не изменяет текущий язык ввода, а введенные символы не зависят от текущего языка ввода
//  Ввод осуществляется имитацией ввода ALT+(код на цифровой клавиатуре)
//  Ориентировано на RU-клавиатуры, как будет вести себя в других языках - неизвестно (предполагаю, проблема возникнет только при написании "ЕстьNULL"
//
//  Скетч использует 7332 байт памяти устройства.
//  Глобальные переменные используют 373 байт динамической памяти.
//
///////////////////////////////////////////////////////////////////////////////////////
#include "Keypad.h"
#include "Keyboard.h"
const byte ROWS = 5; //число строк у нашей клавиатуры
const byte COLS = 4; //число столбцов у нашей клавиатуры
char hexaKeys[ROWS][COLS] = {// здесь мы располагаем названия наших клавиш, как на клавиатуре,для удобства пользования
  {'L', '|', 'A', '"'},
  {'>', '{', '#', 'B'},
  {'<', '}', '$', 'B'},
  {'[', ']', '&', 'N'},
  {'I', 'I', '@', 'N'}
};
char altKeys[ROWS][COLS] = {// альтернативная раскладка - аналог цифровой клавиатуры
  {'L', '/', 'x', '-'},
  {'7', '8', '9', '+'},
  {'4', '5', '6', '+'},
  {'1', '2', '3', 'R'},
  {'0', '0', '.', 'R'}
};
bool keyMode = false;
byte rowPins[ROWS] = { 5,  6,  7,  8, 9}; //к каким выводам подключаем управление строками
byte colPins[COLS] = {10, 16, 14, 15};    //к каким выводам подключаем управление столбцами
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
#define KEYPAD_0 234
#define KEYPAD_1 225
#define KEYPAD_2 226
#define KEYPAD_3 227
#define KEYPAD_4 228
#define KEYPAD_5 229
#define KEYPAD_6 230
#define KEYPAD_7 231
#define KEYPAD_8 232
#define KEYPAD_9 233
#define KEYPAD_DIV 220
#define KEYPAD_MLT 221
#define KEYPAD_MNS 222
#define KEYPAD_PLS 223
#define KEYPAD_ENT 224
#define KEYPAD_DOT 235
const uint8_t _keypadmap[10] = {KEYPAD_0, KEYPAD_1, KEYPAD_2, KEYPAD_3, KEYPAD_4, KEYPAD_5, KEYPAD_6, KEYPAD_7, KEYPAD_8, KEYPAD_9};
void SendCode(uint8_t code) {
  if (code>=32) {
    Keyboard.press(KEY_LEFT_ALT);
    delay(10);
    uint8_t digit = (uint8_t)(code / 100);
    if(digit>=1) {
      Keyboard.press(_keypadmap[digit]); 
      Keyboard.release(_keypadmap[digit]);
    };
    
    digit = (uint8_t)((code % 100) / 10);
    Keyboard.press(_keypadmap[digit]); 
    Keyboard.release(_keypadmap[digit]);
    digit = (uint8_t)(code % 10);
    Keyboard.press(_keypadmap[digit]); 
    Keyboard.release(_keypadmap[digit]);
    
    Keyboard.release(KEY_LEFT_ALT);
  }
}
void SendNumericKey(byte code) {
    Keyboard.releaseAll();
    Keyboard.press(code); 
    Keyboard.release(code);
    Keyboard.releaseAll();
}
char GetNumericKey(char customKey) {
  for(byte r=0; r<ROWS; r++)
    for(byte c=0; c<COLS; c++)
      if(hexaKeys[r][c]==customKey) return altKeys[r][c];
}
void setup() {
  Keyboard.begin();
  pinMode(A3, OUTPUT);
  pinMode(2, INPUT_PULLUP);
  delay(10);
  if(digitalRead(2)==0){
    keyMode = !keyMode;
    Keyboard.releaseAll();
    digitalWrite(A3, keyMode?HIGH:LOW);
  };  
}
void loop() {
  char customKey = customKeypad.getKey();
  if (customKey) {
    
    if(!keyMode) {
      customKey = GetNumericKey(customKey);
    };
  
    switch (customKey) {
      case 'N': 
                  //NULL = [78][85][76][76]
                  Keyboard.releaseAll();
                  SendCode(78);
                  SendCode(85);
                  SendCode(76);
                  SendCode(76);
                  Keyboard.releaseAll();
                  break;
                
      case 'I': 
                  //ЕстьNULL = [133][225][226][236][78][85][76][76]
                  Keyboard.releaseAll();
                  SendCode(133);
                  SendCode(225);
                  SendCode(226);
                  SendCode(236);
                  SendCode(78);
                  SendCode(85);
                  SendCode(76);
                  SendCode(76);
                  Keyboard.releaseAll();
                  break;
              
      case '&': 
                  //& = [38]
                  Keyboard.releaseAll();
                  SendCode(38);
                  Keyboard.releaseAll();
                  break;
      case 'A': 
                  // ' (одинарная кавычка)
                  Keyboard.releaseAll();
                  SendCode(39);
                  Keyboard.releaseAll();
                  break;
      case '|': 
                  // | (вертикальная черта / вертикальный слэш / "пайп")
                  Keyboard.releaseAll();
                  SendCode(124);
                  Keyboard.releaseAll();
                  break;
      case 'B': 
                  // <> (больше-меньше / не равно)
                  Keyboard.releaseAll();
                  SendCode(60);
                  SendCode(62);
                  Keyboard.releaseAll();
                  break;
      case 'C': 
                  // <= (меньше или равно)
                  Keyboard.releaseAll();
                  SendCode(60);
                  SendCode(61);
                  Keyboard.releaseAll();
                  break;
      case 'D': 
                  // >= (больше или равно)
                  Keyboard.releaseAll();
                  SendCode(62);
                  SendCode(61);
                  Keyboard.releaseAll();
                  break;
      case '[': 
                  // [ - открывающая квадратная скобка, обычно, для массивов
                  Keyboard.releaseAll();
                  SendCode(91);
                  Keyboard.releaseAll();
                  break;
      case ']': 
                  // ] - закрывающая квадратная скобка, обычно, для массивов
                  Keyboard.releaseAll();
                  SendCode(93);
                  Keyboard.releaseAll();
                  break;
      case '{': 
                  // [ - открывающая квадратная скобка, обычно, для массивов
                  Keyboard.releaseAll();
                  SendCode(123);
                  Keyboard.releaseAll();
                  break;
      case '}': 
                  // ] - закрывающая квадратная скобка, обычно, для массивов
                  Keyboard.releaseAll();
                  SendCode(125);
                  Keyboard.releaseAll();
                  break;
      case '<': 
                  // < (меньше)
                  Keyboard.releaseAll();
                  SendCode(60);
                  Keyboard.releaseAll();
                  break;
      case '>': 
                  // > (больше)
                  Keyboard.releaseAll();
                  SendCode(62);
                  Keyboard.releaseAll();
                  break;
      case '#': 
                  // # (решетка)
                  Keyboard.releaseAll();
                  SendCode(35);
                  Keyboard.releaseAll();
                  break;
      case '@': 
                  // @ (собака)
                  Keyboard.releaseAll();
                  SendCode(64);
                  Keyboard.releaseAll();
                  break;
      case '"': 
                  // " (двойная кавычка)
                  Keyboard.releaseAll();
                  SendCode(34);
                  Keyboard.releaseAll();
                  break;
      case '$': 
                  // $ (доллар)
                  Keyboard.releaseAll();
                  SendCode(36);
                  Keyboard.releaseAll();
                  break;
      case '/': 
                  SendNumericKey(KEYPAD_DIV);
                  break;
      case 'x': 
                  SendNumericKey(KEYPAD_MLT);
                  break;
      case '-': 
                  SendNumericKey(KEYPAD_MNS);
                  break;
      case '+': 
                  SendNumericKey(KEYPAD_PLS);
                  break;
      case '.': 
                  SendNumericKey(KEYPAD_DOT);
                  break;
      case '0': 
                  SendNumericKey(KEYPAD_0);
                  break;
      case '1': 
                  SendNumericKey(KEYPAD_1);
                  break;
      case '2': 
                  SendNumericKey(KEYPAD_2);
                  break;
      case '3': 
                  SendNumericKey(KEYPAD_3);
                  break;
      case '4': 
                  SendNumericKey(KEYPAD_4);
                  break;
      case '5': 
                  SendNumericKey(KEYPAD_5);
                  break;
      case '6': 
                  SendNumericKey(KEYPAD_6);
                  break;
      case '7': 
                  SendNumericKey(KEYPAD_7);
                  break;
      case '8': 
                  SendNumericKey(KEYPAD_8);
                  break;
      case '9': 
                  SendNumericKey(KEYPAD_9);
                  break;
      case 'R': 
                  SendNumericKey(KEYPAD_ENT);
                  break;
       case 'L': 
                  // NUM LOCK                  
                  keyMode = !keyMode;
                  //Keyboard.getLedStatus();
                  //if(!Keyboard.GetNumLockState()) Keyboard.press(219);
                  Keyboard.releaseAll();
                  digitalWrite(A3, keyMode?HIGH:LOW);
                  break;
   }
  }
 }