James-Macropad
Hardware- 7 Devlogs
- 14 Total hours
A hackpad following Hack Club's Macropad guide (my first PCB project)
A hackpad following Hack Club's Macropad guide (my first PCB project)
I’ve successfully soldered my PCB and assembled my parts using some 3d prints and the kit that arrived a while ago.
There was an issue with my design where 2 out of the 6 screws in my design ended up being redundant, but it still works as-is!
I tested the KMK code that I wrote earlier and due to several errors in the code, it didn’t work.
I refactored the code to fix the errors, and I also added additional functionality:
The OLED screen features an input display that keylogs the user the key commands and combinations that they press.
Making it work was actually surprisingly hard. For one, KMK does not provide much built-in functionality to perform an action after a specific key is pressed. I decided to create my own custom class - OLEDManager - to manage the keyboard’s TextEntry’s. OLEDManager can be placed itself in the actual firmware loop of KMK by adding it to keyboard.modules - allowing it to activate after keys are pressed or after the matrix is scanned. However, this took a while for me to figure out - there was some boilerplate required that I only corrected after some trial and error.
Initially, the keylogging functionality didn’t work if multiple keys were pressed at once, as KMK did not store key press events in some sort of log. I made a workaround that tracked the keypresses by adding and removing them incrementally based on the keypress and keyrelease events. After that, I ran into the issue where some keys wouldn’t be logged at all, or would only show up on the display AFTER the keys were released. This took me a really long time to figure out, but any keys that aren’t associated with layer change keys (e.g. KC.MO and KC.TG) don’t prompt any KMK Display rerenders. I could not simply update the text property of the TextEntry objects, I had to actually force a rerender after every keypress in order for the logging functionality to perform as expected.
Just completed a simple KMK firmware for my macropad, including two keyboard layers and encoder/OLED functionality.
Finished the casing for my macropad, including space for the heated insets + screw holes.
Finished the basic frame of the macropad casing in Fusion! I still need to make holes for the screws + adjust some further details, but there is a frame!
The way I implemented the plateless mounting style is definitely a little weird. The top half of the case has plate “cutouts”, but there’s a little bit of clearance between the MX keyswitches and the “plate”. I hope this will give my plateless macropad a bit more support
I completely redesigned the PCB (again) to fix an error where I forgot to leave the USB port hanging off the edge… haha.
I’ve also begun the process of designing a case for the PCB in Fusion.
Custom redesign for a 3x4 layout with a rotary encoder + an OLED. Unfortunately, Lapse glitched and I couldn’t record the PCB design process.
Initial iteration of PCB case + PCB design