Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tmthfrg/cd42542c46f53da62dc8badc10a2ea1d to your computer and use it in GitHub Desktop.
Save tmthfrg/cd42542c46f53da62dc8badc10a2ea1d to your computer and use it in GitHub Desktop.
Davido Piano Keys
#include <ArduinoSound.h>
#include <SD.h>
#include <SPI.h>
#include <I2S.h>
int buttonPin[] = {1, 0, 5, 4, 13, 8, 11, 10, 7, 6, 9, 14}; //pin su cui colleghi i vari bottoni
char *notes[3][12] = { {"waveFile1", "waveFile2", "waveFile3", "waveFile4", "waveFile5", "waveFile6", "waveFile7", "waveFile8", "waveFile9","waveFile10","waveFile11","waveFile12", }, //da mettere i nomi dei file
{"waveFile13", "waveFile14", "waveFile15", "waveFile16", "waveFile17", "waveFile18", "waveFile19", "waveFile20", "waveFile21","waveFile22","waveFile23","waveFile24", },
{"waveFile25", "waveFile26", "waveFile27", "waveFile28", "waveFile29", "waveFile30", "waveFile31", "waveFile32", "waveFile33","waveFile34","waveFile35","waveFile36", }
};
int prevState[12];
int currState[12];
int buttonState = 0;
const int volumePot = A0;
const int instrumentPot = A1;
int potValue;
int delta;
int deltaDuration = 2500;
int instrument;
SDWaveFile waveFile1;
SDWaveFile waveFile2;
SDWaveFile waveFile3;
SDWaveFile waveFile4;
SDWaveFile waveFile5;
SDWaveFile waveFile6;
SDWaveFile waveFile7;
SDWaveFile waveFile8;
SDWaveFile waveFile9;
SDWaveFile waveFile10;
SDWaveFile waveFile11;
SDWaveFile waveFile12;
SDWaveFile waveFile13;
SDWaveFile waveFile14;
SDWaveFile waveFile15;
SDWaveFile waveFile16;
SDWaveFile waveFile17;
SDWaveFile waveFile18;
SDWaveFile waveFile19;
SDWaveFile waveFile20;
SDWaveFile waveFile21;
SDWaveFile waveFile22;
SDWaveFile waveFile23;
SDWaveFile waveFile24;
SDWaveFile waveFile25;
SDWaveFile waveFile26;
SDWaveFile waveFile27;
SDWaveFile waveFile28;
SDWaveFile waveFile29;
SDWaveFile waveFile30;
SDWaveFile waveFile31;
SDWaveFile waveFile32;
SDWaveFile waveFile33;
SDWaveFile waveFile34;
SDWaveFile waveFile35;
SDWaveFile waveFile36;
void setup() {
Serial.begin(9600);
if (SD.begin())
Serial.println("SD inizializzata");
else {
Serial.println("Errorre con la scheda SD!");
exit(1);
}
delta = 0;
waveFile1 = SDWaveFile ("DO.wav");
waveFile2 = SDWaveFile ("DOd.wav");
waveFile3 = SDWaveFile ("RE.wav");
waveFile4 = SDWaveFile ("REd.wav");
waveFile5 = SDWaveFile ("MI.wav");
waveFile6 = SDWaveFile ("FA.wav");
waveFile7 = SDWaveFile ("FAd.wav");
waveFile8 = SDWaveFile ("SOL.wav");
waveFile9 = SDWaveFile ("SOLd.wav");
waveFile10 = SDWaveFile ("LA.wav");
waveFile11 = SDWaveFile ("LAd.wav");
waveFile12 = SDWaveFile ("SI.wav");
waveFile13 = SDWaveFile ("DO_1.wav");
waveFile14 = SDWaveFile ("DOd_1.wav");
waveFile15 = SDWaveFile ("RE_1.wav");
waveFile16 = SDWaveFile ("REd_1.wav");
waveFile17 = SDWaveFile ("MI_1.wav");
waveFile18 = SDWaveFile ("FA_1.wav");
waveFile19 = SDWaveFile ("FAd_1.wav");
waveFile20 = SDWaveFile ("SOL_1.wav");
waveFile21 = SDWaveFile ("SOLd_1.wav");
waveFile22 = SDWaveFile ("LA_1.wav");
waveFile23 = SDWaveFile ("LAd_1.wav");
waveFile24 = SDWaveFile ("SI_1.wav");
waveFile25 = SDWaveFile ("DO_2.wav");
waveFile26 = SDWaveFile ("DOd_2.wav");
waveFile27 = SDWaveFile ("RE_2.wav");
waveFile28 = SDWaveFile ("REd_2.wav");
waveFile29 = SDWaveFile ("MI_2.wav");
waveFile30 = SDWaveFile ("FA_2.wav");
waveFile31 = SDWaveFile ("FAd_2.wav");
waveFile32 = SDWaveFile ("SOL_2.wav");
waveFile33 = SDWaveFile ("SOLd_2.wav");
waveFile34 = SDWaveFile ("LA_2.wav");
waveFile35 = SDWaveFile ("LAd_2.wav");
waveFile36 = SDWaveFile ("SI_2.wav");
for (int n = 0; n < 12; n++){
currState[n] = 0;
prevState[n] = currState[n];
pinMode(n,INPUT_PULLUP);
digitalWrite(n, HIGH);
}
}
void loop() {
playNote();
potValue = analogRead(volumePot);
AudioOutI2S.volume(map(potValue, 0, 1023, 0, 35));
potValue = analogRead(instrumentPot);
instrument = map(potValue, 0, 1023, 1, 3);
if ( debugLog() ) {
Serial.print("Valore letto: ");
Serial.println(potValue);
Serial.print("Valore riportato: ");
Serial.println( instrument );
}
}
bool debugLog() {
int tmp = millis();
if (tmp - delta > deltaDuration) {
delta = tmp;
return true;
}
return false;
}
void playNote() {
for (int n = 0; n < 12; n++) {
buttonState = digitalRead(buttonPin[n]);
if(buttonState == LOW){
currState[n] = 1;
} else {
currState[n] = 0;
};
if (currState[n] != prevState[n] ) {
switch (instrument) {
case 1: {
switch (n) {
case 0:
AudioOutI2S.play(waveFile1);
break;
case 1:
AudioOutI2S.play(waveFile2);
break;
case 2:
AudioOutI2S.play(waveFile3);
break;
case 3:
AudioOutI2S.play(waveFile4);
break;
case 4:
AudioOutI2S.play(waveFile5);
break;
case 5:
AudioOutI2S.play(waveFile6);
break;
case 6:
AudioOutI2S.play(waveFile7);
break;
case 7:
AudioOutI2S.play(waveFile8);
break;
case 8:
AudioOutI2S.play(waveFile9);
break;
case 9:
AudioOutI2S.play(waveFile10);
break;
case 10:
AudioOutI2S.play(waveFile11);
break;
case 11:
AudioOutI2S.play(waveFile12);
break;
}
} break;
case 2: {
switch (n) {
case 0:
AudioOutI2S.play(waveFile13);
break;
case 1:
AudioOutI2S.play(waveFile14);
break;
case 2:
AudioOutI2S.play(waveFile15);
break;
case 3:
AudioOutI2S.play(waveFile16);
break;
case 4:
AudioOutI2S.play(waveFile17);
break;
case 5:
AudioOutI2S.play(waveFile18);
break;
case 6:
AudioOutI2S.play(waveFile19);
break;
case 7:
AudioOutI2S.play(waveFile20);
break;
case 8:
AudioOutI2S.play(waveFile21);
break;
case 9:
AudioOutI2S.play(waveFile22);
break;
case 10:
AudioOutI2S.play(waveFile23);
break;
case 11:
AudioOutI2S.play(waveFile24);
break;
}
} break;
case 3: {
switch (n) {
case 0:
AudioOutI2S.play(waveFile25);
break;
case 1:
AudioOutI2S.play(waveFile26);
break;
case 2:
AudioOutI2S.play(waveFile27);
break;
case 3:
AudioOutI2S.play(waveFile28);
break;
case 4:
AudioOutI2S.play(waveFile29);
break;
case 5:
AudioOutI2S.play(waveFile30);
break;
case 6:
AudioOutI2S.play(waveFile31);
break;
case 7:
AudioOutI2S.play(waveFile32);
break;
case 8:
AudioOutI2S.play(waveFile33);
break;
case 9:
AudioOutI2S.play(waveFile34);
break;
case 10:
AudioOutI2S.play(waveFile35);
break;
case 11:
AudioOutI2S.play(waveFile36);
break;
}
} break;
}
}
prevState[n] = currState[n];
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment