Brushless | Solenoid Pusher | Select Fire | OLED | Multi-speed

Features / Setup:

  • Brushless flywheels
  • Solenoid Pusher with Battery Voltage Calibration
  • Select fire – Auto, Burst, Semi
  • OLED screen
  • Ammo Counter
  • Single-stage fire trigger
  • Rev trigger to activate alternate power
  • Adjustable ROF (in DPS)
  • Adjustable Power (30% – 100%), and adjustable Alternate Power
  • 2 Profiles with quick-access buttons
  • Switch to access config, and fire trigger / rev trigger to cycle options
  • Battery voltage monitor + auto-calibration for 3s and 4s

Typical Blasters

  • Rapidstrike (with solenoid conversion)
  • Stryfe / Swordfish with solenoid pusher and config button

Parts required

  • Shell
  • Motors, flywheels, ESC’s with appropriate tune
  • Solenoid – 35mm of FTW with appropriate mounting kit
  • Trigger switch (stock OK)
  • 2 x buttons for Profile A / B (optional – if not used, only Profile A is available)
  • 3 way switch (either toggle On-Off-On or binary rotary switch)
  • Magazine switch (stock Rapidstrike / Stryfe OK)
  • I2C OLED display 128×64 pixels (not SPI)
  • Additional configuration switch (on Rapidstrike, I suggest the Jam Door switch)


  • 35mm solenoids perform poorly with stock return spring
  • Solenoids on 3s operation aren’t terribly quick
  • You will need to calibrate your battery sensor for best performance

Wiring Diagram

<insert here>

Source Code

Source Code Tweaks

Battery Calibration:
Change the following in the header:
Change 0.0 to any other value to adjust the reported battery voltage up or down by this value. You should keep this as a decimal (e.g. instead of 1 use 1.0)

Motor Speed Limit
Change the following in the header:
#define MOTOR_MAX_SPEED_3S 2000
#define MOTOR_MAX_SPEED_4S 1750
Change to any number between 1000 and 2000 where 1000 is 0% and 2000 is 100%. This is the hard max motor value in the firmware that is then used for the user-configurable parameters.
N.B. for Ultrasonic flywheels, you should limit to 75 – 80% on 4S packs to avoid flywheel meltdown.

Select Fire Switch Orientation
Change the following in function ProcessButtons()

if( SelectFireAButtonState == BTN_LOW && SelectFireBButtonState == BTN_HIGH  )
  CurrentFireMode = FIRE_MODE_BURST;

else if( SelectFireAButtonState == BTN_HIGH && SelectFireBButtonState == BTN_HIGH )
  CurrentFireMode = FIRE_MODE_SINGLE;

else if( SelectFireAButtonState == BTN_HIGH && SelectFireBButtonState == BTN_LOW && CurrentFireMode != FIRE_MODE_AUTO_LASTSHOT )
  CurrentFireMode = FIRE_MODE_AUTO;

You will need to swap BTN_LOW and BTN_HIGH around for each scenario. Start off by working out which one you want to swap (e.g. if Single and Burst are in the wrong order), swap the BTN_HIGH and BTN_LOW values for each respective condition.

Solenoid Timing
Change the following in the header
// Pusher 3S
#define PULSE_ON_TIME_HI_3S 45
#define PULSE_ON_TIME_LO_3S 100
// Pusher 4S
#define PULSE_ON_TIME_HI_4S 25
#define PULSE_ON_TIME_LO_4S 75

The retract time will depend on your spring, not the battery voltage. Make this number bigger to give the pusher a longer time to retract.
Pulse On Low and Pulse On High are the MOSFET pulse times for each battery type. HI is for a battery with a full charge. LO is for a battery with a low charge (i.e. storage voltage). Charge your battery to full, and tune the HI value. Then reduce the voltage to storage level and tune the LO value.

I like to use my finger to test to see how hard the solenoid is pushing at full extension – it should give a good, powerful whack on your finger as opposed to being stopped by it.

Because this is not an exact science (yet), get it close as you can, and then you can adjust by adding 5 – 10 to each of the LO and HI numbers to make it more reliable.
Important: Ensure your battery is properly calibrated before performing the timing calibration.