Загрузка данных


#include <Keyboard.h>

// Пины
const int JOY_X = A0;     // Ось X
const int JOY_Y = A1;     // Ось Y  
const int BTN_PIN = 2;    // Кнопка джойстика

// Пороги срабатывания (0-1023)
const int DEADZONE = 300;    // Мёртвая зона от центра (512 ±300)
const int TRIGGER = 700;     // Порог для крайних положений

// Центр
const int CENTER = 512;

// Текущее состояние клавиш
bool wPressed = false;
bool sPressed = false;
bool aPressed = false;
bool dPressed = false;
bool hPressed = false;

void setup() {
  // Инициализация пинов
  pinMode(BTN_PIN, INPUT_PULLUP);
  
  // Задержка перед запуском (опционально)
  delay(1000);
  
  // Запуск клавиатуры
  Keyboard.begin();
}

void loop() {
  // Чтение значений с джойстика
  int xValue = analogRead(JOY_X);
  int yValue = analogRead(JOY_Y);
  
  // Чтение кнопки (LOW при нажатии, т.к. INPUT_PULLUP)
  bool btnState = (digitalRead(BTN_PIN) == LOW);
  
  // --- Обработка оси Y (W/S) ---
  if (yValue < CENTER - DEADZONE) {
    // Движение вперёд (W)
    if (!wPressed && yValue < CENTER - TRIGGER) {
      Keyboard.press('w');
      wPressed = true;
    }
  } else if (yValue > CENTER + DEADZONE) {
    // Движение назад (S)
    if (!sPressed && yValue > CENTER + TRIGGER) {
      Keyboard.press('s');
      sPressed = true;
    }
  } else {
    // Возврат в центр
    if (wPressed) {
      Keyboard.release('w');
      wPressed = false;
    }
    if (sPressed) {
      Keyboard.release('s');
      sPressed = false;
    }
  }
  
  // --- Обработка оси X (A/D) ---
  if (xValue < CENTER - DEADZONE) {
    // Движение влево (A)
    if (!aPressed && xValue < CENTER - TRIGGER) {
      Keyboard.press('a');
      aPressed = true;
    }
  } else if (xValue > CENTER + DEADZONE) {
    // Движение вправо (D)
    if (!dPressed && xValue > CENTER + TRIGGER) {
      Keyboard.press('d');
      dPressed = true;
    }
  } else {
    // Возврат в центр
    if (aPressed) {
      Keyboard.release('a');
      aPressed = false;
    }
    if (dPressed) {
      Keyboard.release('d');
      dPressed = false;
    }
  }
  
  // --- Обработка кнопки (H) ---
  if (btnState && !hPressed) {
    Keyboard.press('h');
    hPressed = true;
  } else if (!btnState && hPressed) {
    Keyboard.release('h');
    hPressed = false;
  }
  
  // Небольшая задержка для стабильности
  delay(10);
}