Hi All,
Total novice here, I would like to get some help with getting my code right.
Unfortunately all this is required to get the Joystick working correctly with FS2020 g1000, the joystick will be installed in a G1000 sim that I have build with a pair of Arduino Mega boards and MobiFlight software. However to replicate the actual behaviour of a joystick I need it to appear to the sim as if there are multiple button presses when the button is pressed and hold, ie HIGH.
So the desired response is to send a signal to the PC that looks like the button is being pressed>released>pressed>released cycling every so many milliseconds until the button is actually released.
To make it a little more tricky the push/center button is also being pressed with any of the direction buttons, so this press needs to be omitted when any of the direction buttons are pressed, this is the unfortunate design of ALPS RKJXT1F42001 4 way switch/ encoder that I'm using for this project.
I would appreciate any help, comments or opinions that might help me get that to work ![]()
This is a library that I'm using:
And here is the code I've got so far:
#include <PicoGamepad.h>
PicoGamepad gamepad;
// 16 bit integer for holding input values
int val;
void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
// Button on pin
pinMode(21, INPUT_PULLUP);
pinMode(17, INPUT_PULLUP);
pinMode(20, INPUT_PULLUP);
pinMode(16, INPUT_PULLUP);
pinMode(22, INPUT_PULLUP);
}
void loop() {
if (!digitalRead(21) and !digitalRead(22)){
gamepad.SetButton(0,!digitalRead(21) );
} else if (!digitalRead(17)and !digitalRead(22)){
gamepad.SetButton(1, !digitalRead(17));
} else if (!digitalRead(20)and !digitalRead(22)){
gamepad.SetButton(2, !digitalRead(20));
} else if (!digitalRead(16)&& !digitalRead(22)){
gamepad.SetButton(3, !digitalRead(16));
} else if (!digitalRead(22)){
gamepad.SetButton(4, !digitalRead(22));
}else {
gamepad.SetButton(0, !digitalRead(21));
gamepad.SetButton(1, !digitalRead(17));
gamepad.SetButton(2, !digitalRead(20));
gamepad.SetButton(3, !digitalRead(16));
gamepad.SetButton(4, !digitalRead(22));
}
// Send all inputs via HID
// Nothing is send to your computer until this is called.
gamepad.send_update();
// Flash the LED just for fun
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
delay(100);
}```