Any interest in Arduino + Rotary Encoders and MSFS2020?

I was working on this project for myself but if there is interest I might release the code/design to the public.

It’s a cheap flight controller. Uses a inexpensive Arduino uno + 4 or 5 rotary encoder knobs. (Total hardware cost ~$30 minus enclosure) Then a small program running in the background on the PC “listening” to the arduino.

When you turn or click (press down) the encoder the app sends keystrokes to the flight sim. For example spinning the knob I can adjust the autopilot altitude selection up and down. Proof of concept worked - I can spin the knobs and change heading , altitude, etc.

Only catch right now, there is a #%$@ software bug in the heading increase/decrease keyboard shortcut. If you move the heading bug for a while (with keyboard shortcut) it starts spinning in circles and crashes MSFS2020. I submitted a zendesk hopefully they fix that someday.

My thought was to mount the 5 rotary switches on a small box and have that for easy AP adjustments. But it can control anything with a knob and keyboard shortcut for adjustment. Each knob is also a push button which is cool. I’m shooting for 5 put need to see if I have enough pins on the arduino uno.




Well done, it’s good to see some innovation.

I’m planning to use Mobiflight + Mega on my slightly over the top test panel:



not to hijack or burst your bubble, but there may be a simpler solution already available. I will never do it, but i’m sure someone could tear down this midi controller and build a panel from it. Knobs are infinite, there’s a push function on each one to allow for changing functions or using a single knob as a large/small knob. Lorby Axis and Ohs is the software running it. You end up with 16 knobs and 32 buttons plus the ability to do much more with the AAO software.


This is the overlay i’m working on in Illustrator so you can see a more recent implementation. its still a WIP as the FMS knobs and buttons are not able to be actioned through keypress or sim action.


I have a Behringer BCR2000 that has a bazillion knobs. Time to experiment.

I was thinking about a button box too, but with leo bodnar board. But to easyly use a button box we need assignment for toogle selected / managed mode for speed, hdg, alt and vs. If not, we must go into virtual cockpit to click on knobs.

I also have a weird thing with VS knob. If I assign increase and reduce VS ref PA, I can use buttons to command the knob without going into the virtual cockpit. But only when the display show a value, if it’s on zero, commands won’t work.

For example, the display is managed, show “----”, I clic in virtual cockpit to change to selected (I don’t found a key for that), and it shows “0000”, if I use my assigned buttons, nothing happens. But if I scroll on the knob to display “+100”, the assigned keys works, until I reduce and I goes to “0000”, then “----”

If those Behringer boxes work with Axis and Ohs, I guess they would work with SPAD as well?

Hey… very interesting project. Maybe we can share some ideas.
I started building my ‘poor man’s radio panel’ and so far I am really enjoying it. Got some dual rotary encoders and built the code for an arduino mega matched with some VB code in Visual Studio to make the calls via managed SimConnect.

I already have COM1, NAV1 and a control for the CRS/HDG bugs for AP. Also, not to brag about it but YES bragging about… got yesterday my Honeycomb Alpha Yoke… and with the CRS/HDG hardware bug I have no issues with the 10 degree issue people is reporting.

I’ll post some pictures later today. I am planning to expand it to both COM, NAV and also ADF and XPDR… we’ll see how well it turns out…

If someone is interested in the code please send me a PM

Happy flying!!!


I had a similar idea, but with some of those cheap 1 inch OLED screens to display the actual value.


This may be of interest to people, i’m not affiliated with this guy at all, although I have ordered the kit, just awaiting delivery now. I’ll let you know what its like once its arrived and is up and running if you’re interested.

Introducing Class Echo - A MSFS2020 Touch-Screen Information System & Controller


nice panel! reminds me of my grand plans for an A10 pit…

1 Like

probably works with spad. the biggest problem is that there is a lot of sim actions that dont’ have a corresponding function to trigger. its really half baked on the sim side. but I’ve been able to configure the most important functions on the midi controller. between it and a touchscreen i’m making headway into getting away from mouse clicks in the cockpit almost completely.

@DaJoeNgr01 This is pretty much my setup, Arduino just sends serial data when the encoders turn or pressed. And I have a C# app reading it in and sending keys. Though I really want to do it with Simconnect. Did you come across any good tutorials or sample code for this? I have messed with it a bit and MSFS2020 but I’m having mixed success. Like it will send me telemetry data while flying (one experiment) but then just stops. Ideally adjusting the AP, etc. programatically would be better via simconnect then sending keystrokes.

1 Like

I only touch my keyboard for two things now: ATC interaction, and spoilers on the Mooney M20R. Everything else is done by the Logitech/Saitek gear, or my yoke.

You can use your C# code to read serial com data from Arduino board and send command to simconnect through FSUIPC! Their library is available on nuget with many examples of usage. I did a POC and I managed to get it working!

Interesting thanks… Never thought of using FSUIPC, have heard of it back in the FSX days but haven’t done much with it…

Most of the code on how to send data to simconnect was thru tutorials and other samples.
I don’t really know much syntax of C#, C++, etc. but I know VB syntax.

I basically do the same thing, loop thru the variables in arduino and when something changes then send a command to the VB program which, in turn, do a CASE SELECT of the first 3 chars sent and with that, know what event to send to simconnect.

the serial string I send from arduino is 7-8 characters long with the first 3 being the function to alter (HDR/CRS/CM1/NV1), etc. and the other 3-4 chars the actual value to set via simconnect event…

@DaJoeNgr01 Gotcha… Yeah, I just send the rotary encoder and direction.

Rotary One CW: <1+>
Rotary One CCW: <1->
Rotary One Push: <1!>

And for the other rotaries, <2+>, <3+>, etc. I kept the Arduino “agnostic” and plan to re-arrange the knobs and purpose in the PC code.

yes… I was trying to do use the event to increment/decrement values as sent by the encoder but I do the ‘math’ (+1 or -1) in the arduino and send the ‘calculated’ value altogether to VB.

That is what the correct ‘method’ I guess should be. However, for ‘easier’ purposes I send the value (HDG300) and then use the event to ‘set’ the value into simconnect. Everytime a new calculation is done, the event simply sets to 330, 329, 328 instead of sending +1, +1, +1 to the sim.

I am using lcd displays connected to the arduino to display these values as well, I don’t look to the radio panel almost anymore in the virtual cockpit.

Poor man’s Radio panel with CRS/HDG knob