// --------------------------------
// Hoe werken met GELUID:
// --------------------------------
// in de noten Array zitten 90 frquenties, deze komen overeen met
// 90 noten. Wil je de eerste noot laten horen dan gebruik je volgende code:
// tone(PINNUMMER, noten[NOOTNUMMER], DUUR);
// PINNUMMER = 13
// noten[2] = bijvoorbeeld 33
// DUUR = 250 milliseconden
// tone (13 , noten[2] , 250);
// --------------------------------
// --------------------------------
// Hoe werken met AFSTAND:
// --------------------------------
// De HC-SR04 Ultrasonic Distance Sensor heeft 2 sensor stuurpinnen
// TRIG : deze zorgt ervoor dat de Sensor een geluidsignaal uitstoot
// Dit signaal veroorzaken we door deze pin kortstondig (10 micro!seconden) hoog te maken
// ECHO : deze pin wordt zelf hoog wanneer de originele geluidsgolf
// terug (via weerkaatsing) de sensor bereikt.
// Het tijdsverschil bepaalt de gemeten afstand.
// de PIN_TRIG 12 is dus een OUTPUT
// de PIN_ECHO 11 is dus een INPUT
// Voorbeeld:
//
// digitalWrite(PIN_TRIG, HIGH);
// delayMicroseconds(10);
// digitalWrite(PIN_TRIG, LOW);
// // Het reultaat:
// int afstandInCM = pulseIn(PIN_ECHO, HIGH)/58;
// --------------------------------
#define PIN_TRIG 12
#define PIN_ECHO 11
#define SPEAKER_PIN 13
int noten[] = {
0, 31, 33, 35, 37, 39, 41, 44, 46, 49,
52, 55, 58, 62, 65, 69, 73, 78, 82, 87,
93, 98, 104, 110, 117, 123, 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, 1047, 1109, 1175, 1245, 1319, 1397, 1480, 1568,
1661, 1760, 1865, 1976, 2093, 2217, 2349, 2489, 2637, 2794,
2960, 3136, 3322, 3520, 3729, 3951, 4186, 4435, 4699, 4978};
void setup() {
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
pinMode(SPEAKER_PIN, OUTPUT);
for (int i = 2; i <= 10 ; i++) {
pinMode(i, OUTPUT); // Zet alle pinnen op OUTPUT.
}
}
void loop() {
static int afstandCm = 0;
afstandCm = meetAfstand();
maakGeluid (afstandCm);
maakLedBar (afstandCm);
}
int meetAfstand() {
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10); // dit is zeer kort!
digitalWrite(PIN_TRIG, LOW);
return pulseIn(PIN_ECHO, HIGH) / 58;
}
void maakGeluid (int afstandCm) {
static int toonhoogte = 0;
toonhoogte = map (afstandCm, 2, 400, 90, 0);
tone(SPEAKER_PIN, noten[toonhoogte], 250);
}
void maakLedBar (int afstandCm) {
static int afstandsIndicator = 0;
afstandsIndicator = map (afstandCm, 400, 0, 1, 11);
for (int ledi = 2 ; ledi < 11 ; ledi++) {
if (ledi <= afstandsIndicator) {
digitalWrite(ledi, HIGH);
} else {
digitalWrite(ledi, LOW);
}
}
}