What

This button pad is made using a PCB and other components manufactured by Sparkfun. It is driven by an Arduino Mega. Each button is nice and squishy and satisfying to press, and it has an RGB LED inside!



I've been using it to control animations I've coded in Processing. The button pad sends a message whenever a button is pressed, saying which button it was. Processing receives these messages and changes variables in the sketch depending on what was pressed.

Why

LEDs are cool.

Buttons are fun to push.

Animated geometric patterns are nice.

I wanted to combine all three.



I took this project to a party, projected the visuals on the wall and let people play with the buttons. It could also be used by a VJ in a more performative way, much like a midi controller but more DIY.

How

There are four main parts to this project.

The attached Youtube video gives a good look at how the button pad goes together. This Instructable covers that as well as the Arduino and Processing code - (additional videos for those are in the works)

Putting the button pad together - Starts in Step 1

This involves preparing the components and soldering them to the PCB The Arduino code - Starts in Step 10

For this, we need an understanding of matrix scanning, which I will talk through. The Processing code - Starts in Step 24

There are endless possibilities here, I'll talk through one example I've made so far. Getting the Arduino to send messages to Processing - Step 16 for sending, Step 30-31 for receiving

This is nice and simple, it sends the message over a serial connection.

Level

I try and write my tutorials in such a way that someone with absolutely no knowledge at all can at least follow along. You might find it helpful to first watch some introductory tutorials about Processing. I'd start with Daniel Shiffman's YouTube channel.

Code

All of the code (Arduino and Processing) is on my github here.

Credits

I learnt a bunch from this tutorial https://learn.sparkfun.com/tutorials/button-pad-ho... and much of the Arduino code is from there, although I have edited it to work slightly differently from any of the examples there.