• 3-Song Arduino Music Box with LCD Display and LED Light Show

QC

3-Song Arduino Music Box with LCD Display and LED Light Show

This project is a mini “jukebox” based on Arduino and built in Tinkercad.
Three push buttons each play a different melody on a piezo buzzer: "Happy Birthday", "Jingle Bells" and "Ode to Joy". A 16×2 LCD screen displays the title of the current song, and a row of colored LEDs flash while the music plays, creating a simple light show.

December 10, 2025

3204 views

0 respect

Devices and components

16x2 LCD screen with I²C interface

Arduino Nano Matter

LED (light emitting diode) color white, green, red, yellow, blue

220 Ω ohm resistors

Potentiometer 10,000 Ohms

Large breadboard

Piezo speaker

Resistance (10k Ohms)

Push-button Arduino

Software and tools

Arduino Web Editor

Project description

3 Song Arduino Music Box Code

Structure + Explanation

1#include <LiquidCrystal.h>
2
3/*************************************************
4 * Public Constants
5 *************************************************/
6
7#define NOTE_B0 31
8#define NOTE_C1 33
9#define NOTE_CS1 35
10#define NOTE_D1 37
11#define NOTE_DS1 39
12#define NOTE_E1 41
13#define NOTE_F1 44
14#define NOTE_FS1 46
15#define NOTE_G1 49
16#define NOTE_GS1 52
17#define NOTE_A1 55
18#define NOTE_AS1 58
19#define NOTE_B1 62
20#define NOTE_C2 65
21#define NOTE_CS2 69
22#define NOTE_D2 73
23#define NOTE_DS2 78
24#define NOTE_E2 82
25#define NOTE_F2 87
26#define NOTE_FS2 93
27#define NOTE_G2 98
28#define NOTE_GS2 104
29#define NOTE_A2 110
30#define NOTE_AS2 117
31#define NOTE_B2 123
32#define NOTE_C3 131
33#define NOTE_CS3 139
34#define NOTE_D3 147
35#define NOTE_DS3 156
36#define NOTE_E3 165
37#define NOTE_F3 175
38#define NOTE_FS3 185
39#define NOTE_G3 196
40#define NOTE_GS3 208
41#define NOTE_A3 220
42#define NOTE_AS3 233
43#define NOTE_B3 247
44#define NOTE_C4 262
45#define NOTE_CS4 277
46#define NOTE_D4 294
47#define NOTE_DS4 311
48#define NOTE_E4 330
49#define NOTE_F4 349
50#define NOTE_FS4 370
51#define NOTE_G4 392
52#define NOTE_GS4 415
53#define NOTE_A4 440
54#define NOTE_AS4 466
55#define NOTE_B4 494
56#define NOTE_C5 523
57#define NOTE_CS5 554
58#define NOTE_D5 587
59#define NOTE_DS5 622
60#define NOTE_E5 659
61#define NOTE_F5 698
62#define NOTE_FS5 740
63#define NOTE_G5 784
64#define NOTE_GS5 831
65#define NOTE_A5 880
66#define NOTE_AS5 932
67#define NOTE_B5 988
68#define NOTE_C6 1047
69#define NOTE_CS6 1109
70#define NOTE_D6 1175
71#define NOTE_DS6 1245
72#define NOTE_E6 1319
73#define NOTE_F6 1397
74#define NOTE_FS6 1480
75#define NOTE_G6 1568
76#define NOTE_GS6 1661
77#define NOTE_A6 1760
78#define NOTE_AS6 1865
79#define NOTE_B6 1976
80#define NOTE_C7 2093
81#define NOTE_CS7 2217
82#define NOTE_D7 2349
83#define NOTE_DS7 2489
84#define NOTE_E7 2637
85#define NOTE_F7 2794
86#define NOTE_FS7 2960
87#define NOTE_G7 3136
88#define NOTE_GS7 3322
89#define NOTE_A7 3520
90#define NOTE_AS7 3729
91#define NOTE_B7 3951
92#define NOTE_C8 4186
93#define NOTE_CS8 4435
94#define NOTE_D8 4699
95#define NOTE_DS8 4978
96
97
98//Notes in Happy Birthday song
99int notesHBD[] = {
100 NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_F4, NOTE_E4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_G4, NOTE_F4, NOTE_C4, NOTE_C4, NOTE_C5, NOTE_A4, NOTE_F4, NOTE_E4, NOTE_D4, NOTE_AS4, NOTE_AS4, NOTE_A4, NOTE_F4, NOTE_G4, NOTE_F4
101};
102
103//note durations for Happy Birthday to You: 4 = quarter note, 8 = eight note, etc.
104int durationsHBD[] = {
105 8, 8, 4, 4, 4, 2, 8, 8, 4, 4, 4, 2, 8, 8, 4, 4, 4, 4, 4, 8, 8, 4, 4, 4, 2,
106};
107
108//Notes in Jingle Bells song
109int notesJB[] = {
110NOTE_E5, NOTE_E5, NOTE_E5,
111NOTE_E5, NOTE_E5, NOTE_E5,
112NOTE_E5, NOTE_G5, NOTE_C5, NOTE_D5,
113NOTE_E5,
114NOTE_F5, NOTE_F5, NOTE_F5, NOTE_F5,
115NOTE_F5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5,
116NOTE_E5, NOTE_D5, NOTE_D5, NOTE_E5,
117NOTE_D5, NOTE_G5
118};
119
120// note durations for Christmas Song: JingleBells
121int durationsJB[] = {
1228, 8, 4,
1238, 8, 4,
1248, 8, 8, 8,
1252,
1268, 8, 8, 8,
1278, 8, 8, 16, 16,
1288, 8, 8, 8,
1294, 4
130};
131
132//Notes in Ode to Joy - Beethoven's Symphony No. 9
133int notesOde[] = {
134 // 1st section
135 NOTE_E4, NOTE_E4, NOTE_F4, NOTE_G4,
136 NOTE_G4, NOTE_F4, NOTE_E4, NOTE_D4,
137 NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4,
138 NOTE_E4, NOTE_D4, NOTE_D4,
139
140 // 2nd section
141 NOTE_E4, NOTE_E4, NOTE_F4, NOTE_G4,
142 NOTE_G4, NOTE_F4, NOTE_E4, NOTE_D4,
143 NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4,
144 NOTE_D4, NOTE_C4, NOTE_C4,
145
146 // 3rd section
147 NOTE_D4, NOTE_D4, NOTE_E4, NOTE_C4,
148 NOTE_D4, NOTE_E4, NOTE_F4, NOTE_E4,
149 NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4,
150 NOTE_E4, NOTE_D4, NOTE_C4, NOTE_D4,
151 NOTE_G3,
152
153 // 4th section
154 NOTE_E4, NOTE_E4, NOTE_F4, NOTE_G4,
155 NOTE_G4, NOTE_F4, NOTE_E4, NOTE_D4,
156 NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4,
157 NOTE_D4, NOTE_C4, NOTE_C4
158};
159
160int durationsOde[] = {
161 // 1st section
162 4, 4, 4, 4,
163 4, 4, 4, 4,
164 4, 4, 4, 4,
165 -4, 8, 2,
166
167 // 2nd section
168 4, 4, 4, 4,
169 4, 4, 4, 4,
170 4, 4, 4, 4,
171 -4, 8, 2,
172
173 // 3rd section
174 4, 4, 4, 4,
175 4, 8, 8, 4,
176 4, 4, 8, 8,
177 4, 4, 4, 4,
178 2,
179
180 // 4th section
181 4, 4, 4, 4,
182 4, 4, 4, 4,
183 4, 4, 4, 4,
184 -4, 8, 2
185};
186
187// tempo for Ode to Joy (beats per minute)
188int tempoOde = 120;
189
190const int RS = 2;
191const int E = 3;
192const int DB4 = 4;
193const int DB5 = 5;
194const int DB6 = 6;
195const int DB7 = 7;
196
197const int WHITE_LED = A0;
198const int BLUE_LED = A1;
199const int RED_LED = A2;
200const int YELLOW_LED = A3;
201const int GREEN_LED = A4;
202
203const int SPEAKER = 10;
204
205const int BUTTON1 = 13;
206const int BUTTON2 = 12;
207const int BUTTON3 = 11;
208
209LiquidCrystal lcd(RS, E, DB4, DB5, DB6, DB7);
210
211
212void setup()
213{
214 pinMode(SPEAKER, OUTPUT);
215
216 // Buttons (3)
217 pinMode(BUTTON1, INPUT);
218 pinMode(BUTTON2, INPUT);
219 pinMode(BUTTON3, INPUT);
220
221 // LEDs (5)
222 pinMode(WHITE_LED, OUTPUT);
223 pinMode(BLUE_LED, OUTPUT);
224 pinMode(RED_LED, OUTPUT);
225 pinMode(YELLOW_LED, OUTPUT);
226 pinMode(GREEN_LED, OUTPUT);
227
228 lcd.begin (16, 2);
229}
230
231void loop()
232{
233 // Check to see if button 1 is pressed
234 if (digitalRead(BUTTON1) == HIGH) {
235 lcd.setCursor(0, 0);
236 lcd.print(" Happy Birthday");
237 lcd.setCursor(0, 1);
238 lcd.print(" to You! ");
239 playHappyBirthday();
240 // Play Happy Birthday song
241 // Print Happy Birthday to You (on LCD)
242 // Do something with the LEDs
243 lcd.clear();
244 }
245 else if (digitalRead(BUTTON2) == HIGH) {
246 lcd.setCursor(0, 0);
247 lcd.print("Merry Christmas");
248 lcd.setCursor(0, 1);
249 lcd.print(" Jingle Bells!");
250 playJingleBells();
251 // Play the Merry Christmas song
252 // Print JingleBells (on LCD)
253 // Do something with the LEDs
254 lcd.clear();
255 }
256 else if (digitalRead(BUTTON3) == HIGH) {
257 lcd.setCursor(0, 0);
258 lcd.print(" Beethoven");
259 lcd.setCursor(0, 1);
260 lcd.print(" Ode to Joy!");
261 playOdeToJoy();
262 lcd.clear();
263 }
264
265 // Turn off all 5 LEDs
266 pinMode(WHITE_LED, LOW);
267 pinMode(BLUE_LED, LOW);
268 pinMode(RED_LED, LOW);
269 pinMode(YELLOW_LED, LOW);
270 pinMode(GREEN_LED, LOW);
271}
272
273void playHappyBirthday() {
274 for (int thisNote = 0 ; thisNote < 25 ; thisNote++) {
275
276 int randomLight1 = random(A0, A5);
277 int randomLight2 = random(A0, A5);
278 int randomLight3 = random(A0, A5);
279 int randomLight4 = random(A0, A5);
280 int randomLight5 = random(A0, A5);
281
282 analogWrite (randomLight1, 255);
283 analogWrite (randomLight2, 255);
284 analogWrite (randomLight3, 255);
285 analogWrite (randomLight4, 0);
286 analogWrite (randomLight5, 0);
287
288 int noteDuration = 1130/durationsHBD[thisNote];
289 tone(SPEAKER, notesHBD[thisNote], noteDuration);
290
291 int pause = noteDuration * 1.275;
292 delay (pause);
293
294 noTone(SPEAKER);
295 }
296}
297
298void playJingleBells() {
299 int length = sizeof(notesJB) / sizeof(notesJB[0]);
300
301 for (int thisNote = 0; thisNote < length; thisNote++) {
302 int randomLight1 = random(A0, A5);
303 int randomLight2 = random(A0, A5);
304 int randomLight3 = random(A0, A5);
305 int randomLight4 = random(A0, A5);
306 int randomLight5 = random(A0, A5);
307
308 analogWrite(randomLight1, 255);
309 analogWrite(randomLight2, 255);
310 analogWrite(randomLight3, 255);
311 analogWrite(randomLight4, 0);
312 analogWrite(randomLight5, 0);
313
314 // quarter note = 1000/4, eighth = 1000/8, etc.
315 int noteDuration = 1000 / durationsJB[thisNote];
316
317 buzz(SPEAKER, notesJB[thisNote], noteDuration);
318
319 int pauseBetweenNotes = noteDuration * 1.30;
320 delay(pauseBetweenNotes);
321
322 // stop the tone
323 buzz(SPEAKER, 0, noteDuration);
324 }
325}
326
327void buzz(int targetPin, long frequency, long length) {
328 long delayValue = 1000000 / frequency / 2; // calculate the delay value between transitions
329 //// 1 second's worth of microseconds, divided by the frequency, then split in half since
330 //// there are two phases to each cycle
331 long numCycles = frequency * length / 1000; // calculate the number of cycles for proper timing
332 //// multiply frequency, which is really cycles per second, by the number of seconds to
333 //// get the total number of cycles to produce
334 for (long i = 0; i < numCycles; i++) { // for the calculated length of time...
335 digitalWrite(targetPin, HIGH); // write the buzzer pin high to push out the diaphram
336 delayMicroseconds(delayValue); // wait for the calculated delay value
337 digitalWrite(targetPin, LOW); // write the buzzer pin low to pull back the diaphram
338 delayMicroseconds(delayValue); // wait again or the calculated delay value
339 }
340}
341
342void playOdeToJoy() {
343 int length = sizeof(notesOde) / sizeof(notesOde[0]);
344 long wholenote = (60000L * 4) / tempoOde; // whole note duration in ms
345
346 for (int i = 0; i < length; i++) {
347 int randomLight1 = random(A0, A5);
348 int randomLight2 = random(A0, A5);
349 int randomLight3 = random(A0, A5);
350 int randomLight4 = random(A0, A5);
351 int randomLight5 = random(A0, A5);
352
353 analogWrite(randomLight1, 255);
354 analogWrite(randomLight2, 255);
355 analogWrite(randomLight3, 255);
356 analogWrite(randomLight4, 0);
357 analogWrite(randomLight5, 0);
358
359 int divider = durationsOde[i];
360 long noteDuration;
361
362 if (divider > 0) {
363 // regular note
364 noteDuration = wholenote / divider;
365 } else {
366 // dotted note: negative value means dotted
367 divider = -divider;
368 noteDuration = wholenote / divider;
369 noteDuration = noteDuration * 3 / 2; // x1.5
370 }
371
372 tone(SPEAKER, notesOde[i], noteDuration * 9 / 10);
373 delay(noteDuration);
374 noTone(SPEAKER);
375 }
376}




Note: Content and images are from: https://projecthub.arduino.cc/, with some modifications.
If you want it removed due to copyright reasons, please leave a comment. Thank you.
I want to share this article more widely so that everyone knows about Arduino and your project.

Easy remote control

Remotely control an LED with ease. Devices and components Arduino Nano 33 BLE with headers Box 525 Resistors precision 1% - 17 values Breadb...