Blueprint

Cubitpad

first hardware proj: macropad plus a knob + screen goal started as a small project, ended up being a project that attempts to maximize the amount of features for the available resources (limited io's)

Created by cubit010 cubit010

Hackpad

44 views

2 followers

cubit010 cubit010 added to the journal ago

added more custom functions to the rotary encoder

now is tri-mode with custom written class
image
now with brightness control, audio control, custom app volume control, and mode switching with long hold, and icons to indicate mode

cubit010 cubit010 submitted Cubitpad for review ago

cubit010 cubit010 added to the journal ago

Pain but finally done

Resistors I bought arrived today!
time to finally finish the project off I thought with confidence
(oh how wrong I was)
turns out the circuit I had previously designed with the two different resistors, wasn't enough to differenciate between directions (shown below)
23FB025E-65FE-48FA-8A3E-658253E131B0
and had to write separate code as a tester because I couldn't figure out analogin with kmk's very limited docs
after a bunch of testing using a scissor as a jumper I determined that for some reason even though the two resistors vary in resistance (47k and 100k), wasn't enough to be any different within the ADC's range

I had to ad-hoc together a voltage divider, which was able to get me the voltage differnce needed; with 1.1k being both a/b pins pulled to gnd, 1.3k begin one pin, 19000 being the other, and 60000+ for none active

this is able to get me the distinctions, however I still need a way to integrate them into KMK, and this is where I spent most of my time today, trying to figure out the analogio / analogin interface, writing a custom module to process the analog input, and testing this code that failed many many many times...
E4F73E48-AC55-4154-B8C2-1BABC74C9AFE
anyways above is what the divider looks like, kinda sketch but i was lucky the 3v3 pin was directly next to where i placed my original resistors, so i don't have to worry about structural integrity of a resistor leg spanning long distances

Alas, i'm finally free from done with the Cubitpad

cubit010 cubit010 added to the journal ago

customizing the kmk even more

replaced the mute/play words with 8x8 sized icons i drew myself
took a while to figure out how the image system worked, and then found out i had to write a setter function for image because initialization takes strings but setting it directly can't be done
S__16531467_0
S__16531466_0

cubit010 cubit010 added to the journal ago

More advanced KMK coding

did more advanced KMK, such as adding dual function to a key as a custom key, and also updating the display to indicate the mode it's currently on
took forever to debug and write as the docs are very sparse in info although it is nice that the community is decently fast at responding to questions, and updating the docs when clarification is clearly needed

trying to update the display live and finding a way to do so was kind of a pain
trying to make custom keys with custom functionality while knowing very little python is also a pain
adding multiple scanners to one macropad is also a pain

spent the whole afternoon instead of doing hw working on the software on ts
kinda pmo how long it took

image

Rotary encoder push button programmed to have 2 functions, mute, and play/pause, that is toggled with a long push of the push button, this is also independent of layers, and also updates the display on the current mode, shown below, in different colored layers, led functionalities, and rotary encoder modes

E52E9EDA-00AF-494C-B738-590CC8F22E02
E0A3B86B-56D9-4F88-9EAB-E06AA474DB1A09CE1D45-582A-44AA-8339-CC1CDCC0623C
CB41D626-0202-4CBB-B48F-447C8803492E
9655C6B9-BB1D-4AC6-848E-A7265A786E0607E4D1CC-B47E-43A3-92D1-FC6BA98BD544

cubit010 cubit010 added to the journal ago

screen + software integration

made the keypad multilayer, integration with holdtap, screen to display current layer, and also LED backlight color to indicate layer
when mode switching leds indicate / warn that layer is being changed,
when holding the mode change key, it will turn off all other leds and light up that key with red, and when a layer is confirmed, it will flash red on the whole for 0.15s to indicate layer change as mentioned above
has a sleep mode for the oled after 10 mins, and lowered brightness in 20s

BB5FBDFE-A92B-4190-AD58-4AD8D5C3D0F8
E00954E6-D1C4-4B50-8084-791E7B177E58

software took a long time last night reading over docs and stuff to figure out correct syntax + debugging layers
BUT IT LOOKS SO COOL HELL YEAH

cubit010 cubit010 added to the journal ago

Soldering LEDs and new components

Kit v2 arrived and was able to finish off most of the features
FINALY got the backlight to work after spending like 1 hour reflowing some solder in weak spots that was hard to identify in order to make all 9 light up consistently
IMG_0199
IMG_0202IMG_0201
Def worth it tho it looks so cool
(This also gives me a good estimate of brightness for how I should approach power budgeting in a full size keyboard, as previously I calculated if at full brightness the LEDs would use more electricity than the usb provides)
Also ofc spent a bunch of time debugging the code and identifying issues, for the most part it’s working again, and now I just have to finish off on the OLED and get the resistors for the rotary encoder

cubit010 cubit010 added to the journal ago

V3.5 pcb + some parts arrived

IMG_0137

New PCB arrived today + soldered the hot swap sockets
Added all the diodes I have from the previous kit
Waiting on the kit to arrive before soldering the rest + going to buy the resistors for the ADC soon

1Mon 1Mon requested changes for Cubitpad ago

really clean hackpad! please upload an image of it to your readme and check the submissions guidelines (https://blueprint.hackclub.com/about/submission-guidelines) to make sure everything is good to go!

Tier: 4

cubit010 cubit010 added to the journal ago

tuning plate and adding screen support

Last version of the plate fit very well but it had some inconsistencies with the case, and with this version i was able to fix that

imageS__15515738_0
S__15515735_0
S__15515736_0
S__15515737_0

First I added a block to support the oled screen i have since previously i used a standalone block and had to be taped down, integrating it into the plate is a perfect solution

Second the plate's well was too wide, so i shrunk it to match the dimensions of the top case, and both now fit perfectly (with exception of z axis gap because the bottom case had some bumps that made it so it can't ever close fully)

cubit010 cubit010 added to the journal ago

oopsies

image
just realized that i made an oopsies while updating the pcb
it was originally lined up with the fill but i must've misclicked at some point and dragged the line out a bit and i already sent it off to manufacturing so uh

not much of an update but now my pcb is gonna be so much less satisfying to look at knowing there's this flaw in it

cubit010 cubit010 added to the journal ago

Designing the plate for the keys

now that i'm switching to hotswap i needed to design a plate for the keys to sit on so i did that
image

this took 3 hours which is longer than i thought but i think it's worth it

features: (should be) perfect spacings between keys and case wall, and case top
voids to account for diodes' wire soldering that won't be flat to the pcb
calibrated height

also slots for the keys to slot into and lock properly
designed clearance for 3d printing as well as slopes for easier removal

cubit010 cubit010 submitted Cubitpad for review ago

cubit010 cubit010 added to the journal ago

modified into like a v3.5 with hotswap

so yeah
made a copy of the project so i can make a separate version with hot swap keys instead of soldered keys
will have to order the hot swap sockets but it'll be a nice touch to have and it should be worth it
will have to redesign the case to use a plate tho but shouldn't be too bad

image

the rewiring was a bit annoying as both contacts must be on the back sides now, so I can't dedicate only rows to one layer and columns to the other, but I was able to work everything out in a nice way

cubit010 cubit010 added to the journal ago

Erm what the sigma (im never saying that again)

IMG_9852
So ummm for some reason the XIAO decided it was a good time to unalive itself today
So now instead of only the keys working on my macro, now nothing works!!! (YIPPEEE)

there shoudln't have been anything that could've fried the chip, there was no josling, it was sitting in a case and the case had an air pocket for all electronic contacts so nothing should've conducted and shorted..

I tried nuking the bootloader and tried many times to reupload the u2f for circuitpython to no avail I have no clue what happened
Then thought it might’ve been some broken connections with the pins but after reflowing everything still nothing works so RIP

One good news tho is a new kit + some funds for pcb v3 is being sent out (:sob: ty hack club ik this is more money than it should’ve cost for me to make the project but the neopixel pcb was kinda unavoidable same with the XIAO randomly dying)

cubit010 cubit010 added to the journal ago

refining the PCB design

image
thickened some routes that are more critical such as the +5v to 0.4mm traces (probs overkill but it doesn't add manufacturing cost so why not)

as well as adding some fill areas to prevent right angles

cubit010 cubit010 added to the journal ago

Figured out a way that works + new pcb route + CORRECT LED

over the course of the last 2 weeks i've been on-and-off researching different ways I can potentially save pins without the use of another microcontroller, it took many many hours in the research itself (probs around 6-7 [very funny ik] hours over the past week or so, 1.5 hours ish today scrolling thru forums etc etc, none of them seemed to give any promise as they are either inconsistent, logic fails (i've looked at like 4 diff possibilities and all of them turned out to fail, such as one I originally thought could work, where I would reuse 2 column pins, spent way too long on that just for me to realize that if both columns are powered by one row during a scan, it would defeat the transistor's entire purpose)

one final resort i realized today(more like the 10th as this log is posted on the 11th at 1AM) that there's one actually possible setup to save a pin without the attiny, which is to run the A/B pins thru different resistors and measure the voltage with the analog pin (genius ik)

i spent a bunch of time researching the resolution of the rp2040 adc, as well as the workings of the EC11 encoder, and figured if i bought some resistor like from a resistor kit that are varied enough, the rp2040 should have more than enough resolution to tell the signals apart (and if my initial settings were wrong i can just adjust in firmware the values)

Along with that I did bugfix the led pins to match with the actual manufactured pinout
image
now it matches the footprint so hopefully this time everything will work out

Had to redo majority of the wiring, but some connections were made way easier than last time because of some optimizations with layout
image

now i just need some new funding so I can actually get a fully functioning macropad working
would be so sick
(yikes another long yap with 1.8k chars)

cubit010 cubit010 added to the journal ago

more firmware stuff + discovery

so uh spent forever looking at the docs to figure out the kmk needed for the hackpad.. and it worked!!! (still no rotary encoder tho bc the attiny is still dead, will likely just replace it with a transistor next time if possible)

New discovery!! my pcb routing for the LEDs are Fudged...
here's the thing

After I started working on the initial pad there was an announcement in blueprint saying that the LEDs are actually smd mounted up-side-down on the back of the board, and a new footprint was needed

Neat! As unlike some others I fortunately never did added any LEDs until after the footprint package came out, and after wiring everything up, nothing seems to budge
no matter what kind of software I tried I could not get a single LED to light up
There was a small chance it was just that the 3v3 was too low to register as a signal, but I decided to look at the hardware and my schematic, and then I found it...
(Footprint included in the care package)
Screenshot 2025-12-27 002653
(datasheet with pin numbers)
Screenshot 2025-12-27 002723
(Schematic)
Screenshot 2025-12-27 002753
Now the issue took me a while to figure out, had to draw a few diagrams and such to determine alignment and such because it's backmounted and kicad doesn't have a mirror feature when viewing back
anyways, the issue was that the footprint pins didn't match up with the schematic pins, so that for pin 3 in the footprint, it was supposted to be GND, but in the schematic symbol that I used for default because that's what the tutorial used, pin 3 is DIN, and everything else is also mismatched
that mean that literally every pin is wrong because I wired based on what the schematic gave me, and there's a high chance that I killed all of the leds because my 5v pin wasn't where it was supposed to go in the datasheet, as a result of the schematic pins not aligning properly with what the datasheet is

I'm hoping I can get a new kit and more funding to replace the bad PCB, but on the bright side, if I do get to remake the PCB, I can redesign it so that there's no need for an attiny, and just use a transistor instead so I don't have to worry about flashing firmware

(wow 2000 chars for a log, holy yap)

cubit010 cubit010 added to the journal ago

uhhhhhhhhhhhhhhhhhhhhhhhh might need to buy a new chip

image
so i've been thinking i likely either burnt the chip, or it somehow isn't working

i'll probably work on getting a different chip and also desolder the old one and everything, maybe

will try to get the rest of the macropad working for now

cubit010 cubit010 added to the journal ago

might've screwed myself over

(late 25th)
trying to get the firmware working; since i added the attiny212 to the board to in effect get more gpios, i'm struggling to flash the firmware for it to detect the rotary encoder as well as its push button, gpt, gemini, and claude sonnet were not of much help as I think I screwed myself over with the electrical design, and it could just be unavoidable

I might..? have to buy a dedicated flasher, desolder the chip from the pcb, and put it back and resolder
might be a pain

image

cubit010 cubit010 added to the journal ago

Soldering, 3d printing bottom case, and support removal

(this was yesterday the 24th but forgot to log)
2 hours soldering, (and accidentally burning myself twice in the process, both of which was when i was doing something else and i accidentally swiped the soldering iron tip (not fun) but they mostly recovered
S__13877278_0
(don't mind the gpt, first time soldering had to make sure)
S__13877279_0

(earlier 25th)
3d printed bottom case overnight with supports, and a lot of it unfortunately, kinda new to printing with supports and i think the way i aligned the print made the supports extra hard to remove
S__13877280
spent forever (which is around 1 hour and a half) scraping away at the bottom of the case to remove as much support material as possible

cubit010 cubit010 added to the journal ago

redone the design

finished redoing the design with no compromises while adding leds (ig if you want to count adding a small MCU to the board a small compromise but whatever it was basically the only option
schematic with the added MCU
image
New PCB layout (using the underside footprint for the leds)
also using knowledge from other projects (specifically the devboard) with the ground fill
image
new mcu is also on the back, as SMD, and under the oled on the front Cu

cubit010 cubit010 added to the journal ago

uhhhhhh modifying the design to add leds

the kit arrived with leds even though my design didn't have them
but now that I have them i might as well use them soooooo REDESIGN TIME
but the fact that i already used all the pins on the board is NOT helping
spent forever researching different ways to wire the keyboard or the rotary encoder but so far to no avail
image

CAN CAN ⚡🚀 approved Cubitpad ago

Nice hackpad!

cubit010 cubit010 submitted Cubitpad for review ago

cubit010 cubit010 added to the journal ago

Added screen

Added display finally
took a long time to figure out how to add symbols because I could not find a single source for the symbol that I want and took a while to make the symbol, and assigning it to a footprint etc
image
overlaps with the rp2040 but it's on the other side of the board so it should be fine
All gpios are filled now tho, gonna start on making the case and writing the firmware whatnot later

cubit010 cubit010 added to the journal ago

V2

started a v2 with a 3x3 matrix keypad layout, spent so long routing and improving on the designimage
basically made the 3x3, then realized for a matrix to properly function I do need some diodes, added those, kept the wiring relatively clean, then I realized I wanted a screen on the pad besides the scroll wheel/rotary encoder but there's not enough space and I didn't want to expand it beyond a 3x3, (plus there's not enough pins on the seeed to do that
So I had to reroute the rp2040 on the back of the pcb instead of the front, so I can save the front space for the screen I will put in later
that meant I had to change the wirings of each connections to the opposite side which made it slightly messier but it's still pretty clean imo
There's no more LEDs btw cause I want to save gpios for the screen later

cubit010 cubit010 added to the journal ago

Cleaned up routing -- gonna add more next

image
after spending like another an hour since I now have experience from the first routing, I optimized the placement of the routes a bit more like putting the gnds on the back in a grid by themselves, so as to clean up the look as well as removing the unnecessary vias and jams that was all over the place previously

cubit010 cubit010 added to the journal ago

PCB design

made the pcb design (took rly long to figure out how to pcb :sob:)
still getting the hang of wiring and figuring out what goes where
image
wiring is a bit weird and rly tight, prob not optimal but hey it's my first hardware project, gonna make it better or whatnot later, didn't matricize the keys but will prob have to later because I plan on adding a few more keys and a bunch more leds

cubit010 cubit010 started Cubitpad ago

11/18/2025 - PCB design

made the pcb design (took rly long to figure out how to pcb :sob:)
still getting the hang of wiring and figuring out what goes where
image
wiring is a bit weird and rly tight, prob not optimal but hey it's my first hardware project, gonna make it better or whatnot later, didn't matricize the keys but will prob have to later because I plan on adding a few more keys and a bunch more leds

11/19/2025 12 AM - Cleaned up routing -- gonna add more next

image
after spending like another an hour since I now have experience from the first routing, I optimized the placement of the routes a bit more like putting the gnds on the back in a grid by themselves, so as to clean up the look as well as removing the unnecessary vias and jams that was all over the place previously

11/19/2025 10 PM - V2

started a v2 with a 3x3 matrix keypad layout, spent so long routing and improving on the designimage
basically made the 3x3, then realized for a matrix to properly function I do need some diodes, added those, kept the wiring relatively clean, then I realized I wanted a screen on the pad besides the scroll wheel/rotary encoder but there's not enough space and I didn't want to expand it beyond a 3x3, (plus there's not enough pins on the seeed to do that
So I had to reroute the rp2040 on the back of the pcb instead of the front, so I can save the front space for the screen I will put in later
that meant I had to change the wirings of each connections to the opposite side which made it slightly messier but it's still pretty clean imo
There's no more LEDs btw cause I want to save gpios for the screen later

11/20/2025 - Added screen

Added display finally
took a long time to figure out how to add symbols because I could not find a single source for the symbol that I want and took a while to make the symbol, and assigning it to a footprint etc
image
overlaps with the rp2040 but it's on the other side of the board so it should be fine
All gpios are filled now tho, gonna start on making the case and writing the firmware whatnot later

12/11/2025 - uhhhhhh modifying the design to add leds

the kit arrived with leds even though my design didn't have them
but now that I have them i might as well use them soooooo REDESIGN TIME
but the fact that i already used all the pins on the board is NOT helping
spent forever researching different ways to wire the keyboard or the rotary encoder but so far to no avail
image

12/12/2025 - redone the design

finished redoing the design with no compromises while adding leds (ig if you want to count adding a small MCU to the board a small compromise but whatever it was basically the only option
schematic with the added MCU
image
New PCB layout (using the underside footprint for the leds)
also using knowledge from other projects (specifically the devboard) with the ground fill
image
new mcu is also on the back, as SMD, and under the oled on the front Cu

12/25/2025 11:54 PM - Soldering, 3d printing bottom case, and support removal

(this was yesterday the 24th but forgot to log)
2 hours soldering, (and accidentally burning myself twice in the process, both of which was when i was doing something else and i accidentally swiped the soldering iron tip (not fun) but they mostly recovered
S__13877278_0
(don't mind the gpt, first time soldering had to make sure)
S__13877279_0

(earlier 25th)
3d printed bottom case overnight with supports, and a lot of it unfortunately, kinda new to printing with supports and i think the way i aligned the print made the supports extra hard to remove
S__13877280
spent forever (which is around 1 hour and a half) scraping away at the bottom of the case to remove as much support material as possible

12/25/2025 11:58 PM - might've screwed myself over

(late 25th)
trying to get the firmware working; since i added the attiny212 to the board to in effect get more gpios, i'm struggling to flash the firmware for it to detect the rotary encoder as well as its push button, gpt, gemini, and claude sonnet were not of much help as I think I screwed myself over with the electrical design, and it could just be unavoidable

I might..? have to buy a dedicated flasher, desolder the chip from the pcb, and put it back and resolder
might be a pain

image

12/26/2025 - uhhhhhhhhhhhhhhhhhhhhhhhh might need to buy a new chip

image
so i've been thinking i likely either burnt the chip, or it somehow isn't working

i'll probably work on getting a different chip and also desolder the old one and everything, maybe

will try to get the rest of the macropad working for now

12/27/2025 - more firmware stuff + discovery

so uh spent forever looking at the docs to figure out the kmk needed for the hackpad.. and it worked!!! (still no rotary encoder tho bc the attiny is still dead, will likely just replace it with a transistor next time if possible)

New discovery!! my pcb routing for the LEDs are Fudged...
here's the thing

After I started working on the initial pad there was an announcement in blueprint saying that the LEDs are actually smd mounted up-side-down on the back of the board, and a new footprint was needed

Neat! As unlike some others I fortunately never did added any LEDs until after the footprint package came out, and after wiring everything up, nothing seems to budge
no matter what kind of software I tried I could not get a single LED to light up
There was a small chance it was just that the 3v3 was too low to register as a signal, but I decided to look at the hardware and my schematic, and then I found it...
(Footprint included in the care package)
Screenshot 2025-12-27 002653
(datasheet with pin numbers)
Screenshot 2025-12-27 002723
(Schematic)
Screenshot 2025-12-27 002753
Now the issue took me a while to figure out, had to draw a few diagrams and such to determine alignment and such because it's backmounted and kicad doesn't have a mirror feature when viewing back
anyways, the issue was that the footprint pins didn't match up with the schematic pins, so that for pin 3 in the footprint, it was supposted to be GND, but in the schematic symbol that I used for default because that's what the tutorial used, pin 3 is DIN, and everything else is also mismatched
that mean that literally every pin is wrong because I wired based on what the schematic gave me, and there's a high chance that I killed all of the leds because my 5v pin wasn't where it was supposed to go in the datasheet, as a result of the schematic pins not aligning properly with what the datasheet is

I'm hoping I can get a new kit and more funding to replace the bad PCB, but on the bright side, if I do get to remake the PCB, I can redesign it so that there's no need for an attiny, and just use a transistor instead so I don't have to worry about flashing firmware

(wow 2000 chars for a log, holy yap)

1/11/2026 1 AM - Figured out a way that works + new pcb route + CORRECT LED

over the course of the last 2 weeks i've been on-and-off researching different ways I can potentially save pins without the use of another microcontroller, it took many many hours in the research itself (probs around 6-7 [very funny ik] hours over the past week or so, 1.5 hours ish today scrolling thru forums etc etc, none of them seemed to give any promise as they are either inconsistent, logic fails (i've looked at like 4 diff possibilities and all of them turned out to fail, such as one I originally thought could work, where I would reuse 2 column pins, spent way too long on that just for me to realize that if both columns are powered by one row during a scan, it would defeat the transistor's entire purpose)

one final resort i realized today(more like the 10th as this log is posted on the 11th at 1AM) that there's one actually possible setup to save a pin without the attiny, which is to run the A/B pins thru different resistors and measure the voltage with the analog pin (genius ik)

i spent a bunch of time researching the resolution of the rp2040 adc, as well as the workings of the EC11 encoder, and figured if i bought some resistor like from a resistor kit that are varied enough, the rp2040 should have more than enough resolution to tell the signals apart (and if my initial settings were wrong i can just adjust in firmware the values)

Along with that I did bugfix the led pins to match with the actual manufactured pinout
image
now it matches the footprint so hopefully this time everything will work out

Had to redo majority of the wiring, but some connections were made way easier than last time because of some optimizations with layout
image

now i just need some new funding so I can actually get a fully functioning macropad working
would be so sick
(yikes another long yap with 1.8k chars)

1/11/2026 7 PM - refining the PCB design

image
thickened some routes that are more critical such as the +5v to 0.4mm traces (probs overkill but it doesn't add manufacturing cost so why not)

as well as adding some fill areas to prevent right angles

1/12/2026 - Erm what the sigma (im never saying that again)

IMG_9852
So ummm for some reason the XIAO decided it was a good time to unalive itself today
So now instead of only the keys working on my macro, now nothing works!!! (YIPPEEE)

there shoudln't have been anything that could've fried the chip, there was no josling, it was sitting in a case and the case had an air pocket for all electronic contacts so nothing should've conducted and shorted..

I tried nuking the bootloader and tried many times to reupload the u2f for circuitpython to no avail I have no clue what happened
Then thought it might’ve been some broken connections with the pins but after reflowing everything still nothing works so RIP

One good news tho is a new kit + some funds for pcb v3 is being sent out (:sob: ty hack club ik this is more money than it should’ve cost for me to make the project but the neopixel pcb was kinda unavoidable same with the XIAO randomly dying)

1/14/2026 - modified into like a v3.5 with hotswap

so yeah
made a copy of the project so i can make a separate version with hot swap keys instead of soldered keys
will have to order the hot swap sockets but it'll be a nice touch to have and it should be worth it
will have to redesign the case to use a plate tho but shouldn't be too bad

image

the rewiring was a bit annoying as both contacts must be on the back sides now, so I can't dedicate only rows to one layer and columns to the other, but I was able to work everything out in a nice way

1/17/2026 - Designing the plate for the keys

now that i'm switching to hotswap i needed to design a plate for the keys to sit on so i did that
image

this took 3 hours which is longer than i thought but i think it's worth it

features: (should be) perfect spacings between keys and case wall, and case top
voids to account for diodes' wire soldering that won't be flat to the pcb
calibrated height

also slots for the keys to slot into and lock properly
designed clearance for 3d printing as well as slopes for easier removal

1/19/2026 7 PM - oopsies

image
just realized that i made an oopsies while updating the pcb
it was originally lined up with the fill but i must've misclicked at some point and dragged the line out a bit and i already sent it off to manufacturing so uh

not much of an update but now my pcb is gonna be so much less satisfying to look at knowing there's this flaw in it

1/19/2026 10 PM - tuning plate and adding screen support

Last version of the plate fit very well but it had some inconsistencies with the case, and with this version i was able to fix that

imageS__15515738_0
S__15515735_0
S__15515736_0
S__15515737_0

First I added a block to support the oled screen i have since previously i used a standalone block and had to be taped down, integrating it into the plate is a perfect solution

Second the plate's well was too wide, so i shrunk it to match the dimensions of the top case, and both now fit perfectly (with exception of z axis gap because the bottom case had some bumps that made it so it can't ever close fully)

1/30/2026 - V3.5 pcb + some parts arrived

IMG_0137

New PCB arrived today + soldered the hot swap sockets
Added all the diodes I have from the previous kit
Waiting on the kit to arrive before soldering the rest + going to buy the resistors for the ADC soon

2/2/2026 - Soldering LEDs and new components

Kit v2 arrived and was able to finish off most of the features
FINALY got the backlight to work after spending like 1 hour reflowing some solder in weak spots that was hard to identify in order to make all 9 light up consistently
IMG_0199
IMG_0202IMG_0201
Def worth it tho it looks so cool
(This also gives me a good estimate of brightness for how I should approach power budgeting in a full size keyboard, as previously I calculated if at full brightness the LEDs would use more electricity than the usb provides)
Also ofc spent a bunch of time debugging the code and identifying issues, for the most part it’s working again, and now I just have to finish off on the OLED and get the resistors for the rotary encoder

2/4/2026 10 AM - screen + software integration

made the keypad multilayer, integration with holdtap, screen to display current layer, and also LED backlight color to indicate layer
when mode switching leds indicate / warn that layer is being changed,
when holding the mode change key, it will turn off all other leds and light up that key with red, and when a layer is confirmed, it will flash red on the whole for 0.15s to indicate layer change as mentioned above
has a sleep mode for the oled after 10 mins, and lowered brightness in 20s

BB5FBDFE-A92B-4190-AD58-4AD8D5C3D0F8
E00954E6-D1C4-4B50-8084-791E7B177E58

software took a long time last night reading over docs and stuff to figure out correct syntax + debugging layers
BUT IT LOOKS SO COOL HELL YEAH

2/4/2026 10 PM - More advanced KMK coding

did more advanced KMK, such as adding dual function to a key as a custom key, and also updating the display to indicate the mode it's currently on
took forever to debug and write as the docs are very sparse in info although it is nice that the community is decently fast at responding to questions, and updating the docs when clarification is clearly needed

trying to update the display live and finding a way to do so was kind of a pain
trying to make custom keys with custom functionality while knowing very little python is also a pain
adding multiple scanners to one macropad is also a pain

spent the whole afternoon instead of doing hw working on the software on ts
kinda pmo how long it took

image

Rotary encoder push button programmed to have 2 functions, mute, and play/pause, that is toggled with a long push of the push button, this is also independent of layers, and also updates the display on the current mode, shown below, in different colored layers, led functionalities, and rotary encoder modes

E52E9EDA-00AF-494C-B738-590CC8F22E02
E0A3B86B-56D9-4F88-9EAB-E06AA474DB1A09CE1D45-582A-44AA-8339-CC1CDCC0623C
CB41D626-0202-4CBB-B48F-447C8803492E
9655C6B9-BB1D-4AC6-848E-A7265A786E0607E4D1CC-B47E-43A3-92D1-FC6BA98BD544

2/4/2026 11 PM - customizing the kmk even more

replaced the mute/play words with 8x8 sized icons i drew myself
took a while to figure out how the image system worked, and then found out i had to write a setter function for image because initialization takes strings but setting it directly can't be done
S__16531467_0
S__16531466_0

2/10/2026 1 AM - Pain but finally done

Resistors I bought arrived today!
time to finally finish the project off I thought with confidence
(oh how wrong I was)
turns out the circuit I had previously designed with the two different resistors, wasn't enough to differenciate between directions (shown below)
23FB025E-65FE-48FA-8A3E-658253E131B0
and had to write separate code as a tester because I couldn't figure out analogin with kmk's very limited docs
after a bunch of testing using a scissor as a jumper I determined that for some reason even though the two resistors vary in resistance (47k and 100k), wasn't enough to be any different within the ADC's range

I had to ad-hoc together a voltage divider, which was able to get me the voltage differnce needed; with 1.1k being both a/b pins pulled to gnd, 1.3k begin one pin, 19000 being the other, and 60000+ for none active

this is able to get me the distinctions, however I still need a way to integrate them into KMK, and this is where I spent most of my time today, trying to figure out the analogio / analogin interface, writing a custom module to process the analog input, and testing this code that failed many many many times...
E4F73E48-AC55-4154-B8C2-1BABC74C9AFE
anyways above is what the divider looks like, kinda sketch but i was lucky the 3v3 pin was directly next to where i placed my original resistors, so i don't have to worry about structural integrity of a resistor leg spanning long distances

Alas, i'm finally free from done with the Cubitpad

2/10/2026 6 PM - added more custom functions to the rotary encoder

now is tri-mode with custom written class
image
now with brightness control, audio control, custom app volume control, and mode switching with long hold, and icons to indicate mode