Go Down

Topic: MIDI Keyboard Encoder - Arduino Piano/Keyboard (question) (Read 37614 times) previous topic - next topic


Hi there,
lately I've been thinking to build a 72-key Arduino Piano. I had searched a lot, until I bumped into this guy's site: http://midikits.net23.net/midi_8x9_keys/midi_8x9_keys.htm
I first thought he was selling the circuit, but then, as I was scrolling down the page, I found out some circuit diagrams: http://midikits.net23.net/midi_8x9_keys/keys_8x9_switches.gif
"OK, now I know exactly how to organise all those switches in a matrix", I thought. But the problem is that I have no idea how to program my Arduino UNO R3, so that it transforms the signals received to sound. I guess I' ll have to connect the MIDI 5-pin socket to some kind of device, but I thought of an alternative. What if I sent the information received by the Arduino over to my PC and then convert it to sound, which will be produced by my PC's speakers? In that way I think that I could program my PC to produce different sounds for each key pressed; just like an ordinary keyboard, which can play different instruments.
Yesterday I sent an e-mail to the creator of the site but he said that the source code isn't available, but he can sell an Arduino compatible, pre-programmed chip for 9 Euros (about 9 Dollars)! It was clear that he is trying to make a profit out of it! Those people totally piss me off!
Can anybody help me with this project? I would really apreciate it! Keep in mind that I want to be able to play chords (press two or more keys simultaneously) and I also want to hear the note produced for as long as I keep the key pressed, but fading a little bit as time passes.
Thank in advance for your answers!


pre-programmed chip for 9 Euros (about 9 Dollars)! It was clear that he is trying to make a profit out of it! Those people totally piss me off!

There's nothing stopping you doing it and then sending pre-programmed chips for free to anyone who asks for one. That would really eat into his obscene profits.
Oh wait.
You can't.
You don't know how to do it.

Don't send me technical questions via Private Message.


I think, there are 2 questions:  keyboard and midi synthesis.
For first one, search multiplexing, there are bunch of examples, including arduino codes:
For second, midi synthesis, there are special midi shields based on 40 polyphony IC:
Of course, you can do synthesis on PC, there are open source / free software available on-line.


Thank you for answering! The links provided seem to be useful, but I'm too newbie to find the information I want.
Firstly, I intend to build the switch matrix. Then I will make all the necessary connections, and I will connect the MIDI OUT to a MIDI to USB converter (yeah! I've just found out that there's such a thing!). A USB port on my computer will be used to receive the binary information; that means that I need special software to covert the signals to sound, aren't I? As far as the multiplexing is concerned, I don't think that it is essential. This schematic requires 18 I/O pins on the Arduino, so there is no problem.

So, the problems are the following:
1.Do I need to download the MIDI library for the Arduino? If yes, how do I install it?
2.How can the signals from the 72 keys be converted to MIDI signals? What is the source code for this purpose? (I don't expect anybody to sit and write the whole code for me. That would be called "audacity". I just need some information, in order to learn how to do it on my own. Of course, I would refuse to accept any code...)
3.Is it possible to just convert MIDI to USB, without using any extra equipment? This site: http://arduino.cc/en/Hacking/MidiWith8U2Firmware put thoughts into my mind...

And I said previously: "Keep in mind that I want to be able to play chords (press two or more keys simultaneously) and I also want to hear the note produced for as long as I keep the key pressed, but fading a little bit as time passes" (this probably has to do with the source code - part)


About the MIDI to USB converter, I' ve found this: http://www.spikenzielabs.com/SpikenzieLabs/Serial_MIDI.html
Is it fine?

P.S.: I don't intend to spend any extra money on bying more circuits. It's OK to build my own, but not buy already-done ones. Those are far more expensive, than handmade.


I'm actually just about to start a similar project to convert an old organ console into a MIDI controller for my computer. Magician is right; you have two problems to tackle here: the (hardware) controller and the synthesis. Disclaimer: I'm also a complete newbie to Arduino, but I've done a fair bit of programming and I'm currently studying audio engineering.

Outputting MIDI via USB on the Arduino itself seems perfectly plausible, and also more sensible than wasting serial pins when you're already gifted with USB output :) That SpikenzieLabs link looks like it could already have it sorted for you...

There is a library that reads switch matrices here: http://arduino.cc/playground/Code/Keypad and it comes with its own tutorial: http://arduino.cc/playground/Main/KeypadTutorial#Notes. It may need a little modification to handle large matrices (I need to read in 200 odd switch inputs!) but it looks like a very good start. The Arduino MIDI libraries look like they can handle all the MIDI output needs you'd ever want, so all you'd need to write is some code to map the output returned by the Keypad library into input for the MIDI library. The Keypad library has both key press and key release handling which you'd use to send your note-on and note-off messages. Handily, there's a built in event listener, which you'd probably want to use to call your own code.

Let me know how you get on; if I come up with anything handy, I'll be sure to stick it up on the Playground.


Well, I'm not sure that downloading Keypad Libraries would help me. So, let me make more clear  :)
As I told in a previous post I found this wiring diagram ---> http://midikits.net23.net/midi_8x9_keys/keys_8x9_switches.gif
and I think its ideal. It is really easy for me to make so this would be the one I am considering to use (unless sb has a better solution). The hardware issue is really sorted out! My only problem is how I' m going to make the Arduino to translate the short of two pins to binary information ready to be read by a midi software. This my plan:
1. I Press a key.
2. A switch creates a closed circuit between 2 Arduino pins.
3. The Arduino "senses" that.
4. And begins the "translation" process.
5. Then it sends out a signal to the MIDI connector.
6. The signal then is read by a MIDI device (which in my case would be the computer).

I have figured out steps 1, 2 and 6, but I have no idea what to do for steps 3 to 5. Keep in my mind that I'm not sure if this is the process required in order to output a MIDI signal, but I believe that you will understand what my point is.

Thank you for all your answers and help  :)


This is precisely what the Keypad library does :) - take a look at the tutorial. The wiring diagram you posted is a keyboard matrix, which significantly reduces the number of required IO pins. To achieve step 3, you need matrix scanning code (which is what the Keypad library is). As a bonus, the way it is written eliminates the need for the diodes in your wiring diagram, hence the simpler diagram: http://arduino.cc/playground/uploads/Main/keypad_pin_diagram.png Of course, instead of a keypad, you have a musical keyboard, but the principle is exactly the same, just with all the keys laid out in a single line instead of rows. There is plenty of info about scanning keyboard matrices on the web, but I suspect it'll just show you that using pre-built Arduino libraries will make life much easier :)

Step 4 will be your own code to define which midi signals are sent out for which keys.

Step 5 MIDI signals themselves are dealt with by the MIDI library and whichever USB MIDI solution you choose to use. (Suggest you get it working on normal MIDI first, before getting caught up in USB MIDI stuff...)


If you *really* want all the details about scanning key matrices:

(Convinced me pretty thoroughly that Arduino was the way to go, but it brings up some interesting stuff nonetheless...)


To achieve step 3, you need matrix scanning code (which is what the Keypad library is). As a bonus, the way it is written eliminates the need for the diodes in your wiring diagram, hence the simpler
sammyg, you are correct that the diodes are not required for preventing shorts between keys on keypads and keyboards.  But there is another problem called shadowing where some combinations of multiple keypresses will cause the keyboard driver to think that an extra key is being pressed when it is not.  That would mean an extra note would be added to the chord.  The solution is to place a diode across every key.  All midi keyboards should already have the diodes but if op builds his own he should add them.


Ah, indeed; rather a large oversight on my part. Thank you for pointing this out mstanley and of course, thanks for writing such a useful library :)

I built a MIDI controller with an old organ keyboard, an Arduino and two hc595 shift registers.  It is documented in my blog (it's written in french, but maybe the sketch and schematics will be of some help?)

Scanning the keyboard and displaying the result on the serial monitor:

And then sending out MIDI messages:


:~ Hmmmm... All those tutorials confused me... The last one seemed to be the best, but unfortunately it is in French and I couldn't understand what's going on! I downloaded the Keypad and MIDI Libraries and installed them, but I really need some guidance for the code. As I've already mentioned I couldn't figure it out... I suppose that the given codes in the links need to be modified in order to work with my switch setup, which by the way I've built. I used these switches ---> http://www.superdroidrobots.com/images/TE-044-000.jpg and I also used 1N4148 diodes just in case. I installed them on a wooden structure but there  are not any keys yet. These will be made later. Anyway...  I know that I asked for instructions, but that doesn't obviously work... So, would anyone be kind enough to write the code for me, or give me some clear instructions on how to write the code on my own (don't forget that I want the code to co-operate with the swtitch setup I made).
Sorry for being such a newbie, but I really need to complete this project.
Thanks in advance...


Come on.... Somebody! I' ve already invested money in this project. It would be such a pity if I gave up!

Go Up