/* Arduino Kurs FES Juli 2017 Programm 11b: Verbesserte Lichtorgel v2 */ // Tabelle der Frequenzen von Tönen über 4 Oktaven int pitches[36] = {131, 139, 147, 156, 165, 175, 185, 196, 208, 220, 233, 247, 262, 277, 294, 311, 330, 349, 370, 392, 415, 440, 466, 494, 523, 554, 587, 622, 659, 698, 740, 784, 831, 880, 932, 988}; int ldr_value; // eingelesener ADC-Wert vom LDR // Anschluss Pins int speaker_pin = 9; // Laustprecher an Pin 9 int button_pin = 12; // Taster an Pin 12 int ldr_pin = 0; // LDR and ADC-Pin 0 void setup() { pinMode(speaker_pin, OUTPUT); // Lautsprecher am Ausgang pinMode(button_pin, INPUT_PULLUP); // Taster am Eingang } void loop() { if (digitalRead(button_pin) == LOW) { // wenn die Taste gedrückt ist ... // LDR-Wert vom ADC holen ldr_value = analogRead(ldr_pin); ldr_value = ldr_value * 2; // LDR-Wert verdoppeln für weiteren Tonumfang // suche den nächsten passenden Ton aus der Pitch-Tabelle int i = 0; while ((pitches[i] < ldr_value) && (i < 35)) // solange die Pitch-Werte kleiner ... ++i; // ... sind als der LDR-Wert, weiter suchen // Ton ausgeben tone(speaker_pin, pitches[i]); // spiel den passenden Wert aus der Pitch-Tabelle delay(50); // warte einen Moment } else { noTone(speaker_pin); // ... sonst den Ton abstellen }; }