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


#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);  // Небольшая задержка
}