ESP32 GamePad Yardım

ArdaDmr

Üye
Katılım
6 Aralık 2023
Mesajlar
12
Merhaba,
Ben esp32 ile bluetoothlu gamepad yapıyorum. Bu projede "esp32_ble_gamepad" adlı kütüphaneyi kullandım. Projeye 8 buton ve 2 joystick ekledim. Bağlantılar da şu şekilde;

A Buton -> D32
B Buton -> D33
Y Buton -> D25
X Buton -> D26

Yukarı Tuşu -> D21
Aşağı Tuşu -> D19
Sağ Tuşu -> D5
Sol Tuşu -> D18

Sol Joystick X Ekseni -> D15
Sol Joystick Y Ekseni -> D13

Sağ Joystick X Ekseni -> D34
Sağ Joystick Y Ekseni -> D35

Butonlar mükemmel çalışıyor ancak joystiklerde bir sıkıntı var. Ne kadar denersem deneyeyim düzelmiyor. Algılamasında sorun var. Kod bölümüne kodları bırakıyorum, bana yardım edebilir misiniz?

C++:
#include <Arduino.h>

#include <BleGamepad.h>



BleGamepad Gamepad;



#define RIGHT_X_JOYSTICK 34

#define RIGHT_Y_JOYSTICK 35



#define LEFT_X_JOYSTICK 15

#define LEFT_Y_JOYSTICK 13



#define A_BUTON 32

#define B_BUTON 33

#define X_BUTON 25

#define Y_BUTON 26



#define UP_BUTON 21

#define DOWN_BUTON 19

#define RIGHT_BUTON 5

#define LEFT_BUTON 18



void setup() {



  pinMode(A_BUTON, INPUT_PULLUP);

  pinMode(B_BUTON, INPUT_PULLUP);

  pinMode(X_BUTON, INPUT_PULLUP);

  pinMode(Y_BUTON, INPUT_PULLUP);



  pinMode(UP_BUTON, INPUT_PULLUP);

  pinMode(DOWN_BUTON, INPUT_PULLUP);

  pinMode(RIGHT_BUTON, INPUT_PULLUP);

  pinMode(LEFT_BUTON, INPUT_PULLUP);



  Gamepad.begin();

}



void loop() {

  if (Gamepad.isConnected()) {

    int x_derece_R = analogRead(RIGHT_X_JOYSTICK);

    int y_derece_R = analogRead(RIGHT_Y_JOYSTICK);



    int x_derece_L = analogRead(LEFT_X_JOYSTICK);

    int y_derece_L = analogRead(LEFT_Y_JOYSTICK);



    int RightJoystickX = map(x_derece_R, 0, 4095, -32767, 32767);

    int RightJoystickY = map(y_derece_R, 0, 4095, -32767, 32767);

    int LeftJoystickX = map(x_derece_L, 0, 4095, -32767, 32767);

    int LeftJoystickY = map(y_derece_L, 0, 4095, -32767, 32767);



    Gamepad.setRightThumb(RightJoystickX, RightJoystickY);

    Gamepad.setLeftThumb(LeftJoystickX, LeftJoystickY);





    //A

    if (digitalRead(A_BUTON) == LOW) {

      Gamepad.press(BUTTON_1);

    } else {

      Gamepad.release(BUTTON_1);

    }

    //B

    if (digitalRead(B_BUTON) == LOW) {

      Gamepad.press(BUTTON_2);

    } else {

      Gamepad.release(BUTTON_2);

    }

    //X

    if (digitalRead(X_BUTON) == LOW) {

      Gamepad.press(BUTTON_3);

    } else {

      Gamepad.release(BUTTON_3);

    }

    //Y

    if (digitalRead(Y_BUTON) == LOW) {

      Gamepad.press(BUTTON_5);

    } else {

      Gamepad.release(BUTTON_5);

    }





    if (digitalRead(UP_BUTON) == LOW) {

      Gamepad.setHat(1);

    } else if (digitalRead(DOWN_BUTON) == LOW) {

      Gamepad.setHat(5);

    } else if (digitalRead(RIGHT_BUTON) == LOW) {

      Gamepad.setHat(3);

    } else if (digitalRead(LEFT_BUTON) == LOW) {

      Gamepad.setHat(7);

    } else {

      Gamepad.setHat(0);

    }

  }

  delay(10);

}
 
Son düzenleme:
Foruma hoş geldin. Program kodunu "Kod" bloğu olarak eklersen, program daha anlaşılır olur. Ama mevcut mesajdan alıp tekrar ekleme, böyle yaparsan aralara boş satırlar ekleniyor. Onun yerine orijinal program kodudu Arduino IDE'den tekrar al ve "Kod" olarak ekle.

1736524508215.png
 
Bir de, 183. satırdaki delay(10); komutunu iptal edip deneyiniz.
 
Merhaba,
Ben esp32 ile bluetoothlu gamepad yapıyorum. Bu projede "esp32_ble_gamepad" adlı kütüphaneyi kullandım. Projeye 8 buton ve 2 joystick ekledim. Bağlantılar da şu şekilde;

A Buton -> D32
B Buton -> D33
Y Buton -> D25
X Buton -> D26

Yukarı Tuşu -> D21
Aşağı Tuşu -> D19
Sağ Tuşu -> D5
Sol Tuşu -> D18

Sol Joystick X Ekseni -> D15
Sol Joystick Y Ekseni -> D13

Sağ Joystick X Ekseni -> D34
Sağ Joystick Y Ekseni -> D35

Butonlar mükemmel çalışıyor ancak joystiklerde bir sıkıntı var. Ne kadar denersem deneyeyim düzelmiyor. Algılamasında sorun var. Kod bölümüne kodları bırakıyorum, bana yardım edebilir misiniz?

C++:
#include <Arduino.h>

#include <BleGamepad.h>



BleGamepad Gamepad;



#define RIGHT_X_JOYSTICK 34

#define RIGHT_Y_JOYSTICK 35



#define LEFT_X_JOYSTICK 15

#define LEFT_Y_JOYSTICK 13



#define A_BUTON 32

#define B_BUTON 33

#define X_BUTON 25

#define Y_BUTON 26



#define UP_BUTON 21

#define DOWN_BUTON 19

#define RIGHT_BUTON 5

#define LEFT_BUTON 18



void setup() {



  pinMode(A_BUTON, INPUT_PULLUP);

  pinMode(B_BUTON, INPUT_PULLUP);

  pinMode(X_BUTON, INPUT_PULLUP);

  pinMode(Y_BUTON, INPUT_PULLUP);



  pinMode(UP_BUTON, INPUT_PULLUP);

  pinMode(DOWN_BUTON, INPUT_PULLUP);

  pinMode(RIGHT_BUTON, INPUT_PULLUP);

  pinMode(LEFT_BUTON, INPUT_PULLUP);



  Gamepad.begin();

}



void loop() {

  if (Gamepad.isConnected()) {

    int x_derece_R = analogRead(RIGHT_X_JOYSTICK);

    int y_derece_R = analogRead(RIGHT_Y_JOYSTICK);



    int x_derece_L = analogRead(LEFT_X_JOYSTICK);

    int y_derece_L = analogRead(LEFT_Y_JOYSTICK);



    int RightJoystickX = map(x_derece_R, 0, 4095, -32767, 32767);

    int RightJoystickY = map(y_derece_R, 0, 4095, -32767, 32767);

    int LeftJoystickX = map(x_derece_L, 0, 4095, -32767, 32767);

    int LeftJoystickY = map(y_derece_L, 0, 4095, -32767, 32767);



    Gamepad.setRightThumb(RightJoystickX, RightJoystickY);

    Gamepad.setLeftThumb(LeftJoystickX, LeftJoystickY);





    //A

    if (digitalRead(A_BUTON) == LOW) {

      Gamepad.press(BUTTON_1);

    } else {

      Gamepad.release(BUTTON_1);

    }

    //B

    if (digitalRead(B_BUTON) == LOW) {

      Gamepad.press(BUTTON_2);

    } else {

      Gamepad.release(BUTTON_2);

    }

    //X

    if (digitalRead(X_BUTON) == LOW) {

      Gamepad.press(BUTTON_3);

    } else {

      Gamepad.release(BUTTON_3);

    }

    //Y

    if (digitalRead(Y_BUTON) == LOW) {

      Gamepad.press(BUTTON_5);

    } else {

      Gamepad.release(BUTTON_5);

    }





    if (digitalRead(UP_BUTON) == LOW) {

      Gamepad.setHat(1);

    } else if (digitalRead(DOWN_BUTON) == LOW) {

      Gamepad.setHat(5);

    } else if (digitalRead(RIGHT_BUTON) == LOW) {

      Gamepad.setHat(3);

    } else if (digitalRead(LEFT_BUTON) == LOW) {

      Gamepad.setHat(7);

    } else {

      Gamepad.setHat(0);

    }

  }

  delay(10);

}
Arduino kodlamasından anlamam.(kopyala yapıştırcıyım) :)
Adımların ekran çözünürlüğüne göre ayarlanması gerekiyor.
int RightJoystickX = map(x_derece_R, 0, 4095, -32767, 32767);
int RightJoystickX = map(x_derece_R, 0, 4095, 0, ekran genişliğindeki piksel sayısı);
veya
int RightJoystickX = map(x_derece_R, 0, 4095,-ekran genişliğindeki piksel sayısı/2, ekran genişliğindeki piksel sayısı/2);
olarak değiştirip deneyebilir misin?
aynı işlemler y içinde yapılacak.
 

Forum istatistikleri

Konular
7,199
Mesajlar
122,017
Üyeler
2,910
Son üye
ahmet ustun

Son kaynaklar

Son profil mesajları

Freemont2.0 wrote on herbokolog's profile.
nick iniz yakıyor
:D
Freemont2.0 wrote on posta's profile.
Merhabalar :)
az bilgili çok meraklı
Prooffy wrote on semih_s's profile.
Merhaba, sizden DSO2C10 hakkında bilgi rica ettim. Yanıtlarsanız sevinirim...
Unal wrote on taydin's profile.
Timur Bey, Arduino kontrollü bir akü şarj cihazı yapmaya çalışıyorum. Aklımdaki fikri basit bir çizim olarak konu açmıştım. Özellikle sizin fikirlerinizi çok önemsiyorum.
Back
Top