//Weise den Noten der ersten sechs Tonleitern ihre Frequenz zu #define c0 61162 #define cis0 57737 #define d0 54496 #define dis0 51414 #define e0 48544 #define f0 45809 #define fis0 43253 #define g0 40816 #define gis0 38521 #define a0 36364 #define b0 34317 #define h0 32390 #define c1 30581 #define cis1 28860 #define d1 27241 #define dis1 25714 #define e1 24272 #define f1 22910 #define fis1 21622 #define g1 20408 #define gis1 19264 #define a1 18182 #define b1 17161 #define h1 16197 #define c3 7645 #define cis3 7215 #define d3 6810 #define dis3 6428 #define e3 6067 #define f3 5726 #define fis3 5405 #define g3 5101 #define gis3 4815 #define a3 4544 #define b3 4289 #define h3 4048 #define c4 3822 #define cis4 3608 #define d4 3405 #define dis4 3214 #define e4 3033 #define f4 2863 #define fis4 2702 #define g4 2551 #define gis4 2407 #define a4 2272 #define b4 2145 #define h4 2024 #define c5 1911 #define cis5 1804 #define d5 1703 #define dis5 1607 #define e5 1517 #define f5 1432 #define fis5 1351 #define g5 1275 #define gis5 1204 #define a5 1136 #define b5 1072 #define h5 1012 #define c6 956 #define cis6 902 #define d6 851 #define dis6 803 #define e6 758 #define f6 715 #define fis6 676 #define g6 638 #define gis6 602 #define a6 568 #define b6 536 #define h6 506 int StepFloppy1 = 2; int DirFloppy1 = 3; int StepFloppy2 = 4; int DirFloppy2 = 5; int Check = 1; unsigned long volle = 2000; unsigned long viertel = (volle / 4); unsigned long halbe = (volle / 2); unsigned long achtel = (volle / 8); unsigned long TempZeit = 0; unsigned long PeriodeZeit = 0; void setup() { pinMode(StepFloppy1, OUTPUT); pinMode(DirFloppy1, OUTPUT); pinMode(StepFloppy2, OUTPUT); pinMode(DirFloppy2, OUTPUT); digitalWrite(StepFloppy1, LOW); digitalWrite(DirFloppy1, HIGH); // High is raus, LOW ist rein pinMode(StepFloppy2, LOW); pinMode(DirFloppy2, HIGH); } void changeDir(int Floppy) { if(digitalRead(DirFloppy1) == LOW) digitalWrite(DirFloppy1, HIGH); else digitalWrite(DirFloppy1, LOW); } void spieleTon1(unsigned long Dauer, unsigned long Periode, unsigned long Pause) { TempZeit = micros(); PeriodeZeit = micros(); while(1) { if((micros()-PeriodeZeit) > Periode) // Bewege den Schrittmotor einmal, wenn die Zeit seit dem letzten Schritt größer als die Periodendauer des Tons ist { digitalWrite(StepFloppy1, HIGH); // Der Schrittmotor macht einen Schritt, wenn der StepPin von HIGH auf LOW geht digitalWrite(StepFloppy1, LOW); PeriodeZeit = micros(); } if((micros() - TempZeit) > (Dauer*1000)) // Sobald soviel Zeit vergangen ist wie der Funktion als Variable "Dauer" übergeben wurde (Dauer * 1000, da Dauer in Millisekunden angegeben wird und micros() Mikrosekunden zurückgibt) höre auf Schritte zu machen und warte { // eventuelle Pause ab TempZeit = micros(); while(1) { if((micros() - TempZeit) > Pause) { changeDir(DirFloppy1); return; } } } } } void loop() { if(Check == 1) { spieleTon1(viertel, g3, 1); spieleTon1(viertel, e3, 1); spieleTon1(halbe, e3, 1); spieleTon1(viertel, f3, 1); spieleTon1(viertel, d3, 1); spieleTon1(halbe, d3, 1); // Problemstelle, hier stößt der Motor zum ersten mal ans Gehäuse spieleTon1(viertel, c3, 1); spieleTon1(viertel, d3, 1); spieleTon1(viertel, e3, 1); spieleTon1(viertel, f3, 1); spieleTon1(viertel, g3, 1); spieleTon1(viertel, g3, 1); spieleTon1(halbe, g3, 1); spieleTon1(viertel, g3, 1); spieleTon1(viertel, e3, 1); spieleTon1(halbe, e3, 1); spieleTon1(viertel, f3, 1); spieleTon1(viertel, d3, 1); spieleTon1(halbe, d3, 1); spieleTon1(viertel, c3, 1); spieleTon1(viertel, e3, 1); spieleTon1(viertel, g3, 1); spieleTon1(viertel, g3, 1); spieleTon1(volle, c3, 1); spieleTon1(viertel, d3, 1); spieleTon1(viertel, d3, 1); spieleTon1(viertel, d3, 1); spieleTon1(viertel, d3, 1); spieleTon1(viertel, d3, 1); spieleTon1(viertel, e3, 1); spieleTon1(halbe, f3, 1); spieleTon1(viertel, e3, 1); spieleTon1(viertel, e3, 1); spieleTon1(viertel, e3, 1); spieleTon1(viertel, e3, 1); spieleTon1(viertel, e3, 1); spieleTon1(viertel, f3, 1); spieleTon1(halbe, g3, 1); spieleTon1(viertel, g3, 1); spieleTon1(viertel, e3, 1); spieleTon1(halbe, e3, 1); spieleTon1(viertel, f3, 1); spieleTon1(viertel, d3, 1); spieleTon1(halbe, d3, 1); spieleTon1(viertel, c3, 1); spieleTon1(viertel, e3, 1); spieleTon1(viertel, g3, 1); spieleTon1(viertel, g3, 1); spieleTon1(volle, c3, 1); //In Ausgansposition bringen: delay(3000); digitalWrite(DirFloppy1,LOW); spieleTon1(halbe, 5000, 1); } Check = 0; }