Page 1 of 1

Some hints for Arduino + SPAD.next (FS2020)

Posted: 05 Sep 2020, 22:46
by Wombii
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!

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

Posted: 01 Oct 2020, 17:52
by djenn
Well, now we're getting somwhere....
Thanks a lot.

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

Posted: 23 Oct 2020, 03:23
by Wombii
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.

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

Posted: 01 Nov 2020, 15:27
by jeke
Can someone help me how to read variable from simulator. I want read "SIMCONNECT:AUTOPILOT ALTITUDE LOCK VAR"

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

Posted: 12 Nov 2020, 01:40
by karuchie
example:

//add Global variable
long altitude;

enum{
//add
kAltitude = 12,
}

void attachCommandCallbacks(){
//add
messenger.attach(kAltitude , onAltitudeLockChanged);
}

if (strcmp(szRequest, "CONFIG") == 0) {
//add
messenger.sendCmdStart(kCommand);
messenger.sendCmdArg("SUBSCRIBE");
messenger.sendCmdArg(kAltitude);
messenger.sendCmdArg("SIMCONNECT:AUTOPILOT ALTITUDE LOCK VAR");
messenger.sendCmdEnd();

//add
void onAltitudeLockChanged()
{
altitude = messenger.readInt32Arg();
messenger.sendCmd(kDebug, altitude); //It's for debugging, so it doesn't have to be
}

Please add it referring to "Heading" in the sample.
In this case, "long altitude" is the value of Altitude.
It is a little different from getting the current value because it is the value after the change.


If you want to send a command, you can write it on one line.

messenger.sendCmd(kSimCommand,"SIMCONNECT:AP_ALT_VAR_SET_ENGLISH,5000");

I hope it will be helpful.

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

Posted: 05 Dec 2020, 10:17
by mattswe
Thanks! Really helpful.

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

Posted: 02 Jan 2021, 18:13
by Irimi-Ai
The "Connect/Disconnect" buttons are not even visible when I add the serial port that my clone Mega2560 is on.

What do I need to do to get it to recognize it?

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

Posted: 04 Jan 2021, 17:13
by c0nnex
Make sure DTR and 32Bit Settings are correct.

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

Posted: 08 Jun 2021, 10:55
by Redscouse
Morning all,

Could I bring your attention to this post.
Really appreciate some help with the final step.

Pete.