Instantly share code, notes, and snippets.

# mikeputnam/happybirthdayemitter.pde Created May 28, 2012

happybirthdayemitter.pde
 /* Melody Plays a melody circuit: * 8-ohm speaker on digital pin 8 created 21 Jan 2010 by Tom Igoe http://arduino.cc/en/Tutorial/Tone */ #include "pitches.h" int inPin = 8; int ledPin = 13; // LED connected to digital pin 13 // notes in the melody: int melody[] = { // NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4}; NOTE_G6, NOTE_G6, NOTE_A6, NOTE_G6, NOTE_C7, NOTE_B6, 0, NOTE_G6, NOTE_G6, NOTE_A6, NOTE_G6, NOTE_D6, NOTE_C6, 0, NOTE_G6, NOTE_G6, NOTE_G7, NOTE_E6, NOTE_C6, NOTE_C6, NOTE_B6, NOTE_A6, 0, NOTE_F6, NOTE_F6, NOTE_E6, NOTE_C6, NOTE_D6, NOTE_C6}; // note durations: 4 = quarter note, 8 = eighth note, etc.: //int noteDurations[] = { 4, 8, 8, 4,4,4,4,4 }; int noteDurations[] = { 2, 4, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2}; void setup() { pinMode(ledPin, OUTPUT); digitalWrite(inPin, HIGH); digitalWrite(ledPin, HIGH); // set the LED on // iterate over the notes of the melody: for (int thisNote = 0; thisNote < 29; thisNote++) { // to calculate the note duration, take one second // divided by the note type. //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc. int noteDuration = 1000/noteDurations[thisNote]; tone(inPin, melody[thisNote],noteDuration); // to distinguish the notes, set a minimum time between them. // the note's duration + 30% seems to work well: //int pauseBetweenNotes = noteDuration * 1.30; int pauseBetweenNotes = noteDuration * 1.10; delay(pauseBetweenNotes); } digitalWrite(ledPin, LOW); // set the LED off } void loop() { // no need to repeat the melody. }