09d. Tone Synthesis
Today we are not building a Theremin but we are going to make a lot of annoying noise with our piezo speaker.
//Note-to-Frequency mapping
#define NOTE_C4 262
#define NOTE_CS4 277
#define NOTE_D4 294
#define NOTE_DS4 311
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_FS4 370
#define NOTE_G4 392
#define NOTE_GS4 415
#define NOTE_A4 440
#define NOTE_AS4 466
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_CS5 554
#define NOTE_D5 587
#define NOTE_DS5 622
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_FS5 740
#define NOTE_G5 784
#define NOTE_GS5 831
#define NOTE_A5 880
#define NOTE_AS5 932
#define NOTE_B5 988
#define NOTE_C6 1047
#define NOTE_CS6 1109
#define NOTE_D6 1175
#define NOTE_DS6 1245
#define NOTE_E6 1319
#define NOTE_F6 1397
#define NOTE_FS6 1480
#define NOTE_G6 1568
#define NOTE_GS6 1661
#define NOTE_A6 1760
#define NOTE_AS6 1865
#define NOTE_B6 1976
#define NOTE_C7 2093
#define NOTE_CS7 2217
#define NOTE_D7 2349
#define NOTE_DS7 2489
#define NOTE_E7 2637
#define NOTE_F7 2794
#define NOTE_FS7 2960
#define NOTE_G7 3136
#define NOTE_GS7 3322
#define NOTE_A7 3520
#define NOTE_AS7 3729
#define NOTE_B7 3951
int speakerPin = 9;
int frequency = 261;
int duration = 1000;
void setup()
{
pinMode(speakerPin, OUTPUT);
}
void loop()
{
tone(speakerPin, frequency);
delay(duration);
noTone(speakerPin);
delay(duration);
}
With variable frequency:
int speakerPin = 9;
int frequency = 261;
int duration = 10;
void setup()
{
pinMode(speakerPin, OUTPUT);
}
void loop()
{
for(int i = 100; i<1000; i++)
{
tone(speakerPin, i);
delay(duration);
noTone(speakerPin);
delay(duration);
}
}
Now let’s make our first electronic instrument:
int speakerPin = 9;
int sensorPin = A0;
int frequency = 261;
int duration = 10;
void setup()
{
pinMode(speakerPin, OUTPUT);
pinMode(sensorPin, INPUT);
Serial.begin(9600);
}
void loop()
{
//Serial.println(sensorValue, DEC);
int sensorValue = analogRead(sensorPin);
int value = map(sensorValue, 0, 1024, 100, 5000);
tone(speakerPin, value);
delay(duration);
noTone(speakerPin);
delay(duration);
}
Ok that’s getting very annoying let’s use a pushbutton to activate the sound.
int buttonPin = 12;
int speakerPin = 9;
int sensorPin = A0;
int frequency = 261;
int duration = 10;
void setup()
{
pinMode(speakerPin, OUTPUT);
pinMode(buttonPin, INPUT);
pinMode(sensorPin, INPUT);
Serial.begin(9600);
}
void loop()
{
int buttonState = digitalRead(buttonPin);
Serial.println(buttonState, DEC);
if(buttonState)
{
int sensorValue = analogRead(sensorPin);
int value = map(sensorValue, 0, 1024, 100, 5000);
tone(speakerPin, value);
delay(duration);
noTone(speakerPin);
delay(duration);
}
}
Now try the soft pot. And try the flex sensor, pressure sensor and the light sensor (you’ll need a pull down 10K resistor for these, see CIRC-13 on the booklet).