# How to Configure Rudder Mode for Flight Simulation Integration with DIY FFB Pedals

> Configure rudder mode for flight simulation integration. Set rudderMode to 0 for standard aircraft or 1 for helicopter yaw control in SimHub plugin settings.

- Repository: [chrgri/diy-sim-racing-ffb-pedal](https://github.com/chrgri/diy-sim-racing-ffb-pedal)
- Tags: how-to-guide
- Published: 2026-02-27

---

**Set the `rudderMode` value to `0` for standard aircraft rudder or `1` for helicopter-style yaw control in the SimHub plugin settings to configure rudder mode for flight simulation integration.**

The chrgri/diy-sim-racing-ffb-pedal repository provides open-source force feedback pedal hardware and software for racing and flight simulators. When integrating with flight simulation software, configuring the rudder mode ensures your pedals deliver the correct resistance profile for either fixed-wing aircraft steering or rotary-wing cyclic yaw control. This article explains the two available rudder modes, their storage locations in the codebase, and how the firmware interprets your configuration.

## Understanding Rudder Modes for Flight Simulation

The firmware supports two distinct rudder behaviors selected through the **Rudder Mode** setting. This value is stored as a `uint` field named `rudderMode` in the plugin settings.

### Standard Aircraft Rudder (Mode 0)

Setting `rudderMode` to `0` enables standard two- or three-pedal steering suitable for fixed-wing aircraft. According to the source in [`SimHubPlugin/DIYFFBPedalSettings.cs`](https://github.com/chrgri/diy-sim-racing-ffb-pedal/blob/main/SimHubPlugin/DIYFFBPedalSettings.cs) at lines 74-75, this is the default value. When active, the firmware receives `EnableRudderTwoPedals` or `EnableRudderThreePedals` action codes depending on your physical pedal configuration.

### Helicopter-Style Rudder (Mode 1)

Setting `rudderMode` to `1` configures the pedals for helicopter yaw control via cyclic input. This mode triggers `EnableHeliRudderTwoPedals` or `EnableHeliRudderThreePedals` action codes, altering the torque profile to match rotary-wing aircraft physics.

## Locating the Rudder Mode Configuration

### Persistent Storage in DIYFFBPedalSettings.cs

The setting is defined in [`SimHubPlugin/DIYFFBPedalSettings.cs`](https://github.com/chrgri/diy-sim-racing-ffb-pedal/blob/main/SimHubPlugin/DIYFFBPedalSettings.cs) at lines 74-75 as a public unsigned integer:

```csharp
public uint rudderMode = 0;  // 0 = standard aircraft, 1 = helicopter

```

SimHub serializes this field to [`DIYFFBPedalSettings.json`](https://github.com/chrgri/diy-sim-racing-ffb-pedal/blob/main/DIYFFBPedalSettings.json) located in `%APPDATA%\SimHub\PluginSettings\`. You can manually edit this JSON file to change the mode between `0` and `1` when SimHub is closed.

### SimHub User Interface Controls

The SimHub plugin exposes this setting through check-boxes in the *Rudder* tab. In [`SimHubPlugin/UIFunction/SettingSection_Rudder.xaml.cs`](https://github.com/chrgri/diy-sim-racing-ffb-pedal/blob/main/SimHubPlugin/UIFunction/SettingSection_Rudder.xaml.cs) at lines 90-92 and 168-172, the UI binds to `Settings.rudderMode`:

- **"Rudder Type 1"** sets the value to `0`
- **"Rudder Type 2"** sets the value to `1`

Selecting either option triggers `SettingsChangedEvent` and updates the JSON configuration immediately without requiring a restart.

## How Configuration Affects Firmware Communication

When transmitting commands to the Arduino/ESP32 firmware, the driver in [`SimHubPlugin/DIYFFBPedal.cs`](https://github.com/chrgri/diy-sim-racing-ffb-pedal/blob/main/SimHubPlugin/DIYFFBPedal.cs) (lines 988-1004) constructs the `Rudder_action` payload based on the current mode:

```csharp
if (Settings.rudderMode == 0)                // normal aircraft rudder
{
    if (Rudder_Pedal_idx[0] == 0)
        tmp.payloadPedalAction_.Rudder_action = (byte)RudderAction.EnableRudderThreePedals;
    else
        tmp.payloadPedalAction_.Rudder_action = (byte)RudderAction.EnableRudderTwoPedals;
}
if (Settings.rudderMode == 1)                // helicopter rudder
{
    if (Rudder_Pedal_idx[0] == 0)
        tmp.payloadPedalAction_.Rudder_action = (byte)RudderAction.EnableHeliRudderThreePedals;
    else
        tmp.payloadPedalAction_.Rudder_action = (byte)RudderAction.EnableHeliRudderTwoPedals;
}

```

The firmware interprets these byte codes to configure the motor controller with the appropriate force feedback curve for your selected flight simulation integration.

## Step-by-Step Configuration Workflow

Follow these steps to configure rudder mode for flight simulation integration:

1. **Open the SimHub plugin UI** and navigate to the *Rudder* tab.
2. **Select the desired behavior** by checking **"Rudder Type 1"** for standard aircraft (value `0`) or **"Rudder Type 2"** for helicopter (value `1`).
3. **Save the configuration** — SimHub automatically serializes `DIYFFBPedalSettings` to JSON. The change takes effect on the next communication cycle with the pedal hardware.

For manual configuration, edit `%APPDATA%\SimHub\PluginSettings\DIYFFBPedalSettings.json` and set `"rudderMode": 0` or `"rudderMode": 1`, then restart SimHub.

## Programmatic Configuration Examples

### Changing Mode via C#

```csharp
// Access the plugin settings instance
var settings = new DIYFFBPedalSettings();

// Configure helicopter rudder mode for flight simulation
settings.rudderMode = 1;

// Persist changes to JSON
PluginManager.SavePluginSettings(settings);

```

### Manual JSON Configuration

```json
{
  "rudderMode": 0,
  "rudderMaxForce": 10,
  "rudderMinForce": 1,
  "Rudder_RPM_effect_b": true,
  "Rudder_ACC_effect_b": false
}

```

### UI Binding Implementation

The check-boxes in `SettingSection_Rudder.xaml` use value converters to bind to the integer setting:

```xml
<CheckBox x:Name="CheckBox_RudderType_1"
          Content="Standard Rudder"
          IsChecked="{Binding Settings.rudderMode, Converter={StaticResource EqualityConverter}, ConverterParameter=0}"
          Checked="CheckBox_RudderType_Checked"/>
<CheckBox x:Name="CheckBox_RudderType_2"
          Content="Helicopter Rudder"
          IsChecked="{Binding Settings.rudderMode, Converter={StaticResource EqualityConverter}, ConverterParameter=1}"
          Checked="CheckBox_RudderType_Checked"/>

```

## Rudder Mode Interaction with Other Settings

The `rudderMode` value affects how the firmware interprets related configuration flags defined in [`DIYFFBPedalSettings.cs`](https://github.com/chrgri/diy-sim-racing-ffb-pedal/blob/main/DIYFFBPedalSettings.cs):

- **`Rudder_RPM_effect_b`** — Controls engine vibration feedback; evaluated according to the selected rudder mode's physics profile.
- **`Rudder_ACC_effect_b`** — Manages acceleration-based force effects; applied based on the active mode.
- **`Rudder_Pedal_idx`** — Array defining which physical pedals (2 or 3) serve as rudder inputs; the firmware uses this index regardless of whether mode `0` or `1` is selected.

## Summary

- The **DIY-Sim-Racing-FFB-Pedal** supports two rudder modes: `0` for standard aircraft and `1` for helicopter-style yaw control.
- The setting persists as a `uint` field named `rudderMode` in [`DIYFFBPedalSettings.cs`](https://github.com/chrgri/diy-sim-racing-ffb-pedal/blob/main/DIYFFBPedalSettings.cs) and serializes to [`DIYFFBPedalSettings.json`](https://github.com/chrgri/diy-sim-racing-ffb-pedal/blob/main/DIYFFBPedalSettings.json).
- The SimHub plugin UI provides check-boxes in the *Rudder* tab mapped to `Settings.rudderMode` as implemented in [`SettingSection_Rudder.xaml.cs`](https://github.com/chrgri/diy-sim-racing-ffb-pedal/blob/main/SettingSection_Rudder.xaml.cs).
- Firmware commands are constructed in [`DIYFFBPedal.cs`](https://github.com/chrgri/diy-sim-racing-ffb-pedal/blob/main/DIYFFBPedal.cs) (lines 988-1004), translating the mode into specific `Rudder_action` byte codes for the motor controller.
- Related effects like RPM vibration and pedal indexing remain active but are interpreted according to the selected mode's profile.

## Frequently Asked Questions

### What is the difference between Rudder Type 1 and Rudder Type 2?

**Rudder Type 1 (value `0`)** configures the pedals for standard fixed-wing aircraft rudder control using two or three pedals. **Rudder Type 2 (value `1`)** enables helicopter-style rudder behavior where yaw is controlled via cyclic input, resulting in different force feedback torque profiles in the firmware.

### Where is the rudder mode setting saved on disk?

SimHub saves the value in `%APPDATA%\SimHub\PluginSettings\DIYFFBPedalSettings.json` as the `"rudderMode"` property. You can manually edit this JSON file to change the mode between `0` and `1` when the application is closed.

### Do I need to restart SimHub after changing the rudder mode?

No restart is required when changing via the UI. The plugin triggers `SettingsChangedEvent` immediately when you select a different check-box in the *Rudder* tab, and the next communication packet to the pedal firmware contains the updated `Rudder_action` payload. However, if editing the JSON file manually, you must restart SimHub for the file to be re-read.

### Which source file handles the conversion of rudder mode to firmware commands?

The conversion logic resides in [`SimHubPlugin/DIYFFBPedal.cs`](https://github.com/chrgri/diy-sim-racing-ffb-pedal/blob/main/SimHubPlugin/DIYFFBPedal.cs) at lines 988-1004. This code checks `Settings.rudderMode` and assigns the appropriate `RudderAction` enum value (`EnableRudderTwoPedals`, `EnableRudderThreePedals`, `EnableHeliRudderTwoPedals`, or `EnableHeliRudderThreePedals`) to the payload sent to the Arduino/ESP32 controller.