-
Channel.
A channel is a stream of integer values coming through the serial port. There can be one or more channels multiplexed over the same serial line.Tech details: Serial data arrives in frames. Different protocols use different frame structures but in general a frame consists of several numbers. The stream consisting of the first numbers from each frame can be thought of as channel 1. Every second number in each frame represents channel 2 and so on.
-
Mapping.
A mapping is a rule which transforms the integer channel data in a value that can be fed to the virtual joystick. There are three types of mappings:- Axis Mapping - used to transform a channel to a joystick axis (X, Y, Slider, etc.).
- Button Mapping - used to transform channel value to a binary button state - pressed/depressed - using threshold(s).
- Bit-mapped Button Mapping - takes the channel value as 16-bit integer and allows each bit to command one button (16 buttons total).
Here is a simplified diagram of the data flow:
-
You need a Virtual Joystick driver. The options are:
-
Then you have to decide how you are going to get the serial data you need. Some of the most common options are:
- Use Arduino to read data from any device and send it to your PC. How-to.
- Read controller directly from any IBUS capable FlySky receiver. How-to.
- Read controller directly from any SBUS capable receiver (FrSky, Futaba, etc.). How-to.
- Read controller directly from any DSM capable receiver (Spektrum). How-to.
- Use MultiWii compatible Flight Controller (MultiWii, CleanFlight, BetaFlight, etc.). How-to.
- Use KISS Flight Controller. It is the same as MultiWii, only you have to select the
KISSprotocol.
-
After your data provider is ready you should select the correct serial port. Click
Port Setupand make sure the default port settings are correct for your case. If they are not clickCustomand make the necessary adjustments. -
Select the serial protocol (depends on your choice from step 2).
-
Select the correct Virtual Joystick.
-
Click the
Connectbutton. If everything is OK you should see in the status bar something like:
-
Open the Channel Monitor (
Program>Channel Monitor) and see if everything seems to be working OK. Try changing your inputs and confirm that channels are changing value. -
Start mapping!
Use theAdd Axis,Add ButtonandAdd Bit-mapped Buttonbuttons to add mappings to the interface.
All mappings can take data from only one channel. Use theChannelinput box to select it. What is done with the data depends on the mapping type.-
In Axis Mappings, there is a
Axisdropdown menu from which you can select the virtual joystick axis which you would like to command with the selected channel. Please note that your Virtual Joystick type and configuration may or may not have some of the axes enabled. Axis Mappings can be thought of as a function which take the input channel value and returns axis value between 0% and 100%.
In theSetupdialog there are various parameters which can be tweaked to make that function do what you need.Symmetrictells if the axis has a center point. For example: symmetric axes are the X, Y of a joystick, while an asymmetric axis is the throttle.CenterandDeadbandparameters are available only in symmetric mode.Invertsimply inverts the function output - 0% becomes 100% and vice versa. TheMinimumparameter determines the channel value which will transform to 0% axis position (100% in inverted). Channel values less thanMinimumare ignored and axis position will still be 0%.- The
Maximumparameter is analogous. - The
Centerparameter determines the channel value which will translate to 50% axis position. - The
Deadbanddefines a range around the center point which will always translate to 50% axis position. Expomakes the channel value transformation a non linear function. The most common use is to make your controls less sensitive around the center and fully responsive near the endpoints.Failsafe Outputdetermines what value will be outputted in case of Failsafe.- The
Calibratebutton allows easy setting of theMinimum,MaximumandCenterparameters. Just click it and follow the instructions.
-
Button Mappings work by defining one or two thresholds. First you have to select the virtual
Button(numbered from 1 to 128) that you would like to command with this channel. Please note that the actual number of buttons available depends on the Virtual Joystick type and configuration. ClickSetupfor more parameters:- In
one thresholdmode the button state is determined depending on the value being lower or higher than the threshold. - In
two thresholdsmode the button is in one state if the value is between the two thresholds and in the other state if it is outside them. - The
Invertparameter inverts the button logic. Failsafe Outputdetermines what the button state will be in case of Failsafe.- The
Calibratebuttons allows for easy setup of the threshold. It only works inone thresholdmode.
The Trigger section allows your button to be activated only for a specific duration when the threshold(s) are crossed. Through the remaining time the button is depressed.
Enabletells if the Button should work in trigger mode.Edge. Consider a uninverted non-trigger button:Risingedge would be the transition from depressed to pressed state andFalling- from pressed to depressed.
Trigger buttons are normally in depressed state. They become pressed only when the above described edge conditions occur and they stay pressed forDurationmilliseconds, then become depressed again.
Bothtells that the button should be trigger on bothRisingorFallingedge.
If a trigger button isInverted it will be normally in pressed state and become depressed only forDurationmilliseconds when triggered.
- In
-
Bit-mapped Button Mappings take the channel's 16-bit value and allow each bit to be mapped to a button. The interface shows representation of the channel 16 bits as boxes:
Tech details: The Least Significant Bit (LSB) is displayed on the left. The usual way to represent the bits of a number is to place the LSB to the right, but for our purposes LSB to the left makes more sense.
Initially the bits are not mapped to anything. Click a bit box to set it up:
Enabletells that you want to map this bit.Buttonselects the Virtual Joystick button you want to command with this bit. Normally, a zero bit results in depressed button and one bit - in pressed. If you want the reverse - checkInvert.Failsafe Outputdetermines what the button state will be in case of Failsafe.- For
Triggermode see the description for the Button Mapping.
After a button has been mapped its virtual button id is shown in the box. If the button is inverted an overbar is shown above the number.
For unmapped bits (no number shown) the color of the box represents the input bit. For mapped bits the color represents the virtual button state.
-
Hat switches are also supported but because of the non-trivial ways in which a channel can be mapped, this is supported only through Scripting
-
-
Save your configuration as a
Profile. Enter a profile name in the text box and clickSave. The last used profile is automatically loaded on next run. -
Enjoy!




