Created
May 5, 2023 21:41
-
-
Save tmthfrg/cd42542c46f53da62dc8badc10a2ea1d to your computer and use it in GitHub Desktop.
Davido Piano Keys
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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