Major master controller firmware update!

I have finally managed to rewrite some parts of firmware code I wasn’t particularly happy with, namely the collective head switch parser! It was a mess, used huge amounts of memory, yet only allowed using around 17 physical buttons.

I understood that with 2 more collective heads that will soon be added to Simchair collection, a major cleanup was needed, along with some changes related to use of flash memory to store configurations more efficiently. This allowed me to design a cleaner configuration structure that could be parsed more efficiently, and thus, I was able to add more buttons!

As of now, we can use up to 32 buttons of types 1 and 2, and up to 9 buttons of types 3 and 4 – buttons from 33 to 42 are reserved for to be assigned as middle buttons. With a mode switch support, this is 96 virtual buttons plus 33 available for middle switch positions. The latter are now defined explicitly, allowing for a wider range of configurations. These changes should allow for pretty much any collective configuration, with twice the buttons compared to what we had before.

Another good thing – all heads now have common data structures, that are populated in setup subroutines from corresponding configuration structures. This reduces chances of breaking something when adding features and makes things cleaner =)

Please sync with the repo and reflash, report bugs if you find any!

Here’s how new head switches configuration looks:

// COLLECTIVE SWITCHPANEL SWITCH MATRIX – NOW SUPPORTS UP TO 32
// BUTTONS + 10 ADDITIONAL BUTTONS FOR TYPES 3 AND 4
// 4 SWITCH TYPES ARE SUPPORTED:
// 1: button
// 2: momentary press button
// 3: selector button (button + middle button press when switch is centered)
// 4: selector momentary press button (momentary press button + middle button momentary press when switch is centered)
// ASSIGN THE BUTTON AFTER TYPES 3 AND 4 TO TYPE 5 (SLAVE) AND SET JOYSTICK BUTTON YOU WANT TO BE THE MIDDLE BUTTON IN 3RD COLUMN!
// BUTTONS FROM 33 TO 42 ARE RESERVED FOR MIDDLE BUTTONS

//0 – disabled, 1 – button, 2 – 3 – selector_button, 4 – selector, 5 – slave
const sw_matrix ab412_switch_matrix[] PROGMEM =
{
// i t m is i – id, t – type, m – middle button for types 3 and 4
{1, 1, 0},
{2, 1, 0},
{3, 2, 0},
{4, 2, 0},
{5, 2, 0},
{6, 2, 0},
{7, 2, 0},
{8, 2, 0},
{9, 3, 33},
{10,5, 33},
{11,3, 34},
{12,5, 34},
{13,3, 35},
{14,5, 35},
{15,4, 36},
{16,5, 36},

};


New “scale” Bell-412 collective head cover

I continued experimenting with white paint marker and acetone and made a “scale” version of a top panel for a 412-style head requested by a friend. In my humble opinion, it looks great, white paint adds some “aging”, and it looks more like it was taken off from a real helicopter. It differs from the original slightly, but has a disctinctly recognizable look overall!

Realistic throttle latch operation for all collective levers

When I added support of sending a button press at zero throttle position for new throttle latch, I thought that nothing actually prevents me from doing the same thing for levers with tactile idle stop mark!

So, I have added a similar mode for Huey-style lever (which still looks better with a tactile mark design, as in the real Huey the idle stop latch is driven by a solenoid). So, to press the cutoff button (throttle latch button in Dreamfoil 407 for Xplane11) with a turn of the throttle grip, in case of the tactile mark lever, one has to press the assigned idle release button on the head before moving throttle grip past the idle stop detent. This pretty much makes all levers very similar in the sense of realism, the only thing absent in tactile mark levers being the actual detent of the idle stop. Not a big deal tbh!

For levers with physical latch, the button will always be pressed when the throttle grip reaches its zero position.

Here’s how it looks in the configuration:

#define BUTTON_PRESS_ON_THROTTLE_CUTOFF 1// this feature will send a joystick button press when the throttle is fully closed
#define THROTTLE_LATCH_MODE “TACTILE” // PHYSICAL for physical latch mod or TACTILE for levers with tactile marks
#define PHYSICAL_LATCH_MOD_JOY_BUTTON 32 // joystick button number as seen in joy.cpl for the 1st Leonardo in the list
#define THROTTLE_MIN_AXIS_VALUE 0 // check this if the default doesn’t work, print raw_throttle value in e_single_collective.ino and set this line to its value, corresponding to a fully closed throttle

News on the latest updates

I have been working on the 206-style collective lately, and here’s what it looks like so far:

A few notes about it:

  • it works!
  • it will be released as a mod to the single throttle lever.
  • it uses 3 parts (one of which is an assembly of 3 small parts itself) that are different from the original lever, so any existing single throttle lever can be modified without too much effort
  • 1st test video showing an assembled lever will probably be released on this weekend =)

I have also added a mod (part 1 and part 2) for the collective housing that allows access to the magnet from the left side of the lever:


And look at this really great 407 head design sketch by Connor P. Bourque (I hope you don’t mind me posting it for everyone to see mate)!


Hopefully, I will be able to assemble and try the lever on this weekend.

Stay tuned! =)

Collective pneumatic mod manual updated

A few good things happened in the last few days.

  • I have added a very detailed step-by-step manual for the collective pneumatic mod. Some minor improvements were made.
  • I’ve been able to test the twin collective with it, works flawlessly
  • MAL-16-100 cylinder has been tested, and it works as good as the MAL-16-150 one, but is shorter (this is the shortest one that will work, MAL-16-50 is incompatible!)
  • some minor tweaks has been made to the software configuration to fit new manuals.
  • the helicopter controls set is now completely documented (and very polished)!

We now have quite a detailed documentation with photos for:

single and twin collective levers;
collective heads (switch panels);
reinforced cyclic gimbal with its stick frame;
B8 stick grip;
pedals.

Enjoy!

A better XTrident 412 support

It’s been a long time since I added the XTrident 412 startup and shutdown support (for some weird reason it doesn’t have key assignments for starter and idle stop buttons) by request of my friends and I’ve been pretty much concentrating on polishing the hardware lately. I never liked that script, as it was pretty glitchy and written in an anal way, and it may have possibly been eating up some hard – earned FPS. But finally, I’ve gotten some time to read the docs and came up with a much cleaner script, that just adds a few entries to XPlane’s controls menu. It works perfectly and does not disable starter and idle stop switches from sending joystick button presses, unlike the old one, so you can use them when flying something else, and that’s cool =)

An old compatibility mode is now deprecated and will probably be removed (for being anal!) from the firmware. Please let me know if you guys need an option of sending keyboard presses with head switches (you can always do it with software like Joystick Gremlin btw).

To the new script, install FlyWithLua plugin, and put the script under XPlane11\Resources\plugins\FlyWithLua\Scripts folder. Start the sim, and you will find new key assignments for XTrident 412 under Simchair MKIII/412 tab. However, you will notice that there are 3 keys for each switch: left, right, and middle positions. That’s where 412 head’s special switch modes come in handy!

You can either get the latest master controller firmware from GitHub, or make the following changes in switches configuration for the 412 head:

  1. Remove button numbers from ab412_coll_head_idle_stop_buttons[] and ab412_coll_head_starter_buttons[] arrays:

    byte ab412_coll_head_idle_stop_buttons[] = {};
    byte ab412_coll_head_starter_buttons[] = {};

  2. Remove these buttons from ab412_sw_mode_button_switches[] array as well:

    byte ab412_sw_mode_button_switches[] = {1,2,17};

  3. Add these buttons to ab412_sw_mode_selector_button_switches[] array:

    byte ab412_sw_mode_selector_button_switches[] = {9,11,13};
  4. Reflash the firmware.

Universal throttle quadrant page added

I have accidentally noticed yesterday that I’ve actually forgotten to add a throttle quadrant page after I finished working on it and built a prototype!

This is now fixed, and the quadrant finally has its own page with a humble description. Consisting of only 4 different (stackable) parts, the thing is probably the easiest one to make, so doesn’t require much of a manual to assemble mechanically. Regarding the software, its current version supports 3 main axes and 3 secondary (reverse or smth) axes, and can be easily changed to support 6 main axes. If you need more and are in doubt about how to do it, please feel free to contact me, I will advise the best way to tailor the software to your needs. This quadrant design can be used to drive any axes number, so you can fly pretty much anything from a Cessna 182 to a B52 with it! =)

Helicopter pedals improvements

While building another set of helicopter pedals, I’ve accidentally cracked the wall of the frame in its weakest spot while press-fitting a 300mm piece of aluminum tubing.

As the frame is quite a long print, requiring some noticeable amount of plastic, I felt the need to do something with this problem (which I have already tried to address a while ago by inclining the tubing slot to reduce its shrinkage). As the fit is quite tight (which is intended) depending on a printer (and temp used to print parts, which should be higher than usual for pedals, I use 225 degrees centigrade for regular PLA, at first, try printing a frame leg and fitting it on a piece of aluminum tubing, it should not break), and also tubing used (there’s a tubing that is 9,8mmx 19,8mm and there’s a tubing that is 10,0×20,0) it may become overly tight. In this case, one needs to sand it a bit, but if the available clearance is misjudged, the frame can crack. Of course, that’s what happened to me (again!) =)

So, here’s the fix, that hopefully will straighten things out:

I have added 10mm extra width to the back of the frame and removed the forward slot for aluminum tubing because of aesthetical reasons (I’ve never used it anyway, and to make it reliable I would have had to add a similar “thing” to the front of the frame, which would have looked kinda out of its place). Note that I have also added a little chamfer, hoping to reduce shrinkage on edges thus reducing chances of an overly tight fit.

I have also added a mod with rubber band holders removed. I have been testing the spring-loaded version for a while now, and it works perfectly (better than rubber bands) yet this is a very refined thing I like to improve gradually. Besides, one can still use it with rubber bands just fine, but note that the latest force-trim mode for a spring-loaded cyclic will only work with pedals with springs. That’s because pedals have to return to the same exact spot every time when released, what actually cannot be achieved with rubber bands.

I hope to be able to print the new frame until tomorrow and tell you guys how things worked.

All changes are already in the repo.