Jump to content

Recommended Posts

Posted

So I picked up a Microsoft Sidewinder FFB2 and a Thrustmaster FLCS on fleabay for a decent price and decided I'd do this classic mod. Theres a good bit of information on the web about how to do this, But I wanted to make the ultimate guide for all who wish to do this mod, combining all the info I gathered plus my own experiences.

 

I will update this thread as I work on the project.

 

First lets go over my Materials;

Microsoft Sidewinder FFB2, found on Ebay for $38 including shipping.

Thrustmaster FLCS hotas; Found on Ebay for $50.07 including shipping

A Teensy 2.0 Board; found on amazon for $25.96 including shipping

I also ordered some pins for the Teensy, But they won't be coming until December so I'll see if I can do without them.

 

Before Any of the packages even came I went ahead and gathered the code for the Teensy.

 

I downloaded the Arduino IDE software

https://www.arduino.cc/en/Main/Software

 

and grabbed the code needed. This can be found in many places, but I'll add it in here as well.

 

/* USB FLCS Grip
  You must select Joystick from the "Tools > USB Type" menu
*/

// Buttons are muxed into shift registers, use the SPI protocol to read them
#include <SPI.h>

const int slaveSelectPin = 0;

unsigned int buttonInputs1;   // data read from SPI
unsigned int buttonInputs2;
unsigned int buttonInputs3;

// Use some macros to clean things up
#define S3   !(buttonInputs1 & 0x80)    /* Pinky Switch */
#define TG1  !(buttonInputs1 & 0x40)    /* Trigger 1 */
#define TG2  !(buttonInputs1 & 0x20)    /* Trigger 2 */
#define S1   !(buttonInputs1 & 0x10)    /* Nose Wheel Steering */
#define S4   !(buttonInputs1 & 0x08)    /* Paddle Switch */
#define S2   !(buttonInputs1 & 0x04)    /* Pickle */

#define H1D  !(buttonInputs2 & 0x80)    /* Trim */
#define H1R  !(buttonInputs2 & 0x40)
#define H1U  !(buttonInputs2 & 0x20)
#define H1L  !(buttonInputs2 & 0x10)
#define H4U  !(buttonInputs2 & 0x08)    /* CMS */
#define H4L  !(buttonInputs2 & 0x04)
#define H4D  !(buttonInputs2 & 0x02)
#define H4R  !(buttonInputs2 & 0x01)

#define H3D  !(buttonInputs3 & 0x80)    /* DMS */
#define H3R  !(buttonInputs3 & 0x40)
#define H3U  !(buttonInputs3 & 0x20)
#define H3L  !(buttonInputs3 & 0x10)
#define H2D  !(buttonInputs3 & 0x08)    /* TMS */
#define H2R  !(buttonInputs3 & 0x04)
#define H2U  !(buttonInputs3 & 0x02)
#define H2L  !(buttonInputs3 & 0x01)

// setup() runs once on boot
void setup() {
 // set the slaveSelectPin as an output:
 pinMode (slaveSelectPin, OUTPUT);
 // start the SPI library:
 SPI.begin();
 // configure the joystick to manual send mode.  This gives precise
 // control over when the computer receives updates, but it does
 // require you to manually call Joystick.send_now().
 Joystick.useManualSend(true);
}


// loop() runs for as long as power is applied
void loop() {
 // take the SS pin low to select the chip
 digitalWrite(slaveSelectPin,LOW);
 // send a value of 0 to read the SPI bytes
 buttonInputs1 = SPI.transfer(0x00);
 buttonInputs2 = SPI.transfer(0x00);
 buttonInputs3 = SPI.transfer(0x00);
 // take the SS pin high to de-select the chip:
 digitalWrite(slaveSelectPin,HIGH); 

 // Write to joystick buttons
 Joystick.button(1,  TG1);
 Joystick.button(2,  S2);
 Joystick.button(3,  S3);
 Joystick.button(4,  S4);
 Joystick.button(5,  S1);
 Joystick.button(6,  TG2);
 Joystick.button(7,  H2U);
 Joystick.button(8,  H2R);
 Joystick.button(9,  H2D);
 Joystick.button(10, H2L);
 Joystick.button(11, H3U);
 Joystick.button(12, H3R);
 Joystick.button(13, H3D);
 Joystick.button(14, H3L);
 Joystick.button(15, H4U);
 Joystick.button(16, H4R);
 Joystick.button(17, H4D);
 Joystick.button(18, H4L);
 //Joystick.button(19, H1U);
 //Joystick.button(20, H1R);
 //Joystick.button(21, H1D);
 //Joystick.button(22, H1L);
 
 // Determine Joystick Hat Position
 int angle = -1;

 if (H1U) {
   if (H1R) {
     angle = 45;
   } else if (H1L) {
     angle = 315;
   } else {
     angle = 0;
   }
 } else if (H1D) {
   if (H1R) {
     angle = 135;
   } else if (H1L) {
     angle = 225;
   } else {
     angle = 180;
   }
 } else if (H1R) {
   angle = 90;
 } else if (H1L) {
   angle = 270;
 }
 Joystick.hat(angle);
 
 // Because setup configured the Joystick manual send,
 // the computer does not see any of the changes yet.
 // This send_now() transmits everything all at once.
 Joystick.send_now();
}

 

Don't ask how any of that works.. I failed Computer Science senior year. I'm just hoping it works without issue.

I saved the program, and left it on my desktop. We'll need that later.

 

 

 

Next the Sidewinder came. I plugged it in, made sure everything worked and had some fun flying around in various Modules. FFB is fun!

 

 

 

a few days later we got the FLCS and the Teensy. We don't need the teensy yet, So we'll leave that in the bag and keep it in a safe place.

 

The first thing I noticed was four screws right at the base of the grip, So I unscrewed those hoping the grip would pop right out.

 

Its never that easy..

 

I screwed those back in and had a look at the underside of the base.

 

20161111_161616.thumb.jpg.07f3a00381fd535f2cbb5e51448c3f04.jpg

 

Ahh, the old "Hide the screws under the rubber feet" trick. I popped them off with my knife and unscrewed them.

 

20161111_162223.thumb.jpg.7d84bea4dacdc878fdd352bb829d4ffd.jpg

 

Popping the bottom off, we find the gimbal as well as some old looking circuit boards. Cool!

 

20161111_162443.thumb.jpg.45feec61faca743350f8505ba756c9f7.jpg

 

The pitch gimbal popped off without effort. As you can see in the previous picture the wires (which we need to wire into the teensy) as zip tied to that axis. We cut the zip tie and the axis pops right off. We also cut the wires for the grip, I cut them as close to the circuit board as I could. Figured we'd need the extra slack.

 

20161111_175051.thumb.jpg.9b940b78e5395c6365d3ede4ef177bcb.jpg

 

The other gimbal didn't co-operate so well. I cut it with some Wire cutters and we were able to slip the grip out from the base, Success!

 

Oh, and those four screws on the top of the base? those needed to come out after all.

 

20161111_175203.thumb.jpg.33a4b77b7e15aa1cbfe96c3b2bb403d1.jpg

20161111_180608.thumb.jpg.70ebdce927308f34b58b8847e143077c.jpg

20161111_181733.thumb.jpg.ac2a45c23654f63afd7c12ed19d1f647.jpg

 

That bottom part of the shaft has a pin through it, and parts sticking out, so we carefully sawed off that part making sure not to harm the wires inside

 

 

 

Well. We've made good progress so far! Tomorrow I'll be going inside the Sidewinder to remove the old grip and attach the new one. I've become rather fond of it in the short period I've known it, so opening it up will take some courage. After that We'll be soldering the teensy up, programming it and sticking it somewhere in the base of the sidewinder. Some people put the teensy in the FLCS grip, but I saw no need to open the stick grip up.

 

I hope this guide helps a lot of people out once It's complete! I also hope at least a few people enjoy following along with me in this little adventure.

 

And if you have any advice, please do share! I can use all the help I can get!

Come fly with me, lets fly, lets fly away! -Sinatra

[sIGPIC][/sIGPIC]

My Specs: Lenovo Y50 with GTX 860m (2GB), i7 4700HQ 2.4GHz, 8GB Ram. Corsair K70(MX Blues are awesome!), Benq GW2760HS monitor, Steelseries V3 Prism headset, TM Warthog Hotas, Sidewinder FFB2 W/ FLCS grip, CH Pro pedals, TrackIR5, KW-908 Jetseat

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...