#include <Keypad.h> // библиотека для клавиатуры 4х4
#include <Mouse.h> // библиотека для компьютерной мыши
#include <Keyboard.h> // библиотека позволяет плате Arduino с возможностями USB выступать в качестве клавиатуры.
// Настройка кнопочной матрицы
const byte ROWS = 6; // количество строк
const byte COLS = 6; // количество столбцов
// Располагаем обозначения кнопок, по принципу клавиатуры
char hexaKeys[ROWS][COLS] = {
{'3','2','1','q','w','e'},
{'4','a','s','d','f','r'},
{'z','x','c','v','g','t'},
{'b','h','y','u','i','o'},
{'n','j','k','l','9','p'},
{'m','5','6','7','8','0'}
};
// Подключение кнопочной матрицы к выводам
byte rowPins[ROWS] = {7, 6, 5, 4, 3, 2}; // выводы, подключенные ко строкам
byte colPins[COLS] = {13, 12, 11, 10, 9, 8}; // выводы, подключенные ко столбца
// Получение данных с клавиатуры
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), colPins, rowPins, COLS, ROWS);
// Определяем подключение выводов джойстика
#define VRX 27 // ось Х
#define VRY 26 // ось Y
#define SW 14 // кнопка джойстика
// Определяем данные
int joystick_x, joystick_y, joystick_button;
void setup(){
Serial.begin(9600); // открываем последовательную связь на скорости 9600
Mouse.begin(); // начинаем эмуляцию мыши, подключенной к компьютеру
Keyboard.releaseAll(); // команда говорит отпустить клавиши
pinMode(SW, INPUT); // настраиваем контакт для работы в качестве входа
digitalWrite(SW, HIGH); // функция управления кнопкой
delay(100); // время паузы в миллисекундах
// Настройка выводов кнопочной матрицы
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
pinMode(12, INPUT_PULLUP);
pinMode(13, INPUT_PULLUP);
}
// Бесконечный цикл выполнения программ
void loop(){
joystick_controls();
mouse_controls();
}
// Программа управления джойстиком
void joystick_controls(){
joystick_x = analogRead(VRX);
joystick_y = analogRead(VRY);
joystick_button = digitalRead(SW);
}
// Перемещение курсора в соответствии движения джойстика
void mouse_controls(){
if(joystick_y > 700) Mouse.move(0, -15);
if(joystick_y < 300) Mouse.move(0, 15);
if(joystick_x > 700) Mouse.move(-15, 0);
if(joystick_x < 300) Mouse.move(15, 0);
if(joystick_button == 0) Mouse.click(MOUSE_LEFT);
delay(100);
char customKey = customKeypad.getKey();
if (customKey){
Keyboard.write(customKey);
}}