Hans.ino


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
}