// INCLUDE LIBRARY FOR REMOTE
#include <IRremote.h>
// INCLUDE LIBRARY FOR LCD
#include <LiquidCrystal.h>
// INCLUDE LIBRARY FOR MUSIC
//#include <pitches.h>
// PUBLIC CONSTANT NOTE FREQUENCIES
#define NOTE_B0 31
#define NOTE_C1 33
#define NOTE_CS1 35
#define NOTE_D1 37
#define NOTE_DS1 39
#define NOTE_E1 41
#define NOTE_F1 44
#define NOTE_FS1 46
#define NOTE_G1 49
#define NOTE_GS1 52
#define NOTE_A1 55
#define NOTE_AS1 58
#define NOTE_B1 62
#define NOTE_C2 65
#define NOTE_CS2 69
#define NOTE_D2 73
#define NOTE_DS2 78
#define NOTE_E2 82
#define NOTE_F2 87
#define NOTE_FS2 93
#define NOTE_G2 98
#define NOTE_GS2 104
#define NOTE_A2 110
#define NOTE_AS2 117
#define NOTE_B2 123
#define NOTE_C3 131
#define NOTE_CS3 139
#define NOTE_D3 147
#define NOTE_DS3 156
#define NOTE_E3 165
#define NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#define NOTE_GS3 208
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_C4 262
#define NOTE_CS4 277
#define NOTE_D4 294
#define NOTE_DS4 311
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_FS4 370
#define NOTE_G4 392
#define NOTE_GS4 415
#define NOTE_A4 440
#define NOTE_AS4 466
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_CS5 554
#define NOTE_D5 587
#define NOTE_DS5 622
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_FS5 740
#define NOTE_G5 784
#define NOTE_GS5 831
#define NOTE_A5 880
#define NOTE_AS5 932
#define NOTE_B5 988
#define NOTE_C6 1047
#define NOTE_CS6 1109
#define NOTE_D6 1175
#define NOTE_DS6 1245
#define NOTE_E6 1319
#define NOTE_F6 1397
#define NOTE_FS6 1480
#define NOTE_G6 1568
#define NOTE_GS6 1661
#define NOTE_A6 1760
#define NOTE_AS6 1865
#define NOTE_B6 1976
#define NOTE_C7 2093
#define NOTE_CS7 2217
#define NOTE_D7 2349
#define NOTE_DS7 2489
#define NOTE_E7 2637
#define NOTE_F7 2794
#define NOTE_FS7 2960
#define NOTE_G7 3136
#define NOTE_GS7 3322
#define NOTE_A7 3520
#define NOTE_AS7 3729
#define NOTE_B7 3951
#define NOTE_C8 4186
#define NOTE_CS8 4435
#define NOTE_D8 4699
#define NOTE_DS8 4978
#define REST 0
// TO MAKE THE SONG FASTER OR SLOWER
int tempo = 140;
//CONSTANT VARIABLES FOR ALL MY HARDWARE COMPONENTS
const int buzzer = 8;
const int IRpin = 11;
const int rs = 7, en = 6, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
//ADD ALL MY LCD VARIABLES INTO ONE VARIABLE
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// CONSTANT FROM THE REMOTE LIBRARY
IRrecv irrecv(IRpin);
//STATE FUNCTIONS TO PLAY MY SONGS
void playSong1();
void playSong2();
void playSong3();
void runMenu();
// SETUP FUNCTION
void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
//SETUP LCD NUMBER OF ROWS & COLUMNS
lcd.begin(16, 2);
//SET THE PIEZO BUZZER TO OUTPUT
pinMode(buzzer,OUTPUT);
}
void loop(){
if (irrecv.decode()) {
long unsigned int x = irrecv.decodedIRData.decodedRawData;
Serial.println(irrecv.decodedIRData.decodedRawData, HEX);
if(x==0xFF00BF00){
runMenu();
}
else if(x==0xEF10BF00){
playSong1();
}
else if (x==0xEE11BF00){
playSong2();
}
else if (x==0xED12BF00){
playSong3();
}
}
irrecv.resume();
}
//FUNCTION TO PRINT ON MY LCD SCREEN
void runMenu(){
// DISPLAY TEXT ON LCD SCREEN
lcd.clear();
lcd.print("WELCOME");
delay(2000); // Delay to allow the user to read the text
lcd.clear();
lcd.print("SELECT A SONG");
delay(2000);
lcd.clear();
lcd.print("1. JINGLEBELL");
delay(2000);
lcd.clear();
lcd.print("2. SANTACLAUSE");
delay(2000);
lcd.clear();
lcd.print("3.MERRYCHRISTMAS");
delay(2000);
}
// FUNCTION TO PLAY MY FIRST SONG (JINGLE BELL)
void playSong1() {
lcd.clear();
lcd.print("Playing JINGLE BELL");
// Define the notes and durations for Song 1
int song1[] = {
NOTE_E5, NOTE_E5, NOTE_E5,
NOTE_E5, NOTE_E5, NOTE_E5,
NOTE_E5, NOTE_G5, NOTE_C5, NOTE_D5,
NOTE_E5,
NOTE_F5, NOTE_F5, NOTE_F5, NOTE_F5,
NOTE_F5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5,
NOTE_E5, NOTE_D5, NOTE_D5, NOTE_E5,
NOTE_D5, NOTE_G5
};
int durations1[] = {
8, 8, 4,
8, 8, 4,
8, 8, 8, 8,
2,
8, 8, 8, 8,
8,
8, 8, 16, 16,
8, 8, 8, 8,
4, 4
};
// go through over the song and play each note
for (int i = 0; i < sizeof(song1) / sizeof(song1[0]); i++) {
int noteDuration = 1000 / durations1[i];
//play each note on the buzzer
tone(buzzer, song1[i], noteDuration);
// pause between notes
delay(noteDuration * 1.30);
}
}
void playSong2() {
lcd.clear();
lcd.print("Playing SANTA CLAUSE IS COMING");
lcd.autoscroll();
// Define the notes and durations for Song 3
int song2[] = {
NOTE_G4,
NOTE_E4,
NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4,
NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, NOTE_C5,
NOTE_E4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4,
NOTE_A4, NOTE_G4, NOTE_F4, NOTE_F4,
NOTE_E4, NOTE_G4, NOTE_C4, NOTE_E4,
NOTE_D4, NOTE_F4, NOTE_B3,
NOTE_C4
};
int durations2[] = {
8,
8, 8, 4, 4, 4,
8, 8, 4, 4, 4,
8, 8, 4,
4, 4,
8, 8, 4, 2,
4, 4, 4, 4,
4, 2, 4,
1
};
// go through over the song and play each note
for (int i = 0; i < sizeof(song2) / sizeof(song2[0]); i++) {
int noteDuration = 1000 / durations2[i];
//play each note on the buzzer
tone(buzzer, song2[i], noteDuration);
// pause between notes
delay(noteDuration * 1.30);
}
}
void playSong3() {
lcd.clear();
lcd.print("Playing WE WISH YOU A MERRY CHRISTMAS");
lcd.autoscroll();
int song3[] = {
NOTE_C5,
NOTE_F5, NOTE_F5, NOTE_G5, NOTE_F5, NOTE_E5,
NOTE_D5, NOTE_D5, NOTE_D5,
NOTE_G5, NOTE_G5, NOTE_A5, NOTE_G5, NOTE_F5,
NOTE_E5, NOTE_C5, NOTE_C5,
NOTE_A5, NOTE_AS5, NOTE_A5, NOTE_G5,
NOTE_F5, NOTE_D5, NOTE_C5, NOTE_C5,
NOTE_D5, NOTE_G5, NOTE_E5,
NOTE_F5, NOTE_C5,
REST // Use the REST constant for clarity
};
int durations3[] = {
4,
4, 8, 8, 8, 8,
4, 4, 4,
4, 8, 8, 8, 8,
4, 4, 4,
4, 8, 8, 8, 8,
4, 4, 8, 8,
4, 4, 4,
2, REST // Use REST constant here as well
};
// Go through over the song and play each note
for (int i = 0; i < sizeof(song3) / sizeof(song3[0]); i++) {
int noteDuration = 1000 / durations3[i];
// Play each note on the buzzer
tone(buzzer, song3[i], noteDuration);
// Pause between notes
delay(noteDuration * 1.30);
}
noTone(buzzer); // Stop the buzzer after the song
}
Use code tags to format code for the forum