MS Flightsimulator 2020 Framedrops/Stutters are fixed with MSFS Release 1.7.14.0

Some hints for Arduino + SPAD.next (FS2020)

Discussion about special hardware
Post Reply
Wombii
Passenger
Posts: 2
Joined: 30 Aug 2020, 05:28
Status: Offline

Some hints for Arduino + SPAD.next (FS2020)

Post by Wombii » 05 Sep 2020, 22:46

I don't have the energy to write a complete guide, but I want to share some info that would have saved me a lot of time in the last week trying to figure out how the Arduino interface works with FS2020.

This is for people already experienced with arduinos, but struggling to figure out how the serialdemo sketch from https://github.com/c0nnex/SPAD.neXt/tree/master/Scripts works with the limited amount of documentation.

Again, not a guide, just some important hints.

This does *not* use an arduino pro micro configured as a joystick, but any arduino using normal serial communication on a usb port. (I'm using an arduino nano)

First, this video helps explain the serial device connection and debugging: https://www.youtube.com/watch?v=Vs8Yf5Q9xNY

After uploading your sketch to the Arduino using the Arduino IDE:
In settings, go to serial devices, add new device. Select the correct com port, 115200, dtr off, 32 bit off.
Restart SPAD.next and go back to the serial devices. There should now be a device listed with a disconnect and connect button. Connect to use it with FS2020, disconnect to free the com port to upload using Arduino IDE.

Arduino sketch tips

To toggle a single switch in FS2020:
messenger.sendCmd(kSimCommand,"SIMCONNECT:AP_PANEL_HEADING_HOLD");
when a hardware button is pressed. (You don't have to add anything to the command list or callbacks to send SimCommands).

Some useful switches that works(toggle):
SIMCONNECT:AP_PANEL_HEADING_HOLD
MSFS:FLIGHT_LEVEL_CHANGE
SIMCONNECT:AP_ALT_HOLD
SIMCONNECT:AP_PANEL_VS_HOLD
SIMCONNECT:TOGGLE_GPS_DRIVES_NAV1
SIMCONNECT:AP_NAV_SELECT_SET


To directly control autopilot value (for example with a rotary encoder):
Add a function to the command list
kAltitude = 12, //(increment the number for each command(?))

Add a callback:
// Request Altitude Lock Dir Updates
messenger.sendCmdStart(kCommand);
messenger.sendCmdArg("SUBSCRIBE");
messenger.sendCmdArg(kAltitude);
messenger.sendCmdArg("SIMCONNECT:AUTOPILOT ALTITUDE LOCK VAR");
messenger.sendCmdEnd();

Send the value from the encoders. I send them 10 times per second as I don't know the performance impact of sending continously.
messenger.sendCmd(kAltitude,testValue);


I don't know if this is the correct way to do it, but it works. I now have 5 rotary encoders on an arduino nano controlling the most important functions of the autopilot.
Good luck experimenting!

djenn
Passenger
Posts: 4
Joined: 28 Sep 2020, 17:43
Status: Offline

Re: Some hints for Arduino + SPAD.next (FS2020)

Post by djenn » 01 Oct 2020, 17:52

Well, now we're getting somwhere....
Thanks a lot.

Wombii
Passenger
Posts: 2
Joined: 30 Aug 2020, 05:28
Status: Offline

Re: Some hints for Arduino + SPAD.next (FS2020)

Post by Wombii » 23 Oct 2020, 03:23

You actually don't need to subscribe to a value to change it, like I wrote in the previous post. You only need to subscribe to read it.
To send a command with a variable:

messenger.sendCmdStart(kSimCommand);
messenger.sendCmdArg("HEADING_BUG_SET");
messenger.sendCmdArg(HeadingVariable);
messenger.sendCmdEnd();

When sending a command directly like this, use an event name from the joystick input list, not from the simconnect output list.

jeke
Passenger
Posts: 1
Joined: 01 Nov 2020, 15:22
Status: Offline

Re: Some hints for Arduino + SPAD.next (FS2020)

Post by jeke » 01 Nov 2020, 15:27

Can someone help me how to read variable from simulator. I want read "SIMCONNECT:AUTOPILOT ALTITUDE LOCK VAR"

Post Reply