Skip to content

Arduino Leonardo Controller Button Issue on Recalbox with Raspberry Pi 4B #7

Description

@ChrisHaruki

Hello everyone!

I'm in need of some assistance with a custom Arduino Leonardo game controller I've been working on. I've utilized the library here to set up my controller. It's functioning perfectly when tested on the Windows gamepad settings—every button press and joystick movement is detected without any hiccups.

However, I've hit a snag with Recalbox on my Raspberry Pi 4B. While the system does recognize the controller as a Leonardo and allows me to use the joystick to navigate the Recalbox menu, none of the buttons are being detected within the controller configuration menu.

Has anyone experienced a similar issue, or can offer any insights into why this might be happening? Your help would be immensely appreciated to get my custom controller fully operational with Recalbox.

Thank you in advance!

Here is my arduino code:

`/*
Select: button8
Start: button9
Hotkey: button9
L: button4 (Joystick L button)
R: button5 (Joystick R button)
X: button0
Y: button3
A: button1
B: button2
D-U: axis 1-
D-D: axis 1+
D-L: axis 0-
D-R: axis 0+
*/
#include <Gamepad.h>

//left joystick
int leftXcenter = 500;
int leftYcenter = 500;
double multiplierLX = 0.254;
double multiplierLY = 0.254;

//right joystick
int rightXcenter = 500;
int rightYcenter = 500;
double multiplierRX = 0.254;
double multiplierRY = 0.254;

Gamepad gp;

void setup() {
//Left joystick
pinMode(A0, INPUT);
pinMode(A1, INPUT);
//Right joystick
pinMode(A2, INPUT);
pinMode(A3, INPUT);

//Start, Select buttons
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);

//ABXY
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);

//LR
pinMode(8, INPUT_PULLUP); //Joystick L button
pinMode(9, INPUT_PULLUP);//Joystick R button

calibrate();
}

void loop() {
int lx, ly, rx, ry;
//left joystick
lx = analogRead(A0);
ly = analogRead(A1);
lx = floor((lx - leftXcenter) * multiplierLX);
ly = floor((ly - leftYcenter) * multiplierLY);
if(lx > 127) lx = 127;
if(ly > 127) ly = 127;
gp.setLeftXaxis(lx);
gp.setLeftYaxis(ly);

//right joystick
rx = analogRead(A2);
ry = analogRead(A3);
rx = floor((rx - rightXcenter) * multiplierRX);
ry = floor((ry - rightYcenter) * multiplierRY);
if(rx > 127) rx = 127;
if(ry > 127) ry = 127;
gp.setRightXaxis(rx);
gp.setRightYaxis(ry);

int select, start, a, b, x, y, l, r;
select = digitalRead(2);
start = digitalRead(3);

a = digitalRead(4);
b = digitalRead(5);
x = digitalRead(6);
y = digitalRead(7);
l = digitalRead(8);
r = digitalRead(9);

if(select == LOW)
gp.setButtonState(8, true);
else
gp.setButtonState(8, false);

if(start == LOW)
gp.setButtonState(9, true);
else
gp.setButtonState(9, false);

if(a == LOW)
gp.setButtonState(1, true);
else
gp.setButtonState(1, false);

if(b == LOW)
gp.setButtonState(2, true);
else
gp.setButtonState(2, false);

if(x == LOW)
gp.setButtonState(0, true);
else
gp.setButtonState(0, false);

if(y == LOW)
gp.setButtonState(3, true);
else
gp.setButtonState(3, false);

//L R button
if(l == LOW)
gp.setButtonState(4, false);
else
gp.setButtonState(4, true);

if(r == LOW)
gp.setButtonState(5, false);
else
gp.setButtonState(5, true);

delay(20);
}

void calibrate()
{
int lx, ly, rx, ry;
int i = 0;
while(i < 8)
{
lx = analogRead(A0);
ly = analogRead(A1);
bool validLX = lx > (leftXcenter - 100) && lx < (leftXcenter + 100);
bool validLY = ly > (leftYcenter - 100) && ly < (leftYcenter + 100);

rx = analogRead(A2);
ry = analogRead(A3);
bool validRX = rx > (rightXcenter - 100) && rx < (rightXcenter + 100);
bool validRY = ry > (rightYcenter - 100) && ry < (rightYcenter + 100);

if(validLX && validLY && validRX && validRY)
{
  i++;
  //nothing to do here!
}
else i = 0;
delay(20);

}
leftXcenter = lx;
leftYcenter = ly;
multiplierLX = (double)127 / (double)lx;
multiplierLY = (double)127 / (double)ly;

rightXcenter = rx;
rightYcenter = ry;
multiplierRX = (double)127 / (double)rx;
multiplierRY = (double)127 / (double)ry;
}
`

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions