1 | //Weise den Noten der ersten sechs Tonleitern ihre Frequenz zu
|
2 | #define c0 61162
|
3 | #define cis0 57737
|
4 | #define d0 54496
|
5 | #define dis0 51414
|
6 | #define e0 48544
|
7 | #define f0 45809
|
8 | #define fis0 43253
|
9 | #define g0 40816
|
10 | #define gis0 38521
|
11 | #define a0 36364
|
12 | #define b0 34317
|
13 | #define h0 32390
|
14 |
|
15 | #define c1 30581
|
16 | #define cis1 28860
|
17 | #define d1 27241
|
18 | #define dis1 25714
|
19 | #define e1 24272
|
20 | #define f1 22910
|
21 | #define fis1 21622
|
22 | #define g1 20408
|
23 | #define gis1 19264
|
24 | #define a1 18182
|
25 | #define b1 17161
|
26 | #define h1 16197
|
27 |
|
28 | #define c3 7645
|
29 | #define cis3 7215
|
30 | #define d3 6810
|
31 | #define dis3 6428
|
32 | #define e3 6067
|
33 | #define f3 5726
|
34 | #define fis3 5405
|
35 | #define g3 5101
|
36 | #define gis3 4815
|
37 | #define a3 4544
|
38 | #define b3 4289
|
39 | #define h3 4048
|
40 |
|
41 | #define c4 3822
|
42 | #define cis4 3608
|
43 | #define d4 3405
|
44 | #define dis4 3214
|
45 | #define e4 3033
|
46 | #define f4 2863
|
47 | #define fis4 2702
|
48 | #define g4 2551
|
49 | #define gis4 2407
|
50 | #define a4 2272
|
51 | #define b4 2145
|
52 | #define h4 2024
|
53 |
|
54 | #define c5 1911
|
55 | #define cis5 1804
|
56 | #define d5 1703
|
57 | #define dis5 1607
|
58 | #define e5 1517
|
59 | #define f5 1432
|
60 | #define fis5 1351
|
61 | #define g5 1275
|
62 | #define gis5 1204
|
63 | #define a5 1136
|
64 | #define b5 1072
|
65 | #define h5 1012
|
66 |
|
67 | #define c6 956
|
68 | #define cis6 902
|
69 | #define d6 851
|
70 | #define dis6 803
|
71 | #define e6 758
|
72 | #define f6 715
|
73 | #define fis6 676
|
74 | #define g6 638
|
75 | #define gis6 602
|
76 | #define a6 568
|
77 | #define b6 536
|
78 | #define h6 506
|
79 |
|
80 | int StepFloppy1 = 2;
|
81 | int DirFloppy1 = 3;
|
82 | int StepFloppy2 = 4;
|
83 | int DirFloppy2 = 5;
|
84 | int Check = 1;
|
85 |
|
86 | unsigned long volle = 2000;
|
87 | unsigned long viertel = (volle / 4);
|
88 | unsigned long halbe = (volle / 2);
|
89 | unsigned long achtel = (volle / 8);
|
90 | unsigned long TempZeit = 0;
|
91 | unsigned long PeriodeZeit = 0;
|
92 |
|
93 | void setup() {
|
94 | pinMode(StepFloppy1, OUTPUT);
|
95 | pinMode(DirFloppy1, OUTPUT);
|
96 | pinMode(StepFloppy2, OUTPUT);
|
97 | pinMode(DirFloppy2, OUTPUT);
|
98 |
|
99 | digitalWrite(StepFloppy1, LOW);
|
100 | digitalWrite(DirFloppy1, HIGH); // High is raus, LOW ist rein
|
101 | pinMode(StepFloppy2, LOW);
|
102 | pinMode(DirFloppy2, HIGH);
|
103 | }
|
104 |
|
105 | void changeDir(int Floppy)
|
106 | {
|
107 | if(digitalRead(DirFloppy1) == LOW)
|
108 | digitalWrite(DirFloppy1, HIGH);
|
109 | else
|
110 | digitalWrite(DirFloppy1, LOW);
|
111 | }
|
112 |
|
113 | void spieleTon1(unsigned long Dauer, unsigned long Periode, unsigned long Pause)
|
114 | {
|
115 | TempZeit = micros();
|
116 | PeriodeZeit = micros();
|
117 | while(1)
|
118 | {
|
119 | if((micros()-PeriodeZeit) > Periode) // Bewege den Schrittmotor einmal, wenn die Zeit seit dem letzten Schritt größer als die Periodendauer des Tons ist
|
120 | {
|
121 | digitalWrite(StepFloppy1, HIGH); // Der Schrittmotor macht einen Schritt, wenn der StepPin von HIGH auf LOW geht
|
122 | digitalWrite(StepFloppy1, LOW);
|
123 | PeriodeZeit = micros();
|
124 | }
|
125 |
|
126 | 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
|
127 | { // eventuelle Pause ab
|
128 | TempZeit = micros();
|
129 | while(1)
|
130 | {
|
131 | if((micros() - TempZeit) > Pause)
|
132 | {
|
133 | changeDir(DirFloppy1);
|
134 | return;
|
135 | }
|
136 | }
|
137 | }
|
138 | }
|
139 | }
|
140 |
|
141 | void loop()
|
142 | {
|
143 | if(Check == 1)
|
144 | {
|
145 | spieleTon1(viertel, g3, 1);
|
146 | spieleTon1(viertel, e3, 1);
|
147 | spieleTon1(halbe, e3, 1);
|
148 | spieleTon1(viertel, f3, 1);
|
149 | spieleTon1(viertel, d3, 1);
|
150 | spieleTon1(halbe, d3, 1); // Problemstelle, hier stößt der Motor zum ersten mal ans Gehäuse
|
151 | spieleTon1(viertel, c3, 1);
|
152 | spieleTon1(viertel, d3, 1);
|
153 | spieleTon1(viertel, e3, 1);
|
154 | spieleTon1(viertel, f3, 1);
|
155 | spieleTon1(viertel, g3, 1);
|
156 | spieleTon1(viertel, g3, 1);
|
157 | spieleTon1(halbe, g3, 1);
|
158 |
|
159 | spieleTon1(viertel, g3, 1);
|
160 | spieleTon1(viertel, e3, 1);
|
161 | spieleTon1(halbe, e3, 1);
|
162 | spieleTon1(viertel, f3, 1);
|
163 | spieleTon1(viertel, d3, 1);
|
164 | spieleTon1(halbe, d3, 1);
|
165 | spieleTon1(viertel, c3, 1);
|
166 | spieleTon1(viertel, e3, 1);
|
167 | spieleTon1(viertel, g3, 1);
|
168 | spieleTon1(viertel, g3, 1);
|
169 | spieleTon1(volle, c3, 1);
|
170 |
|
171 | spieleTon1(viertel, d3, 1);
|
172 | spieleTon1(viertel, d3, 1);
|
173 | spieleTon1(viertel, d3, 1);
|
174 | spieleTon1(viertel, d3, 1);
|
175 | spieleTon1(viertel, d3, 1);
|
176 | spieleTon1(viertel, e3, 1);
|
177 | spieleTon1(halbe, f3, 1);
|
178 | spieleTon1(viertel, e3, 1);
|
179 | spieleTon1(viertel, e3, 1);
|
180 | spieleTon1(viertel, e3, 1);
|
181 | spieleTon1(viertel, e3, 1);
|
182 | spieleTon1(viertel, e3, 1);
|
183 | spieleTon1(viertel, f3, 1);
|
184 | spieleTon1(halbe, g3, 1);
|
185 |
|
186 | spieleTon1(viertel, g3, 1);
|
187 | spieleTon1(viertel, e3, 1);
|
188 | spieleTon1(halbe, e3, 1);
|
189 | spieleTon1(viertel, f3, 1);
|
190 | spieleTon1(viertel, d3, 1);
|
191 | spieleTon1(halbe, d3, 1);
|
192 | spieleTon1(viertel, c3, 1);
|
193 | spieleTon1(viertel, e3, 1);
|
194 | spieleTon1(viertel, g3, 1);
|
195 | spieleTon1(viertel, g3, 1);
|
196 | spieleTon1(volle, c3, 1);
|
197 |
|
198 | //In Ausgansposition bringen:
|
199 | delay(3000);
|
200 | digitalWrite(DirFloppy1,LOW);
|
201 | spieleTon1(halbe, 5000, 1);
|
202 |
|
203 | }
|
204 | Check = 0;
|
205 | }
|