I described, in a previous post, how to assemble a 4×4 Sparkun’s button and led matrix. Let see how to connect it.
Because of the (quite) large number of leds and button, I will be using an Arduino MEGA. That will allow to drive RGB leds and button without any additionnal component. Well… almost : we’ll still need
- 12 150Ω resistor for the RGB leds
- a few jumper wires
- 3 small breadboards
- an Arduino MEGA of course
RGB led and Arduino
An RGB led is actually… 3 leds : 1 Red, 1 Green and 1 Blue (thus RGB). They all share a common cathode and have 3 anodes, 1 per color.
Choosing the voltage applied to each color allows to choose the brightness of each color, allowing, in turn, to display a broad range of colors.
An Arduino does not have analog outputs. Only digital ones. So we’ll use digital output to “simulate” analog ones using a technique called PWM. For more details on PWM see here.
Wiring the button & led matrix
Without the matrix, we would need 3×16=48 PWM pins… that’s a lot. With the matrix, we only have 4 rows, each row being connected to 4 leds. This implies some limitations but we now only need 3×4=12 PWM pins and Arduino MEGA 2560 has… 15 of it. Phew…
In addition of connecting the anodes to PWM pins, we also need to connect the cathodes to simples digital pins. We only need 4 of them because we have 4 columns, each column being populated with 4 leds sharing the GND.
And then, we’ll need 4 digital pins for button GND (cols) and 4 more for signal (rows)
You’ll find an interresting article about about keyboard matrix here.
And put it in a box !
I used the box in which my netatmo thermostat was provided : a nice cube with the perfect size ! I’ve done a bit of cut in the box and the spacers and here is the final result :
A simple test program
We’we wired evrything up, we can start programming the gizmo and see what it can do. You will find a test program here.
As you see, it is quite simple : at startup, it senquentially lights up all leds then, on each button press, it light up the corresponding led, changing color each time.
It is just for testing. I’ll work on some more interresting programs and post them !