// библиотека для эмуляции клавиатуры #include "Keyboard.h" // номера цифровых пинов кнопок #define BUTTON_PIN_1 2 #define BUTTON_PIN_2 3 #define BUTTON_PIN_3 4 #define BUTTON_PIN_4 5 // номера аналоговых пинов джойстика #define JOYSTICK_X A2 #define JOYSTICK_Y A5 // номера цифровых пинов светодиодов #define LED_GREEN A0 #define LED_RED A1 // переменные для хранения состояния сенсоров на джойстике int joystickValueX = 0; int joystickValueY = 0; int buttonState1 = 0; int buttonState2 = 0; int buttonState3 = 0; int buttonState4 = 0; // переменные для хранения временных интервалов long millisJoystickX = 0; long millisJoystickY = 0; long millisButtom1 = 0; long millisButtom2 = 0; long millisButtom3 = 0; long millisButtom4 = 0; bool state1 = true; bool state2 = true; bool state3 = true; bool state4 = true; void setup() { // открываем монитор Serial-порта Serial.begin(9600); // инициализируем эмуляцию клавиатуры Keyboard.begin(); // назначаем пины светодиодов в режим выхода pinMode(LED_RED, OUTPUT); pinMode(LED_GREEN, OUTPUT); } void loop() { // считывание состояние всех сенсоров на джойстике joystickRead(); // проверка на зажигание светодиодов joystickLed(); // проверка на нажатие клавиш joystickPress(); // проверка на отпускания клавиш joystickRelease(); } void joystickRead() { // считываем состояние джойстика и пинов кнопок joystickValueX = analogRead(JOYSTICK_X); joystickValueY = analogRead(JOYSTICK_Y); buttonState1 = digitalRead(BUTTON_PIN_1); buttonState2 = digitalRead(BUTTON_PIN_2); buttonState3 = digitalRead(BUTTON_PIN_3); buttonState4 = digitalRead(BUTTON_PIN_4); } void joystickLed() { // если нажата хотя бы одна кнопка if (!buttonState1 || !buttonState2 || !buttonState3 || !buttonState4 ) { // зажигаем зелёный светодиод digitalWrite(LED_GREEN, HIGH); } else { // гасим зелёный светодиод digitalWrite(LED_GREEN, LOW); } // если джойстик отклонен относительно своего обычного состояния if (joystickValueX > 600 || joystickValueX < 400 || joystickValueY > 600 || joystickValueY < 400 ) { // зажигаем красный светодиод digitalWrite(LED_RED, HIGH); } else { // гасим красный светодиод digitalWrite(LED_RED, LOW); } } void joystickPress() { // если джойстик отклонен вправо if (joystickValueX > 600) { // эмулируем нажатие и удерживание клавиши «d» Keyboard.press('d'); // запоминаем текущее время millisJoystickX = millis(); } // если джойстик отклонен влево if (joystickValueX < 400) { // эмулируем нажатие и удерживание клавиши «a» Keyboard.press('a'); // запоминаем текущее время millisJoystickX = millis(); } // если джойстик отклонен вниз if (joystickValueY < 400) { // эмулируем нажатие и удерживание клавиши «s» Keyboard.press('s'); // запоминаем текущее время millisJoystickY = millis(); } // если джойстик отклонен вверх if (joystickValueY > 600) { // эмулируем нажатие и удерживание клавиши «w» Keyboard.press('w'); // запоминаем текущее время millisJoystickY = millis(); } // если нажата кнопка «1» // и не прошёл заданный интервал времени с предыдущего нажатия данной кнопки if (!buttonState1 && state1 == 0) { // запоминаем состояние кнопки «1» state1 = true; // эмулируем нажатие и удерживание клавиши «k» Keyboard.press('k'); // запоминаем текущее время millisButtom1 = millis(); } // если нажата кнопка «2» // и не прошёл заданный интервал времени с предыдущего нажатия данной кнопки if (!buttonState2 && state2 == 0) { // запоминаем состояние кнопки «2» state2 = true; // эмулируем нажатие и удерживание клавиши «l» Keyboard.press('l'); // запоминаем текущее время millisButtom2 = millis(); } // если нажата кнопка «3» // и не прошёл заданный интервал времени с предыдущего нажатия данной кнопки if (!buttonState3 && state3 == 0) { // запоминаем состояние кнопки «y» state3 = true; // эмулируем нажатие и удерживание клавиши «y» Keyboard.press('y'); // запоминаем текущее время millisButtom3 = millis(); } // если нажата кнопка «4» if (!buttonState4 && state4 == 0) { // запоминимаем состояние кнопки «u» state4 = true; // эмулируем нажатие и удерживание клавиши «u» Keyboard.press('u'); // запоминаем текущее время millisButtom4 = millis(); } } void joystickRelease() { // если прошёл заданный интервал эмуляции нажатие клавиши // при отклонении джойстика влево или вправо if (millis() - millisJoystickX > 5) { // эмулируем отпускание клавиш «a» и «d» Keyboard.release('a'); Keyboard.release('d'); } // если прошёл заданный интервал эмуляции нажатие клавиши // при отклонении джойстика вверх или вниз if (millis() - millisJoystickY > 5) { // эмулируем отпускание клавиш «w» и «s» Keyboard.release('w'); Keyboard.release('s'); } // если прошёл заданный интервал эмуляции нажатие клавиши «k» if (millis() - millisButtom1 > 5) { // эмулируем отпускание клавиш «k» Keyboard.release('k'); state1 = 0; } // если прошёл заданный интервал эмуляции нажатие клавиши «l» if (millis() - millisButtom2 > 100) { // эмулируем отпускание клавиш «l» Keyboard.release('l'); state2 = 0; } // если прошёл заданный интервал эмуляции нажатие клавиши «y» if (millis() - millisButtom3 > 5) { // эмулируем отпускание клавиш «y» Keyboard.release('y'); state3 = 0; } // если прошёл заданный интервал эмуляции нажатие клавиши «u» if (millis() - millisButtom4 > 5) { // эмулируем отпускание клавиш «u» Keyboard.release('u'); state4 = 0; } }