I finished this project recently and I wanted to share some guidance based on the issues I encountered. I completed the version 3 GamePi, and I found that some instructions were missing and some parts were not as described. If you're thinking about making this project, just be aware that doing the version 3 might be more difficult. As far as I can tell, the version 1 is well documented, but I did not do that version of the project so I cannot vouch for it.



There were a number of difficulties I encountered during this build that the instructions did not help with. They are as follows:



* The switch joysticks do not have easily solderable pins

* The switch joystick pinouts were not described

* The switch joystick teensy code was not working

* The volume wheel potentiometer pinouts were described incorrectly

* The battery/power control board did not have the described pins

* The Raspberry Pi 3B itself needed to have parts removed to fit in the version 3 case



Here are the solutions I came up with. I am not an expert so use my solutions at your own risk.



1. The switch joysticks do not have easily solderable pins



The switch joysticks have tiny ribbon cable outputs, flat like a sheet of paper. The parts list for the version 3 includes .5mm FFC connectors (https://www.dropbox.com/s/yhb71a7k6quudqf/GamePi_3_Parts_List.xlsx) which are intended to connect to those ribbon cable outputs. The issue there is the .5mm pin outputs from the FFC connector are too small to solder to. Close inspection of the version 3 case internals picture (https://thingiverse-production-new.s3.amazonaws.com/assets/c2/57/93/4b/8b/IMG_20180923_205211.jpg) show a much larger FFC connector with pins that are able to be soldered directly. As phehr2 pointed out in their own discussion post, this problem can be solved with a breakout board. I bought mine here: https://www.ebay.com/itm/6-Pin-FPC-Connector-to-DIP-Breakout-Board-0-5mm-1mm-Pitch-Pack-of-3-/301724393113. The breakout board has 6 pins while the connector has 5, but of course you can just ignore the extra 6th pin and not solder anything to it. This step is one of the most difficult I encountered. If you are not comfortable doing surface mount soldering, or do not have the tools to do so, opt for different joysticks or buy a larger FFC connector.



2. The switch joystick pinouts were not described



The instructions left me to research the switch pinouts on my own. Luckily, since the switch is a widely available console and the joysticks themselves are closely studied, this information was readily available. In fact, phehr2 also provided this information in their discussion post. However, the order of the pins might be a little confusing. If you look at the ribbon cable the wires are visible and can be examined relative to the nearby screw hole. Counting from the closest to farthest wires from the screw hole, the pins are Y axis, ground, joystick button, X axis, and +3.3v. The X and Y axis for this pinout description seem to be flipped from what the actual switch uses for the joysticks, but since the teensy code to interpret the joystick inputs is custom written to use the pins this way, it works anyways.



3. The switch joystick teensy code was not working



Once again, phehr2 provided teensy code that was working for the switch joysticks, since that Y axis needed to be inverted. However, I ran into issues while following the calibration instructions. Basically, the teensy needs to be connected to the computer after being wired up to the inputs in the case. I compensated for this by leaving a microUSB cable attached to the teensy while it was in the case, and ran the wire out through the not-yet-filled external USB slot. It meant that the teensy was every so misaligned with its slot, but it worked. Next came the calibration, where I had issues with phehr2's program. The way phehr2 had mapped the lowest observed values and highest observed values assumed that the resting position of the joystick was directly in-between the highest and lowest values, and I found this not to be the case. I redesigned the program to allow calibration for the lowest and highest "resting values", when the joystick is not being moved. Then, the program determined if the joystick is below, within, or above the resting values. It maps values appropriately based on this. I also changed the calibration process to report the minimum and maximum values through Serial.println, viewable using the Arduino IDE serial monitor. phehr2 mentioned joy.cpl providing the numeric values from the joystick but mine was not doing that. I also used the online tool https://html5gamepad.com/ which allows testing the gamepad in a browser. That tool gave me better information while calibrating than joy.cpl, and it is not windows exclusive so it can help if you are calibrating on a non-windows environment. I will attach my version of the teensy code.



4. The volume wheel potentiometer pinouts were described incorrectly



The volume wheel listed for the version 3 parts list is not the same as the one used for any other version, and it is not the volume wheel show in the version 3 internals picture. It is this one: https://www.amazon.com/dp/B00O9Y6Z70. If you are using this potentiometer, the pinouts are shown in one of my attached photos.



5. The battery/power control board did not have the described pins



This part was pretty far outside my comfort zone, so my solution may be incorrect, use it at your own risk. The charger module listed in the version 3 parts list is not the same as described in any version of the build, and it is not the one shown in the version 3 internals picture. The internals picture shows a much easier board to use, with connections easily accessible and labeled. The board from the parts list, however, does not have the same pins and labels. Instead, what I had to do was de-solder the microUSB input and USB output from the board and solder my connections instead. The negative wire from the external charging port was wired to the negative connection for the board's microUSB connection, and the positive wire from the external charging port was wired to the positive connection for the board's microUSB connector. Similarly, the negative connection from the board's USB output was wired to the negative pin for the power switch, and the positive connection from the board's USB output was wired to the positive pin for the power switch. The battery was connected to the B- and B+ connections, with negative being connected to B- and positive being connected to B+. The - sign with a circle around it connection on the board I left unused. I assume this connection is meant to go to chassis ground, but this is a plastic case. Leaving it that way may cause static build up problems, I'm not sure. This wiring configuration allowed the external microUSB charging board to "pass through" to the power control board, and allowed the USB output for the power control board to provide power to the pi through the power switch. I left the tiny button on the power board alone, I did not press it and I did not desolder it. The only issue I have encountered with the board so far is that plugging a charging cable into the case's external power port while the pi is on causes it to restart suddenly. As a side note, the LEDs that indicate the level of charge are very bright, they can almost be used like a flashlight.



6. The Raspberry Pi 3B itself needed to have parts removed to fit in the version 3 case



This part is rather simple, but I didn't see it explicitly mentioned anywhere in the instructions for the version 3. The Pi itself will need to have certain components removed in order to actually fit in the case. The parts I had to remove are the USB ports and the ethernet port. I would recommend only removing these AFTER you are entirely certain that the pi is properly configured to work with the display and other components in the case. They can be desoldered off the board or gently pulled apart. I am not great at desoldering so I opted to just carefully pull them apart piece by piece.



Finally, some general tips:



* The volume was very quiet out of both the speakers and headphones for me at first. This was solved by increasing the volume inside the retropi software. I increased the volume from 50 to 80. I saw many recommendations to not set it to 100, this causes issues.

* (Once again, I'm not confident with the power wiring, so take my advice on this at your own risk) In the version 3 internals picture, the battery has its positive and negative connections directly exposed. In my opinion this is NOT good, as my battery came with a small under/over voltage protection board attached to the battery, and wires that came out of it. I left this under/over voltage protection board on the battery as a safety precaution. The protection board looks like these: https://www.amazon.com/Lithium-Battery-Protection-Polymer-Discharge/dp/B07MP2YQB1, though I am not certain if those boards will work for this battery and this circuit.

* The connections to the speakers were incredibly flimsy for me, and all 4 detached. Either be very careful with these and don't move them around much, or be ready to rip up the material covering the connections and re-solder.

* The breakout boards for the joysticks are large and unwieldy in the case, I cut mine down to a smaller size while keeping the connections intact.

* The version 3 internals photo shows a lot of hot glue being used, but I opted to use superglue for many portions instead. I still used some hotglue, but superglue did the job with less bulk.

* The switch joystick screw hole outcroppings were just a bit too big to fit with the speakers there, so I cut them off using a pair of wire cutters. Just be sure not to confuse the orientation of the joysticks after doing this!

* I had some issues with the teensy connecting to the pi until I covered the external USB with some electrical tape. There might have been some kind of short caused by it, so it's a good idea to cover the top of the external USB with some electrical tape.

* The switch joystick ribbon cables are VERY flimsy and I tore one by moving it around too much. Be careful and try not to strain the ribbon cables.

* If the buttons are off-center from the switches underneath, you get a gummy, not so great feeling button. Be sure to carefully align the buttons and their switches. This can be difficult to do with the prototyping boards.



I hope that my ramblings here can provide a little extra insight for anyone stuck struggling with this project or someone deciding if this project is for them. Good luck!

