#include <Keyboard.h>
// Пины
const int JOY_X = A0;
const int JOY_Y = A1;
const int BTN_PIN = 2;
// Переменные для состояний
bool wPressed = false;
bool sPressed = false;
bool aPressed = false;
bool dPressed = false;
bool hPressed = false;
void setup() {
pinMode(BTN_PIN, INPUT_PULLUP);
// Включаем последовательный порт для отладки
Serial.begin(9600);
// Даём время открыть монитор порта (опционально)
delay(2000);
Serial.println("Джойстик готов");
// Запуск клавиатуры
Keyboard.begin();
}
void loop() {
// Чтение значений
int xValue = analogRead(JOY_X);
int yValue = analogRead(JOY_Y);
bool btnPressed = (digitalRead(BTN_PIN) == LOW);
// Отладка - выводим значения
static unsigned long lastPrint = 0;
if (millis() - lastPrint > 500) { // Раз в полсекунды
Serial.print("X: ");
Serial.print(xValue);
Serial.print(" Y: ");
Serial.print(yValue);
Serial.print(" Button: ");
Serial.println(btnPressed ? "PRESSED" : "released");
lastPrint = millis();
}
// Простая логика с динамическими порогами
int threshold = 200; // Чувствительность (чем меньше, тем чувствительнее)
// Ось Y (W/S)
if (yValue < 512 - threshold) {
if (!wPressed) {
Keyboard.press('w');
wPressed = true;
Serial.println("W PRESSED");
}
} else if (yValue > 512 + threshold) {
if (!sPressed) {
Keyboard.press('s');
sPressed = true;
Serial.println("S PRESSED");
}
} else {
if (wPressed) {
Keyboard.release('w');
wPressed = false;
Serial.println("W RELEASED");
}
if (sPressed) {
Keyboard.release('s');
sPressed = false;
Serial.println("S RELEASED");
}
}
// Ось X (A/D)
if (xValue < 512 - threshold) {
if (!aPressed) {
Keyboard.press('a');
aPressed = true;
Serial.println("A PRESSED");
}
} else if (xValue > 512 + threshold) {
if (!dPressed) {
Keyboard.press('d');
dPressed = true;
Serial.println("D PRESSED");
}
} else {
if (aPressed) {
Keyboard.release('a');
aPressed = false;
Serial.println("A RELEASED");
}
if (dPressed) {
Keyboard.release('d');
dPressed = false;
Serial.println("D RELEASED");
}
}
// Кнопка (H)
if (btnPressed && !hPressed) {
Keyboard.press('h');
hPressed = true;
Serial.println("H PRESSED");
} else if (!btnPressed && hPressed) {
Keyboard.release('h');
hPressed = false;
Serial.println("H RELEASED");
}
delay(50); // Небольшая задержка
}