// What digital pin is the speaker on?
// (The other speaker wire should connect to Gnd.)
int SPEAKER = 8;
// which analog pin is the light sensor on?
int LIGHTSENSOR = 0;
// Typical photocell values for daytime
// with window and 1k resistor:
// min 15, max 100.
#define MIN_SIGNAL 15 /* 100 /
#define MAX_SIGNAL 100 / 1024 */
// What frequencies should we allow (in Hertz)?
// Typical human hearing is 20 Hz to 20,000 Hz,
// but our piezo buzzers can't reproduce such a wide range.
// 100 to 10k or so is usually okay.
#define MIN_FREQ 100
#define MAX_FREQ 8000
// How many samples should we read from the sensor each time?
// The sensor is noisy, so there will be a lot of spurious readings.
#define NUM_SAMPLES 15
// To monitor the output from the sensor (so you can calibrate MAX_SIGNAL
// and MIN_SIGNAL), uncomment SERIAL_DEBUG:
//#define SERIAL_DEBUG 1
void setup()
{
pinMode(SPEAKER, OUTPUT);
#ifdef SERIAL_DEBUG
Serial.begin(9600);
#endif
}
void loop()
{
// Set the frequency according to the light value read off analog pin 0.
// Average 5 reads
int lightsensor = 0;
for (int i=1; i < NUM_SAMPLES; ++i)
lightsensor += analogRead(LIGHTSENSOR);
lightsensor /= NUM_SAMPLES;
unsigned int freq = map(lightsensor,
MIN_SIGNAL, MAX_SIGNAL,
MIN_FREQ, MAX_FREQ);
tone(SPEAKER, freq);
#ifdef SERIAL_DEBUG
Serial.print("Read ");
Serial.print(lightsensor);
Serial.print(" -> ");
Serial.println(freq);
delay(500);
#endif
}
The theremin code
/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
Most Arduinos have an on-board LED you can control. On the Uno and
Leonardo, it is attached to digital pin 13. If you're unsure what
pin the on-board LED is connected to on your Arduino model, check
the documentation at http://www.arduino.cc
This example code is in the public domain.
modified 8 May 2014
by Scott Fitzgerald
*/
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
LED blink code