I want to build a box with 12 big buttons (http://www.arcadeshop.de/Illum-Buttons- ... d_505.html), that when you push a button, a sample is triggered and played and while the sample is playing the respective button is lid up. This is meant to be used by children from 4 - 15 to "jam" with a jazz band.

So my initial thought on how to approach this was to make a sturdy wooden box with an arduino uno inside that would connect via USB to a laptop (hidden somewhere else) and trigger samples through a max patch I've made. I also need to be able to change the samples that are being triggered (between each gig).

Before I go ahead and order these rather expensive buttons and components, I just wanted to hear if anyone here has any suggestions on this. Would there be a not-too-complex way to make these boxes more independent and maybe even without a laptop and Max? I thought about using a Raspberry Pie, but I'm not quite sure if what I want to do is possible with a Raspberry.

You could do it with a Wave Shield and an Arduino Uno. We have example code for a 6-button stand-alone version of what you describe. It could easily be extended to 12 buttons using a voltage divider to stack multiple buttons on an analog pin.

The chipKIT uC32™ development board is the same form factor and has the same connectors and features of chipKIT Uno 32™ but with larger microcontroller. The uC32 board has the larger Microchip® PIC32MX340F512H microcontroller featuring 80 Mhz 32-bit MIPS, 512K Flash, and 32K SRAM. Compared to the Uno32 that has Microchip® PIC32MX320F128 processor, 80 Mhz 32-bit MIPS, and 128K Flash, 16K SRAM.

OK, So I've build the waveshield and connected it to 12 buttons on A0 with a resistor ladder, and then I have connected 12 I/O's to control transistor that switch lamps on and off for each button.

I'm ALMOST there, but it seems I just need ONE more output pin (for the transistors) for this to work. I've used these:0, 1, 6, 7, 8, 9, 15, 16, 17, 18, 19... I tried using pin 11 (someone mention here that he succeeded doing so: viewtopic.php?f=31&t=40614) but it seems to always have an output of HIGH - i don't know why.

Does anyone have a suggestion to an easy way to get 1 more output IO? It would really be nice if don't have to go with IO expanders and such now.

hmm, perhaps I could simply remove the pin 11 (MOSI) from the waveshield.. I mean, if it's only used for writing to the sd card, there's not reason for using up that pin in my setup since I only read from the card. right?

You have to be able to write commands to the card in order to read it.

EDIT: I've been trying to think of a way to squeeze out another output, but I'm coming up empty. You've got 20 GPIO pins, and you're using 9 for SD, DAC, and analog input.

It's time to think about charlieplexing or some other method of multiplexing the outputs.

If you don't already know what charlieplexing is, it's based on the idea that you can drive pairs of output ports at opposite levels to drive multiple LEDs. In the simplest case, you can connect two LEDs to, say D0 and D1, with opposite polarities. To light LED1, you drive D0 LOW and D1 HIGH. To light LED2 instead, you drive D0 HIGH and D1 LOW.

If I remember correctly, the number of LEDs you can drive with n pins is (n * (n-1)). So, you should be able to do your 12 LEDs with only 4 GPIO pins.

The trick, of course, is that you can't light all 12 at the same time, and that's where the multiplexing comes in. You will have to rapidly cycle through all 12 combinations, lighting or not lighting each LED, as appropriate.

The effect is just like PWM - if your cycle time is fast enough, the blinking of each individual LED will not be perceptible.

"Do not train a child to learn by force or harshness; but direct them to it by what amuses their minds, so that you may be better able to discover with accuracy the peculiar bent of the genius of each" - Plato