/* Play "He's A Pirate" / "Pirates of the Caribbean" Theme Song
* By Xitang Zhao 2016.06.27
* Youtube in Action: https://youtu.be/sjPAj1lXgtk
* or TikTok in Action: https://www.tiktok.com/@tipstorylearn/video/6943019804261502213
*
* INSTRUCTION: Hook up Pin 10 to the positive side of a buzzer or a microphone, hook up
* any resistor to the negative side of a buzzer (to limit current & volume & to protect the pin),
* and then connect the other end of the resistor to ground pin. Upload the sketch and enjoy!
*
* Don't have an Arduino right now? No worry. You can test it vitually on my TinkerCAD circuit:
* https://www.tinkercad.com/things/f9QN4skaguI-play-pirates-of-the-caribbean-theme-song-on-buzzer
*
* To learn the science of buzzer, Arduino tone library, and a step by step walkthrough of how I made this
* Visit my learning note on TipStory: https://www.tipstory.org/learning/h2lUMccm5MeuSds
*
* Last updated: 2021.03.25
* ---------------------
* Credits:
*
* Music notes of the song obtained from Easy Music (Great website)
* Link: http://easymusic.altervista.org/recorder-hes-a-pirate-pirates-of-caribbean-sheet-music-guitar-chords/
*
* Musicnotes's "How to Read Sheet Music" Guide
* Link: http://www.musicnotes.com/blog/2014/04/11/how-to-read-sheet-music/
*
* Code inspired by Chapter 5 of Jeremy Blum's book "Exploring Arduino"
* Link: http://www.exploringarduino.com/content/ch5/
*
* Music notes' frequencies obtained from arduino website and Tone Library
* Link: https://www.arduino.cc/en/Tutorial/toneMelody
* Link: https://github.com/bhagman/Tone
*
*/
// Define pin 10 for buzzer, you can use any other digital pins (Pin 0-13)
const int buzzer = 10;
// Change to 0.5 for a slower version of the song, 1.25 for a faster version
const float songSpeed = 1.0;
// Defining frequency of each music note
#define NOTE_C4 262
#define NOTE_D4 294
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_G4 392
#define NOTE_A4 440
#define NOTE_B4 494
#define NOTE_C5 523
#define doubleNote 250 // double croche
#define quarterNote 500// croche
#define dottedEighthNote 750 // croche pointée
#define quarterNoteAndDouble 1250 // noire et double croche
#define halfNote 1000 // noire
#define dottedHalfNote 1500 // noire pointée
// Music notes of the song, 0 is a rest/pulse
int notes[] = {
NOTE_C4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_F4,
NOTE_C4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_A4, NOTE_B4, NOTE_C5,
NOTE_C4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_F4,
NOTE_F4, NOTE_C5, NOTE_B4, NOTE_F4, NOTE_C5, NOTE_B4, NOTE_E4, NOTE_E4, NOTE_F4, NOTE_F4
};
// Durations (in ms) of each music note of the song
// Quarter Note is 250 ms when songSpeed = 1.0
int durations[] = {
doubleNote, doubleNote, doubleNote, halfNote, dottedEighthNote, quarterNoteAndDouble,
doubleNote, doubleNote, doubleNote, halfNote, quarterNote, doubleNote, quarterNote, dottedEighthNote,
doubleNote, doubleNote, doubleNote, halfNote, dottedEighthNote, quarterNoteAndDouble,
doubleNote, doubleNote, doubleNote, doubleNote, doubleNote, doubleNote, quarterNote, doubleNote, doubleNote, dottedHalfNote
};
void setup()
{
const int totalNotes = sizeof(notes) / sizeof(int);
// Loop through each note
for (int i = 0; i < totalNotes; i++)
{
const int currentNote = notes[i];
float wait = durations[i] / songSpeed;
// Play tone if currentNote is not 0 frequency, otherwise pause (noTone)
if (currentNote != 0)
{
tone(buzzer, notes[i], wait); // tone(pin, frequency, duration)
}
else
{
noTone(buzzer);
}
// delay is used to wait for tone to finish playing before moving to next loop
delay(wait);
}
}
void loop()
{
// Nothing in loop. Music only plays once.
// You can click reset on Arduino to replay the song.
}