While trying to get JoyLabz Makey Makey 1.2 to work with an iPad, I discovered there is no way to reprogram it.

It seems like this information hasn’t been disclosed quite enough as it should: Makey Makey’s version 1.2, produced by JoyLabz, cannot be reprogrammed with the Arduino software. In previous versions, you could customize the firmware — remap the keys, access the AVR chip directly — using an Arduino sketch.

🙌 NOTE: Dedokta on Reddit demonstrates how to make a Makey Makey.

Now, this isn’t necessarily bad: version 1.2 has a very nice way to remap the keys. This page here. You use alligator clips to connect the up and down arrows of the Makey Makey, as well as the left and right arrows, then plug it into the USB port. The remapping page then communicates with the Makey Makey through keyboard events. (See Communication.js.)

This is all very neat, but it might be nice to see warnings on firmware projects like this one that they only support pre-1.2 versions of the Makey Makey. (I realize the page refers to “Sparkfun’s version” but it might not be clear that there are two Makey Makeys floating about—it wasn’t to me.)

⛺ UPDATE: The text on the chip of the version 1.2 appears to read: PIC18F25K50. That would be this.

Some Notes About Connecting to iPads

Now, how I came upon this problem was while experimenting with connecting the Makey Makey to an iPad. Instructions for doing this with the pre-1.2 Makey Makey are here in the forums—by one of the creators of the MM.

With the 1.2 version, it appears that the power draw is too great. I received this message with both an iPad Air and an original iPad Mini.

Obviously a Makey Makey isn’t quite as interesting with an iPad — but I was messing with potentially communicating through a custom app.

Anyway, without being able to recompile the firmware, the iPad seems no longer an option. (The forum post should note this as well, no?)

Interfacing the Sparkfun Makey Makey with Arduino 1.6.7

If you do end up trying to get a pre-1.2 Makey Makey working with the latest Arduino, I ran into many problems just getting the settings right. The github repos for the various Makey Makey firmwares are quite dated.

One of the first problems is getting boards.txt to find my avr compiler. I had this problem both on Linux and Windows. Here’s my boards.txt that finally clicked for me:

############################################################################ menu.cpu=Processor ############################################################################ ################################ Makey Makey ############################### ############################################################################ makeymakey.name=SparkFun Makey Makey makeymakey.build.board=AVR_MAKEYMAKEY makeymakey.build.vid.0=0x1B4F makeymakey.build.pid.0=0x2B74 makeymakey.build.vid.1=0x1B4F makeymakey.build.pid.1=0x2B75 makeymakey.upload.tool=avrdude makeymakey.upload.protocol=avr109 makeymakey.upload.maximum_size=28672 makeymakey.upload.speed=57600 makeymakey.upload.disable_flushing=true makeymakey.upload.use_1200bps_touch=true makeymakey.upload.wait_for_upload_port=true makeymakey.bootloader.low_fuses=0xFF makeymakey.bootloader.high_fuses=0xD8 makeymakey.bootloader.extended_fuses=0xF8 makeymakey.bootloader.file=caterina/Caterina-makeymakey.hex makeymakey.bootloader.unlock_bits=0x3F makeymakey.bootloader.lock_bits=0x2F makeymakey.bootloader.tool=avrdude makeymakey.build.mcu=atmega32u4 makeymakey.build.f_cpu=16000000L makeymakey.build.vid=0x1B4F makeymakey.build.pid=0x2B75 makeymakey.build.usb_product="SparkFun Makey Makey" makeymakey.build.core=arduino makeymakey.build.variant=MaKeyMaKey makeymakey.build.extra_flags={build.usb_flags}

I also ended up copying the main Arduino platform.txt straight over.

Debugging this was difficult: arduino-builder was crashing (“panic: invalid memory address”) in create_build_options_map.go. This turned out to be a misspelled “arudino” in boards.txt. I later got null pointer exceptions coming from SerialUploader.java:78 — this was also due to using “arduino:avrdude” instead of just “avrdude” in platforms.txt.

I really need to start taking a look at using Ino to work with sketches instead of the Arduino software.