#include const int noteFreqs[20] = {87,93,98,104,110,117,123,131,139,147,156,165,175,185,196,208,220,233,247,0}; // frequencys of notes int lastNote = 19; // which note was last pressed, inits as "None" Tone player; #define beginRow 6 #define endRow 10 #define beginCol 14 #define endCol 17 void setup() { for(int i = beginRow;i<=endRow;i++) { // row pins pinMode(i,INPUT_PULLUP); } for(int i = beginCol;i<=endCol;i++) { pinMode(i,OUTPUT); // column pins digitalWrite(i,1); // init as 1 (for pulled up inputs, this is low) } /* matrix setup is Column to Row * to scan a column, that pin goes low and each row is checked to see if current can sink * if it can, then that button is seen as being pressed */ player.begin(5); } void loop() { for(int i = beginCol;i<=endCol;i++) { // key sensing digitalWrite(i,0); // allowing column pin to sink current for(int j = beginRow;j<=endRow;j++) { if(digitalRead(j) == 0) { lastNote = ((i-beginCol)*5)+j-beginRow; // 5 keys per column } } digitalWrite(i,1); } player.play(noteFreqs[lastNote]/2); if(lastNote == 19) { player.stop(); } }