Project 6 Light Theremin blz 79. terug naar de inleiding
In dit project worden door handbewewegingen boven een LDR, dmv een piezo (buzzer) element, tonen geproduceert.
De tonen worden via de tone() functie naar de buzzer gestuurd
Aanpassingen harware
Pin 13 via 220 ohm en een led met gnd verbinden.
//In "ldrWaarde" komt de 10 bit waarde van de spanning over de 10K weerstand
int ldrWaarde;
// In "ldrLaag" en "ldrHoog" komen de min en max waarden die "ldrWaarde" kan aannemen.
// De weerstand is laag bij licht dan is de spanning op A0 hoog.
// De weerstand is hoog bij donker dan is de spanning op A0 laag.
//" ldrWaarde" kan maximaal tussen 0 en 1023 varrieren.
// Door het calibreren in setup pas je deze range aan.
int ldrLaag = 1023;
int ldrHoog = 0;
void setup() {
// Op pin 13 staat de in arduino ingebouwde LED aangesloten.
// Dit ledje blijft 5 seconde branden om aan te geven dat
// arduino bezig is met calibreren.
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
// De while lus gedurende 5 seconden doorlopen
// Het is de bedoeling dat je tijdens het calibreren wat met je hand boven de LDR wapper
while (millis() < 5000) {
// eerst de spannig over de 10k weerstand uitlezen
// en omzetten naar een 10 bit getal wat je in "ldrWaarde" stop
ldrWaarde = analogRead(A0);
// De minimale ldrWaarde calibreren
if (ldrWaarde > ldrHoog) {
ldrHoog = ldrWaarde;
}
// De maximale ldrWaarde calibreren
if (ldrWaarde < ldrLaag) {
ldrLaag = ldrWaarde;
}
}
// Klaar !! dus het ledje mag uit
digitalWrite(13, LOW);
// Het handenwapper resultaat in de seriele monitor bekijken.
Serial.begin(9600);
Serial.print(" ldrLaag:\t");
Serial.print(ldrLaag);
Serial.print(" ldrHoog\t");
Serial.print(ldrHoog);
}
void loop() {
ldrWaarde = analogRead(A0);
//De ldr waarden naar minimale en maximale toonhoogte mappen
int toon = map(ldrWaarde, ldrLaag, ldrHoog, 50, 4000);
// De toon, aangeboden aan pin 8, wordt 20 miliseconde gespeeld
// Pin 8 is een digitale outputpin die pulsjes met een bepaalde toonfrequentie krijgt aangeboden.
// Pin 8 hoef je niet als outputpin in setup te initieren
tone(8, toon, 20);
// 10 miliseconde wachten
delay(10);
}