Open comments for this post
Major PCB Improvements
Many edits were made to the PCB, explained below:
- Underglow LEDs on top and bottom were added!
- Key LEDs were moved to a much better position
- Used a ground fill instead of routing
- Keys are more spaced and lined up
- Traces are now 0.5mm thick
All V2 now needs is a CAD update!
Open comments for this post
Finished Firmware and Ship!
After cleaning up the PCB design and generating gerber files I spent some time working on the firmware! I decided to use QMK for the firmware and programed support for all my hackpad’s features!
The default keys are the 4 Arrow keys, Z, and the volume knob with push to mute.
I did not expect the firmware to be as difficult to program as it was! This has been a fun project, there is still much to work on as things come together in the real world but I’m proud of where I’ve gotten up to now!
Open comments for this post
Devlog 1!
Hello world!
To commence this project I began my reading the DIY guide and following along, eventually splitting off and designing a keypad with my own variations! Below is a detailed overview of my keypad:
My keypad consists of 5 keys and a rotary encoder. The rotary encoder contains a switch that when pressed can be interpreted as it’s own keypress. I was hoping to use the rotary as a volume knob and it’s switch as a mute/unmute button. I placed them to the side to leave space for the controller as can be seen in the PCB design.
The keypad also has 5 LED’s, all strung together through the data in/outs. For the last feature, this keypad contains a programmable OLED screen on the top that can be used to display anything your imagination wants!
Moving forward I have yet to program the firmware, and I will also have to clean up the schematic as it’s quite messy.
Open comments for this post
Devlog 3!
More features on the way!
After uploading v1 and creating a readme I put time into writing new methods that will further make this project easy to use!
On Flysky controllers, the switches are lettered a-d. Instead of having to find out what channel the switches are mapped to, I designed a method that lets you pass the switch’s letter and it returns the bool value without you having to deal with the channel #.
In terms of complexity I also added two new methods for more experienced programmers using this lib:
readChannelRaw: This method returns the raw data from a specified channel
readSwitchRaw: This method returns the raw uninverted state of a switch.
Next up is writing examples and making axis mode settings!
Open comments for this post
Devlog 2!
Real world testing!
After having written the most basic functions, I’ve gone to my electronics cabinet and put my code to the test!
Using a proper FlySky i6 controller I tested my library with an Arduino Mega and was able to find and troubleshoot many issues in my library code and .ino example. Overall everything worked really well, so I am now looking towards implementing more complex methods and features to both make the lib easier to use and to tailor it to the interests of more advanced users.
Cheers!
Open comments for this post
Devlog 1!
For a long time Flysky controllers have been used in personal avionics and robotics projects, interacting with many boards.
All this time there has only been one main library used to interpret the signals from these controller’s receivers: iBusBM. It’s a great library for what it’s made for, but it’s design requires the need for extra code to be written if you want to read specific channels or switches in a clean manner.
My goal with this library is to simplify the code integration of Flysky into two main easy-to-use methods:
readAxis();
readSwitch();
Each method does exactly as their name suggests!
As this project develops I plan on adding more specific methods for more advanced use cases such as getting raw inputs or setting axis modes, but next up is real world testing on different boards!
Cheers!