RGB LED Button Pad – Requirements

After observing my son’s interest in the glowy buttons on my Rigol DS1102E, I decided to design an interactive toy for him utilizing that type of button.

SparkFun sells 2 x 2 and 4 x 4 translucent silicone button pads that accommodate a standard 5 mm through-hole LED.  Adafruit now sells a smaller dimension 4 x 4 button pad, but it can only accommodate 3 mm LEDs.  I’m not aware of any RGB LEDs that come in that package size, but I may see how well it works with surface-mount RGB LEDs in a future project.

My requirements are:

  • 4 x 4 translucent button pad
  • 5 mm through-hole diffused lens RGB LEDs
  • N-key rollover to prevent jamming and ghosting
  • Arduino compatible micro-controller for easy programming
  • AA battery powered
  • DC boost circuit to extend useful battery life, inspired by projects like Ray’s AA Saver
  • Individual on/off control of LEDs through shift registers or LED drivers
  • Single 2-layer PCB
  • Buzzer capable of playing musical notes spanning a few octaves

A’SYCK AD-121F2 – RGB 7 Segment LED Display Review

The A’SYCK AD-121F2 is a unique LED display offered for sale by Adafruit Industries.  I’ve seen plenty of bi-color segmented displays for sale, but nothing more complex than that.  I have seen one made the hard way by hollowing out an existing display and gluing in individual surface mount RGB LEDs over on Markus’ blog.


The A’SYCK AD-121F2 has a single common anode pin for all three colors and 21 individual segment cathode pins.  Bringing each cathode out to a pin makes it flexible for hobbyists as it doesn’t require multiplexing.  However, it would be nice if the anodes were separated out by color to allow for that option.  The digit is 25.4 mm tall with nice fat segments.  There are dedicated pins and a spot on the face of the display for a right-hand decimal point, but the pins and corresponding LED die for it are not installed.

The 22 connections required for this internal arrangement won’t fit as two single rows of pins on opposite sides of the package like traditional displays.  The four-row through-hole arrangement doesn’t make it very breadboard friendly.  A handful of male-female jumper wires make short work of wiring it into a breadboard.


I already had a breadboard wired up with an Adafruit USB Boarduino, 7 NXP PCA9635 16-channel I²C LED drivers, and a macetech Chronodot for a different project  I wired over the A’SYCK AD-121F2 into 3 of the drivers, one for each color, to test out this display.  The PCA9635 isn’t a constant current driver, so I adjusted the PWM duty cycle proportionally to achieve similar brightnesses for each color while using the same 100 ohm series current limiting resistor for each color.


I wrote a quick sketch to read the current time from the Maxim DS3231 on the Chronodot, and to cycle the display through hours, minutes, and seconds.  The first digit of the hours fades in from black to red, then the second digit fades in as green and out to black.  The first digit of the minutes fades in from black to green, then the second digit fades in as blue and out to black.  And finally, the first digit of the seconds fades in from black to blue, and then the second digit fades in as red and out to black.

The display is nice and bright.  I had to shoot this video through several pieces of tinted acrylic to stop my iPhone from adjusting the exposure.  I didn’t realize this until I uploaded the video, but there is a bug in my code when accessing the DS3231 registers right as the minutes increment.  But you get the idea, right?