In deze les gaan we een theremin met infrarood afstandssensoren maken.
\pagebreak
\pagebreak
\pagebreak
volume
bibliotheekUpload de volgende code:
#include "Volume.h"
Volume vol; // Piezo in pin 5
void setup()
{
vol.begin();
}
void loop()
{
const int toon_hoogte = 440;
const int volume = 255;
vol.tone(toon_hoogte, volume);
vol.delay(10);
}
Doet de ‘Volume’ bibliotheek het niet, ga dan naar de les ‘Volume installeren’.
\pagebreak
Sluit een infrarood afstandssensor aan op A0.
\pagebreak
\pagebreak
Lees de infrarood afstandssensor.
Gebruik:
const int input_toon_hoogte = /* lees de waarde van A0 */;
const int toon_hoogte = input_toon_hoogte;
\pagebreak
#include "Volume.h"
Volume vol; // Piezo in pin 5
void setup()
{
pinMode(A0, INPUT);
vol.begin();
}
void loop()
{
const int input_toon_hoogte = analogRead(A0);
const int toon_hoogte = input_toon_hoogte;
const int volume = 255;
vol.tone(toon_hoogte, volume);
vol.delay(10);
}
\pagebreak
De toonhoogte klinkt nog niet mooi.
Dat komt omdat hogere tonen steeds verder van elkaar af gaan zitten.
Met pow
kunnen we een machtverheffing doen (wat dat ook is),
zodat we mooi door de tonen heen kunnen gaan.
Vervang:
const int toon_hoogte = input_toon_hoogte;
door:
const int toon_hoogte = 110.0 * pow(2.0, 0.002 * input_toon_hoogte);
\pagebreak
#include "Volume.h"
Volume vol; // Piezo in pin 5
void setup()
{
pinMode(A0, INPUT);
vol.begin();
}
void loop()
{
const int input_toon_hoogte = analogRead(A0);
const int toon_hoogte = 110.0 * pow(2.0, 0.002 * input_toon_hoogte);
const int volume = 255;
vol.tone(toon_hoogte, volume);
vol.delay(10);
}
\pagebreak
const int input_volume = /* lees de waarde van A1 */;
const int volume = 1.0 * pow(2.0, 0.0078125 * input_volume);