Components and supplies
Arduino UNO
Resistor 330 ohm
Resistor 10k ohm
Pushbutton switch 12mm
Buzzer
Project description
Code
Arduino Christmas Songs
arduino
1/* 2 Arduino Christmas Songs 3 4 Based on a project and code by Dipto Pratyaksa, updated on 31/3/13 5 6 Modified for Christmas by Joshi, on Dec 17th, 2017. 7*/ 8 9#include "pitches.h" 10 11#define melodyPin 9 12 13// Jingle Bells 14 15int melody[] = { 16 NOTE_E5, NOTE_E5, NOTE_E5, 17 NOTE_E5, NOTE_E5, NOTE_E5, 18 NOTE_E5, NOTE_G5, NOTE_C5, NOTE_D5, 19 NOTE_E5, 20 NOTE_F5, NOTE_F5, NOTE_F5, NOTE_F5, 21 NOTE_F5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, 22 NOTE_E5, NOTE_D5, NOTE_D5, NOTE_E5, 23 NOTE_D5, NOTE_G5 24}; 25 26int tempo[] = { 27 8, 8, 4, 28 8, 8, 4, 29 8, 8, 8, 8, 30 2, 31 8, 8, 8, 8, 32 8, 8, 8, 16, 16, 33 8, 8, 8, 8, 34 4, 4 35}; 36 37// We wish you a merry Christmas 38 39int wish_melody[] = { 40 NOTE_B3, 41 NOTE_F4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_E4, 42 NOTE_D4, NOTE_D4, NOTE_D4, 43 NOTE_G4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_F4, 44 NOTE_E4, NOTE_E4, NOTE_E4, 45 NOTE_A4, NOTE_A4, NOTE_B4, NOTE_A4, NOTE_G4, 46 NOTE_F4, NOTE_D4, NOTE_B3, NOTE_B3, 47 NOTE_D4, NOTE_G4, NOTE_E4, 48 NOTE_F4 49}; 50 51int wish_tempo[] = { 52 4, 53 4, 8, 8, 8, 8, 54 4, 4, 4, 55 4, 8, 8, 8, 8, 56 4, 4, 4, 57 4, 8, 8, 8, 8, 58 4, 4, 8, 8, 59 4, 4, 4, 60 2 61}; 62 63// Santa Claus is coming to town 64 65int santa_melody[] = { 66 NOTE_G4, 67 NOTE_E4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4, 68 NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, NOTE_C5, 69 NOTE_E4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4, 70 NOTE_A4, NOTE_G4, NOTE_F4, NOTE_F4, 71 NOTE_E4, NOTE_G4, NOTE_C4, NOTE_E4, 72 NOTE_D4, NOTE_F4, NOTE_B3, 73 NOTE_C4 74}; 75 76int santa_tempo[] = { 77 8, 78 8, 8, 4, 4, 4, 79 8, 8, 4, 4, 4, 80 8, 8, 4, 4, 4, 81 8, 8, 4, 2, 82 4, 4, 4, 4, 83 4, 2, 4, 84 1 85}; 86 87int switchOne = 0; 88int switchTwo = 0; 89int switchThree = 0; 90 91void setup(void) { 92 pinMode(9, OUTPUT); // Buzzer 93 pinMode(13, OUTPUT); // Led indicator when singing a note 94 pinMode(2, INPUT); 95 pinMode(3, INPUT); 96 pinMode(4, INPUT); 97} 98 99void loop() { 100 switchOne = digitalRead(2); 101 switchTwo = digitalRead(3); 102 switchThree = digitalRead(4); 103 if (switchOne == HIGH) { 104 sing(1); 105 } else if (switchTwo == HIGH) { 106 sing(2); 107 } else if (switchThree == HIGH) { 108 sing(3); 109 } 110} 111 112int song = 0; 113 114void sing(int s) { 115 // iterate over the notes of the melody: 116 song = s; 117 if (song == 3) { 118 Serial.println(" 'We wish you a Merry Christmas'"); 119 int size = sizeof(wish_melody) / sizeof(int); 120 for (int thisNote = 0; thisNote < size; thisNote++) { 121 122 // to calculate the note duration, take one second 123 // divided by the note type. 124 //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc. 125 int noteDuration = 1000 / wish_tempo[thisNote]; 126 127 buzz(melodyPin, wish_melody[thisNote], noteDuration); 128 129 // to distinguish the notes, set a minimum time between them. 130 // the note's duration + 30% seems to work well: 131 int pauseBetweenNotes = noteDuration * 1.30; 132 delay(pauseBetweenNotes); 133 134 // stop the tone playing: 135 buzz(melodyPin, 0, noteDuration); 136 137 } 138 } else if (song == 2) { 139 Serial.println(" 'Santa Claus is coming to town'"); 140 int size = sizeof(santa_melody) / sizeof(int); 141 for (int thisNote = 0; thisNote < size; thisNote++) { 142 143 // to calculate the note duration, take one second 144 // divided by the note type. 145 //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc. 146 int noteDuration = 900 / santa_tempo[thisNote]; 147 148 buzz(melodyPin, santa_melody[thisNote], noteDuration); 149 150 // to distinguish the notes, set a minimum time between them. 151 // the note's duration + 30% seems to work well: 152 int pauseBetweenNotes = noteDuration * 1.30; 153 delay(pauseBetweenNotes); 154 155 // stop the tone playing: 156 buzz(melodyPin, 0, noteDuration); 157 158 } 159 } else { 160 161 Serial.println(" 'Jingle Bells'"); 162 int size = sizeof(melody) / sizeof(int); 163 for (int thisNote = 0; thisNote < size; thisNote++) { 164 165 // to calculate the note duration, take one second 166 // divided by the note type. 167 //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc. 168 int noteDuration = 1000 / tempo[thisNote]; 169 170 buzz(melodyPin, melody[thisNote], noteDuration); 171 172 // to distinguish the notes, set a minimum time between them. 173 // the note's duration + 30% seems to work well: 174 int pauseBetweenNotes = noteDuration * 1.30; 175 delay(pauseBetweenNotes); 176 177 // stop the tone playing: 178 buzz(melodyPin, 0, noteDuration); 179 180 } 181 } 182} 183 184void buzz(int targetPin, long frequency, long length) { 185 digitalWrite(13, HIGH); 186 long delayValue = 1000000 / frequency / 2; // calculate the delay value between transitions 187 //// 1 second's worth of microseconds, divided by the frequency, then split in half since 188 //// there are two phases to each cycle 189 long numCycles = frequency * length / 1000; // calculate the number of cycles for proper timing 190 //// multiply frequency, which is really cycles per second, by the number of seconds to 191 //// get the total number of cycles to produce 192 for (long i = 0; i < numCycles; i++) { // for the calculated length of time... 193 digitalWrite(targetPin, HIGH); // write the buzzer pin high to push out the diaphram 194 delayMicroseconds(delayValue); // wait for the calculated delay value 195 digitalWrite(targetPin, LOW); // write the buzzer pin low to pull back the diaphram 196 delayMicroseconds(delayValue); // wait again or the calculated delay value 197 } 198 digitalWrite(13, LOW); 199 200}
pitches.h
arduino
1/************************************************* 2 * Public Constants 3 *************************************************/ 4 5#define NOTE_B0 31 6#define NOTE_C1 33 7#define NOTE_CS1 35 8#define NOTE_D1 37 9#define NOTE_DS1 39 10#define NOTE_E1 41 11#define NOTE_F1 44 12#define NOTE_FS1 46 13#define NOTE_G1 49 14#define NOTE_GS1 52 15#define NOTE_A1 55 16#define NOTE_AS1 58 17#define NOTE_B1 62 18#define NOTE_C2 65 19#define NOTE_CS2 69 20#define NOTE_D2 73 21#define NOTE_DS2 78 22#define NOTE_E2 82 23#define NOTE_F2 87 24#define NOTE_FS2 93 25#define NOTE_G2 98 26#define NOTE_GS2 104 27#define NOTE_A2 110 28#define NOTE_AS2 117 29#define NOTE_B2 123 30#define NOTE_C3 131 31#define NOTE_CS3 139 32#define NOTE_D3 147 33#define NOTE_DS3 156 34#define NOTE_E3 165 35#define NOTE_F3 175 36#define NOTE_FS3 185 37#define NOTE_G3 196 38#define NOTE_GS3 208 39#define NOTE_A3 220 40#define NOTE_AS3 233 41#define NOTE_B3 247 42#define NOTE_C4 262 43#define NOTE_CS4 277 44#define NOTE_D4 294 45#define NOTE_DS4 311 46#define NOTE_E4 330 47#define NOTE_F4 349 48#define NOTE_FS4 370 49#define NOTE_G4 392 50#define NOTE_GS4 415 51#define NOTE_A4 440 52#define NOTE_AS4 466 53#define NOTE_B4 494 54#define NOTE_C5 523 55#define NOTE_CS5 554 56#define NOTE_D5 587 57#define NOTE_DS5 622 58#define NOTE_E5 659 59#define NOTE_F5 698 60#define NOTE_FS5 740 61#define NOTE_G5 784 62#define NOTE_GS5 831 63#define NOTE_A5 880 64#define NOTE_AS5 932 65#define NOTE_B5 988 66#define NOTE_C6 1047 67#define NOTE_CS6 1109 68#define NOTE_D6 1175 69#define NOTE_DS6 1245 70#define NOTE_E6 1319 71#define NOTE_F6 1397 72#define NOTE_FS6 1480 73#define NOTE_G6 1568 74#define NOTE_GS6 1661 75#define NOTE_A6 1760 76#define NOTE_AS6 1865 77#define NOTE_B6 1976 78#define NOTE_C7 2093 79#define NOTE_CS7 2217 80#define NOTE_D7 2349 81#define NOTE_DS7 2489 82#define NOTE_E7 2637 83#define NOTE_F7 2794 84#define NOTE_FS7 2960 85#define NOTE_G7 3136 86#define NOTE_GS7 3322 87#define NOTE_A7 3520 88#define NOTE_AS7 3729 89#define NOTE_B7 3951 90#define NOTE_C8 4186 91#define NOTE_CS8 4435 92#define NOTE_D8 4699 93#define NOTE_DS8 4978
Arduino Christmas Songs
arduino
1/* 2 Arduino Christmas Songs 3 4 Based on a project and code 5 by Dipto Pratyaksa, updated on 31/3/13 6 7 Modified for Christmas by Joshi, 8 on Dec 17th, 2017. 9*/ 10 11#include "pitches.h" 12 13#define melodyPin 14 9 15 16// Jingle Bells 17 18int melody[] = { 19 NOTE_E5, NOTE_E5, NOTE_E5, 20 21 NOTE_E5, NOTE_E5, NOTE_E5, 22 NOTE_E5, NOTE_G5, NOTE_C5, NOTE_D5, 23 NOTE_E5, 24 25 NOTE_F5, NOTE_F5, NOTE_F5, NOTE_F5, 26 NOTE_F5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, 27 28 NOTE_E5, NOTE_D5, NOTE_D5, NOTE_E5, 29 NOTE_D5, NOTE_G5 30}; 31 32int tempo[] 33 = { 34 8, 8, 4, 35 8, 8, 4, 36 8, 8, 8, 8, 37 2, 38 8, 8, 8, 8, 39 8, 40 8, 8, 16, 16, 41 8, 8, 8, 8, 42 4, 4 43}; 44 45// We wish you a merry Christmas 46 47int 48 wish_melody[] = { 49 NOTE_B3, 50 NOTE_F4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_E4, 51 52 NOTE_D4, NOTE_D4, NOTE_D4, 53 NOTE_G4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_F4, 54 55 NOTE_E4, NOTE_E4, NOTE_E4, 56 NOTE_A4, NOTE_A4, NOTE_B4, NOTE_A4, NOTE_G4, 57 58 NOTE_F4, NOTE_D4, NOTE_B3, NOTE_B3, 59 NOTE_D4, NOTE_G4, NOTE_E4, 60 NOTE_F4 61}; 62 63int 64 wish_tempo[] = { 65 4, 66 4, 8, 8, 8, 8, 67 4, 4, 4, 68 4, 8, 8, 8, 8, 69 70 4, 4, 4, 71 4, 8, 8, 8, 8, 72 4, 4, 8, 8, 73 4, 4, 4, 74 2 75}; 76 77// 78 Santa Claus is coming to town 79 80int santa_melody[] = { 81 NOTE_G4, 82 NOTE_E4, 83 NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4, 84 NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, NOTE_C5, 85 86 NOTE_E4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4, 87 NOTE_A4, NOTE_G4, NOTE_F4, NOTE_F4, 88 89 NOTE_E4, NOTE_G4, NOTE_C4, NOTE_E4, 90 NOTE_D4, NOTE_F4, NOTE_B3, 91 NOTE_C4 92}; 93 94int 95 santa_tempo[] = { 96 8, 97 8, 8, 4, 4, 4, 98 8, 8, 4, 4, 4, 99 8, 8, 4, 100 4, 4, 101 8, 8, 4, 2, 102 4, 4, 4, 4, 103 4, 2, 4, 104 1 105}; 106 107int switchOne 108 = 0; 109int switchTwo = 0; 110int switchThree = 0; 111 112void setup(void) { 113 114 pinMode(9, OUTPUT); // Buzzer 115 pinMode(13, OUTPUT); // Led indicator when 116 singing a note 117 pinMode(2, INPUT); 118 pinMode(3, INPUT); 119 pinMode(4, INPUT); 120} 121 122void 123 loop() { 124 switchOne = digitalRead(2); 125 switchTwo = digitalRead(3); 126 switchThree 127 = digitalRead(4); 128 if (switchOne == HIGH) { 129 sing(1); 130 } else if (switchTwo 131 == HIGH) { 132 sing(2); 133 } else if (switchThree == HIGH) { 134 sing(3); 135 136 } 137} 138 139int song = 0; 140 141void sing(int s) { 142 // iterate over the 143 notes of the melody: 144 song = s; 145 if (song == 3) { 146 Serial.println(" 147 'We wish you a Merry Christmas'"); 148 int size = sizeof(wish_melody) / sizeof(int); 149 150 for (int thisNote = 0; thisNote < size; thisNote++) { 151 152 // to calculate 153 the note duration, take one second 154 // divided by the note type. 155 //e.g. 156 quarter note = 1000 / 4, eighth note = 1000/8, etc. 157 int noteDuration = 158 1000 / wish_tempo[thisNote]; 159 160 buzz(melodyPin, wish_melody[thisNote], 161 noteDuration); 162 163 // to distinguish the notes, set a minimum time between 164 them. 165 // the note's duration + 30% seems to work well: 166 int pauseBetweenNotes 167 = noteDuration * 1.30; 168 delay(pauseBetweenNotes); 169 170 // stop the 171 tone playing: 172 buzz(melodyPin, 0, noteDuration); 173 174 } 175 } else 176 if (song == 2) { 177 Serial.println(" 'Santa Claus is coming to town'"); 178 179 int size = sizeof(santa_melody) / sizeof(int); 180 for (int thisNote = 0; 181 thisNote < size; thisNote++) { 182 183 // to calculate the note duration, take 184 one second 185 // divided by the note type. 186 //e.g. quarter note = 187 1000 / 4, eighth note = 1000/8, etc. 188 int noteDuration = 900 / santa_tempo[thisNote]; 189 190 191 buzz(melodyPin, santa_melody[thisNote], noteDuration); 192 193 // to 194 distinguish the notes, set a minimum time between them. 195 // the note's duration 196 + 30% seems to work well: 197 int pauseBetweenNotes = noteDuration * 1.30; 198 199 delay(pauseBetweenNotes); 200 201 // stop the tone playing: 202 buzz(melodyPin, 203 0, noteDuration); 204 205 } 206 } else { 207 208 Serial.println(" 'Jingle 209 Bells'"); 210 int size = sizeof(melody) / sizeof(int); 211 for (int thisNote 212 = 0; thisNote < size; thisNote++) { 213 214 // to calculate the note duration, 215 take one second 216 // divided by the note type. 217 //e.g. quarter note 218 = 1000 / 4, eighth note = 1000/8, etc. 219 int noteDuration = 1000 / tempo[thisNote]; 220 221 222 buzz(melodyPin, melody[thisNote], noteDuration); 223 224 // to distinguish 225 the notes, set a minimum time between them. 226 // the note's duration + 30% 227 seems to work well: 228 int pauseBetweenNotes = noteDuration * 1.30; 229 delay(pauseBetweenNotes); 230 231 232 // stop the tone playing: 233 buzz(melodyPin, 0, noteDuration); 234 235 236 } 237 } 238} 239 240void buzz(int targetPin, long frequency, long length) { 241 242 digitalWrite(13, HIGH); 243 long delayValue = 1000000 / frequency / 2; // calculate 244 the delay value between transitions 245 //// 1 second's worth of microseconds, 246 divided by the frequency, then split in half since 247 //// there are two phases 248 to each cycle 249 long numCycles = frequency * length / 1000; // calculate the 250 number of cycles for proper timing 251 //// multiply frequency, which is really 252 cycles per second, by the number of seconds to 253 //// get the total number of 254 cycles to produce 255 for (long i = 0; i < numCycles; i++) { // for the calculated 256 length of time... 257 digitalWrite(targetPin, HIGH); // write the buzzer pin 258 high to push out the diaphram 259 delayMicroseconds(delayValue); // wait for 260 the calculated delay value 261 digitalWrite(targetPin, LOW); // write the buzzer 262 pin low to pull back the diaphram 263 delayMicroseconds(delayValue); // wait 264 again or the calculated delay value 265 } 266 digitalWrite(13, LOW); 267 268}
Downloadable files
Wiring
Wiring
Wiring
Wiring
Comments
Only logged in users can leave comments
joshi
0 Followers
•0 Projects
76
0