We started with this week’s assignment, wanting to reuse the
buzzer taken from our Value-Village find. We came across problems early on.
When trying to piece together two different codes, the variables were mixed up
and no sound seemed to be coming from the buzzer. It turned out that our resister
was too high and it fully resisted any source of power to the buzzer. After
some additional help, we adjusted the sketches to permit a button use. We
managed to connect that button sensor so, when pressed; it stopped the buzzer
from playing its melody. Our final outcome is seen below:
/* Buzzer
Button Melody
*/ Modified from the sketch found at
http://www.arduino.cc/en/Tutorial/Melody
int
speakerPin = 9;
int
val = 0; //Set the analog input to 0
int
length = 15; // the number of notes
char
notes[] = "ccggaagffeeddc "; // a space represents a rest
int
beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };
int
tempo = 300;
void
playTone(int tone, int duration) {
val = analogRead(0); // read the
value from the sensor
if (val < 100) {
for (long i = 0; i < duration *
1000L; i += tone * 2) {
digitalWrite(speakerPin,
HIGH);
delayMicroseconds(tone);
digitalWrite(speakerPin,
LOW);
delayMicroseconds(tone);}
} else {
}
}
void
playNote(char note, int duration) {
char names[] = { 'c', 'd', 'e', 'f',
'g', 'a', 'b', 'C' };
int tones[] = { 1915, 1700, 1519, 1432,
1275, 1136, 1014, 956 };
// play the tone corresponding to the
note name
for (int i = 0; i < 8; i++) {
if (names[i] == note) {
playTone(tones[i], duration);
}
}
}
void
setup() {
pinMode(speakerPin, OUTPUT);
}
void
loop() {
for (int i = 0; i < length; i++) {
if (notes[i] == ' ') {
delay(beats[i]
* tempo); // rest
} else {
playNote(notes[i],
beats[i] * tempo);
}
// pause between notes
delay(tempo / 2);
}
}
No comments:
Post a Comment