Hallo an alle, ich bin neu hier, das ist mein erster Post im Forum, und mit Arduino bin ich auch recht neu.
Der untere Code spielt array "song1" ab, das funktioniert alles soweit gut.
Ich möchte das man per Button UP/Down oder mehrere Buttons, den nächsten Song aufrufen kann.
Dafür dachte ich mir das alles aus der loop in eine eigene Funktion zB.
void Abspielen() {}
eingefügt wird und in der loop steht dann nur sowas wie:
if(But1==LOW){Abspielen(song1);}
if(But2==LOW){Abspielen(song2);}
//...usw.
drin steht.
Ich wollte den Songname der Funktion übergeben aber das klappt aber absolut nicht, ausser Fehlermeldungen kommt nichts gescheites raus.
Ich kenne die c-Sprache leider noch nicht so gut
#define nC4 262
#define nCS4 277
#define nD4 294
#define nDS4 311
#define nE4 330
#define nF4 349
#define nFS4 370
#define nG4 392
#define nGS4 415
#define nA4 440
#define nAS4 466
#define nB4 494
#define nC5 523
#define nCS5 554
#define nD5 587
#define nDS5 622
#define nE5 659
#define nF5 698
#define nFS5 740
#define nG5 784
#define nGS5 831
#define nA5 880
#define nAS5 932
#define nB5 988
#define nC6 1047
#define nPP 0 //Pause
int16_t song1[]={//Array: Note, Dauer: 1=ganze Note, 2=halbe Note, 4=Viertelnote usw.
nC4,8, nD4,8, nE4,8, nF4,8, nG4,8, nA4,8, nB4,8, nC5,4, nPP,2
};
int16_t song2[]={
nC5,8, nD5,8, nE5,8, nF5,8, nG5,8, nA5,8, nB5,8, nC6,4, nPP,2
};
int buz=13; //Lautsprecher an diesem Pin angeschlossen
int spd=1200; //Dauer einer ganzen Note in Millisekunden
int allNote=0, dur=0, i=0;
void setup()
{pinMode(buz,OUTPUT); allNote=sizeof(song1)/2;
Serial.begin(9600);
Serial.print("Melodielänge: ");
Serial.print(allNote/2); Serial.println(" Noten\n-----------------------------------------------------");
delay(1000);
}
void loop()
{for(i=0; i<allNote; i=i+2)
{dur=spd/song1[i+1]; //Notenlänge in Millisec berechnen
char buf[50]; sprintf(buf,"Note: %2d | Freq.:%4d Hz | Länge: %2d",i/2, song1[i], song1[i+1]);
Serial.println(buf);
tone(buz,song1[i],dur);
delay(dur*1.33); //Note abspielen und warten vor naechster Note
}
Serial.println("-----------------------------------------------------");
}