Sketch Beat-Box
/* BEAT BOX
Tonerzeugende Box
Wird es dunkel vor dem Lichtsensor, wird eine Tonfolge erzeugt.
Beim Einschalten erklingt eine Startmelodie.
Lautsprecher 1 = 8 (-=GND)
Lautsprecher 2 = 9
Lichtsensor 1 = A0 (mit 10kOhm Wiederstand vor GND)
Lichtsensor 2 = A1(mit 10kOhm Wiederstand vor GND)
Poti 1 = A2: Tonlänge bestimmen
Poti 2 = A3: threshold (Helligkeit) bestimmen
Sketch von
Mich Heimann, Karin Hodel 2015
*/
#include <Tone.h>
Tone tone1; //Lautsprecher 1 ansteuern
Tone tone2; //Lautsprecher 2 ansteuern
Tone tones[] = { tone1, tone2 }; //
int tonePins[] = { 8, 9 }; //Array (Liste) mit Lautsprechern
int sensorPins[] = { 0, 1 };
int range[2][2] = { { NOTE_C2, NOTE_E2 }, { NOTE_F3, NOTE_C4 } }; //Noten definieren
void setup() {
for( int i = 0; i < 2; i++ ) {
tones[i].begin( tonePins[i] );
}
//Startmelodie
tones[0].play( NOTE_C5, 100 );
tones[1].play( NOTE_E5, 100 );
delay( 100 );
tones[0].play( NOTE_C6, 100 );
tones[1].play( NOTE_E6, 100 );
delay( 100 );
tones[0].play( NOTE_C7, 100 );
tones[1].play( NOTE_E7, 100 );
delay( 100 );
}
void loop() {
int potiLength = analogRead( 2 ); //Potentiometer1 auf Pin 2
int notelength = map( potiLength, 0, 1023, 40, 300 ); //Wert vom Potentiometer in Notenlänge umrechnen, Takt einstellen
int potiThreshold = analogRead( 3 ); //Potentiometer2 auf Pin 3
int threshold = map( potiThreshold, 0, 1023, 0, 800 ); //Helligkeit einstellen, wenn Helligkeit unter threshold dann Ton
for( int i = 0; i < 2; i++ ) { //iterieren über beide Lautsprecher
int sensor = analogRead( i ); //Wert des aktuellen Lautsprechers lesen
if( sensor < threshold ) { //Testen ob abspielen (kleiner threshold)
tones[i].play( map(sensor, 450, threshold, range[i][0], range[i][1] ), notelength ); //Töne abspielen
}
}
delay(notelength); //Warten bis Ton fertig gespielt auf beiden Lautsprechern
}