Проблемы с модулем джостика в ESP32

Сейчас разрабатываю скрипт для esp32 с управлением его с помощью джостика но тут вознкила проблема в том что по чему то при управление джостика верх вниз в право в лево ничего не происходит не могу понять почему. Но интересно что кнопка работает - а изменение по осям нет

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Arduino.h>
#include <stdbool.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

#define VRX_PIN  18 // ESP32 pin GPIO39 (ADC3) connected to VRX pin
#define VRY_PIN  17 // ESP32 pin GPIO36 (ADC0) connected to VRY pin

const int BUTTON_PIN = 16;

#define LEFT_THRESHOLD  1000
#define RIGHT_THRESHOLD 1000
#define UP_THRESHOLD    1000
#define DOWN_THRESHOLD  1000

#define COMMAND_NO     0x00
#define COMMAND_LEFT   0x01
#define COMMAND_RIGHT  0x02
#define COMMAND_UP     0x04
#define COMMAND_DOWN   0x08

int valueX = 0 ; // to store the X-axis value
int valueY = 0 ; // to store the Y-axis value
int command = COMMAND_NO;
int previousValueX = 0; 
int previousValueY = 0; 

const char* options[] = {
  "Conection DEV",
  "File",
  "Games"

};

const int numOption = sizeof(options) / sizeof(options[0]);
int opshens = 2;          //Что бы изменить выбор нужно изменить даную строку 
String derector = "Menu";

// Создаем экземпляр дисплея
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setupDisplay(int size) {
    display.clearDisplay(); // Очистка перед отображением новых данных
    display.setTextSize(size); // Установка размера текста
    display.setTextColor(SSD1306_WHITE); // Установка цвета текста
}

void setup() {
  Serial.begin(9600);
  analogSetAttenuation(ADC_11db);
  // Инициализация дисплея с адресом I2C
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Используйте 0x3C как адрес I2C
  display.clearDisplay();
  
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  
}

bool WiFiAt = false;

void loop() {
  Jostik();
  if (!WiFiAt){
    printOptions();
    
  }
  
  delay(200);
  if (WiFiAt){
    
    display.clearDisplay();
    setupDisplay(2);
    display.setCursor(10, 0);
    display.println("Wifi Atak");
    display.display();
    if (digitalRead(BUTTON_PIN) == LOW) { // Кнопка нажата
      WiFiAt = false;
      delay(200);
  }
  }
}


//Управление джостиком
void Jostik(){
  // read X and Y analog values
  valueX = analogRead(VRX_PIN);
  valueY = analogRead(VRY_PIN);


  Serial.print("valueX: ");
  Serial.print(valueX);
  Serial.print(" valueY: ");
  Serial.println(valueY);

  // reset commands
  command = COMMAND_NO;

  // check left/right commands
  if (valueX < LEFT_THRESHOLD)
    command |= COMMAND_LEFT;
  else if (valueX > RIGHT_THRESHOLD)
    command |= COMMAND_RIGHT;

  // check up/down commands
  if (valueY < UP_THRESHOLD)
    command |= COMMAND_UP;
  else if (valueY > DOWN_THRESHOLD)
    command |= COMMAND_DOWN;

  // NOTE: AT A TIME, THERE MAY BE NO COMMAND, ONE COMMAND OR TWO COMMANDS
  if (digitalRead(BUTTON_PIN) == LOW) { // Кнопка нажата
      if (!WiFiAt){
        WiFiAt = true;
      }
  }
  // print command to serial and process command
  if (command & COMMAND_LEFT) {
    Serial.println("COMMAND LEFT");
    
    // TODO: add your task here
  }

  if (command & COMMAND_RIGHT) {
    Serial.println("COMMAND RIGHT");
    // TODO: add your task here
  }

  if (command & COMMAND_UP) {
    if (previousValueY >= UP_THRESHOLD) { // Проверяем, было ли предыдущее значение выше порога
      opshens = max(0, opshens - 1); // Уменьшаем opshens, но не ниже 0
      Serial.println("UP command processed");
      printOptions();
    }
  }

  if (command & COMMAND_DOWN) {
    if (opshens != numOption){
      opshens++;
      
    }
    else{
      
    }
    // TODO: add your task here
    
  }
  previousValueY = valueY;
}
//МЕНЮ 
void printOptions() {
  display.clearDisplay(); // Очистка перед отображением новых данных
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  
  for (int i = 0; i < numOption; i++) {
    display.setCursor(0, i * 16); // Установка курсора на новую строку
    if (i == opshens) {
      display.print("> "); // Указатель на текущую опцию
    } else {
      display.print("  ");
    }
    display.println(options[i]);
    
  }

  display.display(); // Обновление дисплея после добавления всех элементов
}`

Ответы (0 шт):