#include <BleGamepad.h>
BleGamepad bleGamepad;
#define BUTTON_A 15
#define BUTTON_B 16
#define BUTTON_X 17
#define BUTTON_Y 18
#define SHOULDER_L 19
#define SHOULDER_R 21
#define JOYSTICK_X 32
#define JOYSTICK_Y 33
void setup() {
bleGamepad.begin();
pinMode(BUTTON_A, INPUT_PULLUP);
pinMode(BUTTON_B, INPUT_PULLUP);
pinMode(BUTTON_X, INPUT_PULLUP);
pinMode(BUTTON_Y, INPUT_PULLUP);
pinMode(SHOULDER_L, INPUT_PULLUP);
pinMode(SHOULDER_R, INPUT_PULLUP);
}
void loop() {
// Joystick logic
int xVal = analogRead(JOYSTICK_X);
int yVal = analogRead(JOYSTICK_Y);
bleGamepad.setLeftThumb(xVal - 2048, yVal - 2048); // Normalize 12-bit ADC values
// Button logic
if (digitalRead(BUTTON_A) == LOW) {
bleGamepad.press(BUTTON_1);
} else {
bleGamepad.release(BUTTON_1);
}
if (digitalRead(BUTTON_B) == LOW) {
bleGamepad.press(BUTTON_2);
} else {
bleGamepad.release(BUTTON_2);
}
if (digitalRead(BUTTON_X) == LOW) {
bleGamepad.press(BUTTON_3);
} else {
bleGamepad.release(BUTTON_3);
}
if (digitalRead(BUTTON_Y) == LOW) {
bleGamepad.press(BUTTON_4);
} else {
bleGamepad.release(BUTTON_4);
}
if (digitalRead(SHOULDER_L) == LOW) {
bleGamepad.press(BUTTON_5);
} else {
bleGamepad.release(BUTTON_5);
}
if (digitalRead(SHOULDER_R) == LOW) {
bleGamepad.press(BUTTON_6);
} else {
bleGamepad.release(BUTTON_6);
}
bleGamepad.sendReport();
delay(10);
}