DDC
  • Welcome
    • Introduction
    • Supported hardware
  • 1: Project planning
    • Switch inputs
      • Switch table
      • Direct
      • Shift register
      • Port expander
    • Analog inputs
      • External ADC
    • RGB LED
    • Digital outputs
    • PWM / Circuit control
    • EEPROM
    • Processing and memory
  • 2. Wiring
    • Switch inputs
      • Matrix
      • Direct
      • Shift register
      • Port expander
    • Analog
      • Analog switches
      • External ADC
    • RGB LED
    • Digital outputs
    • PWM / Circuit control
    • EEPROM
  • 3. Coding
    • Essentials
      • 02_Board.ino
      • 08_Joystick
      • 10_TableAndAnalog.ino
        • Switch table
        • Analog channels
      • 30_Switches.ino
    • Peripherals
      • RGB LED
        • Firmware control
          • LED functions
          • Color
          • Brightness
          • Presets
        • SimHub control
      • Digital outputs
        • Setup
        • SimHub control
        • Firmware control
      • PWM / Circuit control
        • Setup
        • Calibrate
        • Switch control
        • Trigger control
      • Shift register
      • I2C devices
        • ADS1115
        • PCA9555
        • CAT24C512
    • Advanced
      • Analog inject
      • Conditional coding
        • Triggers
        • Editors
      • Field placement
      • Presets
        • 31_RunningPresets.ino
        • 32_Presets.ino
        • Example
    • Upload
    • Naming the controller
  • 4. Connect to SimHub
    • LED control
    • Controller settings and properties
      • How to connect?
      • How does it work?
      • How to control it?
      • Property list
  • Switch library
    • Pushbutton
    • Function switches
    • Toggle switches
    • Hat switches
    • Car control functions
      • QuickSwitch
      • BrakeMagic
      • ThrottleHold
      • Handbrake
    • Pedals & paddles
      • Brake/throttle
      • Clutch
      • Bite point & launch
      • Filtered curves
      • Shifter
    • Funky switch
      • Directional
      • Center push
    • Encoders
      • rotary2Bit
      • rotary4Bit
      • funkyRotary
      • wildEncoder
      • E18
      • rotaryPulse
      • PEC11
    • Rotary switches
      • rotaryAnalog
      • quickRotary
      • SW1
      • Editing functions
    • Multiswitch complexes
      • Hybrid rotary
      • Multifunction rotary
      • Modded encoder
      • Stacked encoder
    • Preset
    • DDS
    • RGB LED control
    • PWM / Circuit control
    • Utility
  • Fast DDC
    • Buttons and LED
    • 4 encoders, buttons and LED
    • Dual clutches, 4 encoders, buttons and LED
    • Dual clutches, 6 encoders, button matrix and LED
  • CB1
    • Ordering
      • Order together
      • Order yourself
        • 1. Open in EasyEDA
        • 2. Export files
        • 3. Edit Pick&Place
        • 4. Pin headers and jumper
        • 5. Order from JLCPCB
    • Wiring
    • Code
      • Essentials
      • Complete project
      • Settings
    • Circuit
    • Shields
      • Robin
  • Collaboration
Powered by GitBook
On this page
  1. Switch library
  2. Pedals & paddles

Bite point & launch

PreviousClutchNextFiltered curves

Last updated 5 months ago

These are functions that goes together with your single or dual clutches. Bite point is a certain % of clutch application. Usually the bite point of a car means the optimal amount of clutch % application to use in a standing start launch.

With dual clutch systems, you can have one clutch giving you clutch application only to the bite point when the paddle is completely pressed, and the other paddle gives 100% clutch application. When holding them together, you can give full throttle and then abruptly release the 100% clutch, bringing you to the optimal amount of clutch application instantly. The same can be achieved by using a and a single clutch paddle.

The bite point is pushed to joystick axis Ry, so you can access it in windows/SimHub. If you you DDC controller to SimHub, you can also access the bite point by the property [DahlDesign.DDCbitePoint].

biteButton()

The bite point button can either:

  • Quickly but less accurately set the bite point by holding the clutch paddle at the desired bite point and then pressing the button.

  • Together with a supported switch set the bite point with a 0.1% accuracy.

Any switch function that requires a bite button will be highlighted orange.

Normally works as a simple pushbutton that can be used to anything in-game. In addition, when held, the controller is primed to enter bite point setting. Hold + rotate a bite point compatible rotary (a rotary using a function that includes bite point setting, these are named rotary2Bite, PEC11Bite, etc.) to enter bite point setting mode. At this point, you can release the bite button. Further presses of the button will go through the stages of setting the bite point (mode 1-3), before in the end going out of bite point setting (back to mode 0).

SimHub property -> [DahlDesign.DDCbiteSetting]

Defaults to bit 11 and 12 in the rotary field, you dont have to assign a field placement.

Also, the state of the biteButton itself as a property [DahlDesign.R15].

Modes:

  • 0: Bite point setting inactive

  • 1: Bite point setting active. Adjust with steps of +/- 10

  • 2: Bite point setting active. Adjust with steps of +/- 1

  • 3: Bite point setting active. Adjust with steps of +/- 0.1

As stated above, this button's modes are not changed by using a modButton(), but by the biteButton() itself.

void biteButton(int row, int col)

For a switch on row 2 column 4 -> biteButton(2,4);

  • 1 button number

biteButtonLatch()

All similar to biteButton() above, but allows you to toggle the button on/off with single button presses. The advantage of this is you dont need to hold the button whilst making adjustments (some functions require you to hold the button, some dont) The downside is that it now can't be used as a regular button as well.

void biteButtonLatch(int row, int col)

For a switch on row 2 column 4 -> biteButtonLatch(2,4);

  • None

biteAdjustButton()

A regular pushbutton that, when biteButton() is held, can adjust the bite point by a specified amount.

You will specify an increment, which can be from -1000 to 1000. For instance, an increment of 20 will increase bite point by 2.0% on each button press. An increment of -125 will decrease the bitepoint by 12.5% on each button press.

Works well together with a rotaryMute or rotaryPartial switch where different positions of the switch will change the steps of the biteAdjustButton.

void biteAdjustButton(int row, int col, int increment)

For a switch on row 2 column 4 -> biteAdjustButton(2,4,10);

This switch will increase bitepoint by 1.0% on each press while biteButton is held. If the biteButton is not held, it works like a regular button.

  • 1 button number

  • Bite button

biteAdjustButtonSolo()

Similar to biteAdjustButton() above, but does not require biteButton to be held to adjust the bite point. On the flipside, it cant be used as a regular pushbutton as it doesnt trigger a button press.

void biteAdjustButtonSolo(int row, int col, int increment)

For a switch on row 2 column 4 -> biteAdjustButton(2,4,10);

This switch will increase bitepoint by 1.0% on each press.

  • Alltough technically it doesnt require a biteButton to work, you will always need a biteButton function in your code somewhere for your dualClutch() or singleClutch() functions to work properly. If you dont want to assign biteButton to any of your controllers buttons, you can create a virtual row/column and put it there.

launchButton()

Momentary pushbutton, should be assigned a button number. Works like a normal pushbutton, but when you hold a clutch paddle completely pressed and hit this button, it will drop the value of the clutch output to the set bite point.

While the clutch is pressed, this launch button press will not output its usual button number, but a button number +1 higher. Meaning this switch occupies TWO button numbers. One for normal use (lets say number 10), and one when used to launch (in that case number 11). This means you can even map a shifter paddle as launchButton(), and it wont change gears when you use it to launch with.

The reasoning behind giving a different button number output when used to launch, and not just being completely mute, is that you can use this button number to bind to traction control disable. For sims like iRacing, many cars only disables TC for a few seconds when you press to turn it off. This will turn off TC at the same time as you're doing the launch.

In esssense this makes it possible to do a single clutch launch and a 1-handed launch. Ideal for wheels with a single clutch paddle or for cars that also use handbrake on launch (rallycross and Supercar).

void launchButton(int row, int column, int analogChannelAffected)

For a switch on row 2 column 4, coupling to clutch that has master paddle on channel 3:

launchButton(2,4,3);

  • 2 button numbers

  • A analog switch to affect

neutralButton()

Pushbutton with two modes:

  • 0: Toggle on/off NEUTRAL, which sets the clutch to 100%. Info on this switch state is available as properties in SimHub. In addition, the property DahlDesign.SmoothGear will show “N” when this is active. 1: Regular momentary pushbutton.

  • 1: Momentary pushbutton

SimHub property -> [DahlDesign.NeutralActive]

SimHub property -> [DahlDesign.NeutralMode]

Defaults to bit 5 and bit 15 in button field, you dont have to assign a field placement.

[DahlDesign.SmoothGear] will show "N" when neutral is active.

void neutralButton(int row, int col)

For a switch on row 2 column 4 -> neutralButton(2,4);

  • modButton() if you want to swap modes.

  • 1 button number

bitePot()

When you add a bitePot() to the code, it will override any other bite point setting method. To prevent this, you can add a toggle or button to lock the bitePot() switch.

void bitePot(int analogChannel, int startValue, int endValue)

For a potentiometer on analog channel 4 it could look like this:

bitePot(4, 0, 1023);

  • None

bitePotLockButton()

A toggle button -> toggle on will lock your bitePot() switch, essentially silencing it in the code loop, and allowing you to use other ways to set the bite point on this controller:

  • Using presets

  • Using biteButton()

  • Using rotary switches and encoders

Toggling this off will make the bitepoint from the bitePot() override everything again.

This is also useful to prevent unintended changes to bite point.

Uses the button field.

Does not produce any button press, and therefore does not need to be assigned a button number.

void bitePotLockButton(int row, int col, int fieldPlacement)

For a switch on row 3 column 5 -> bitePotLockButton(3,5,1);

Here using fieldPlacement 1, meaning he 1st bit in the button field. If bite pot lock is on/off will be reflected by the property [DahlDesign.DDCB1].

  • A bitePot() switch

bitePotLockToggle()

A toggle switch functions -> toggle on will lock your bitePot() switch, essentially silencing it in the code loop, and allowing you to use other ways to set the bite point on this controller:

  • Using presets

  • Using biteButton()

  • Using rotary switches and encoders

Toggling this off will make the bitepoint from the bitePot() override everything again.

This is also useful to prevent unintended changes to bite point.

Uses the button field.

Does not produce any button press, and therefore does not need to be assigned a button number.

void bitePotLockToggle(int row, int col, int fieldPlacement)

For a switch on row 3 column 5 -> bitePotLockToggle(3,5,1);

Here using fieldPlacement 1, meaning he 1st bit in the button field. If bite pot lock is on/off will be reflected by the property [DahlDesign.DDCB1].

  • A bitePot() switch

Set up a device that output variable voltages, typically a potentiometer, to adjust the bite point. Should be wired .

As with all analog switches, you will need to values from the outer positions of the switch.

like this
connect
launchButton()
read out