#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
const int buzzerPin = 10; // Adjust this pin according to your setup
// Define the keypad
const byte ROW_NUM = 4; //four rows
const byte COLUMN_NUM = 4; //four columns
char keys[ROW_NUM][COLUMN_NUM] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
//------------------
//AIRTEL SONG--------
const uint8_t pin = 10;
#define C3 130.81
#define Db3 138.59
#define D3 146.83
#define Eb3 155.56
#define E3 164.81
#define F3 174.61
#define Gb3 185.00
#define G3 196.00
#define Ab3 207.65
#define LA3 220.00
#define Bb3 233.08
#define B3 246.94
#define C4 261.63
#define Db4 277.18
#define D4 293.66
#define Eb4 311.13
#define E4 329.63
#define F4 349.23
#define Gb4 369.99
#define G4 392.00
#define Ab4 415.30
#define LA4 440.00
#define Bb4 466.16
#define B4 493.88
#define C5 523.25
#define Db5 554.37
#define D5 587.33
#define Eb5 622.25
#define E5 659.26
#define F5 698.46
#define Gb5 739.99
#define G5 783.99
#define Ab5 830.61
#define LA5 880.00
#define Bb5 932.33
#define B5 987.77
// DURATION OF THE NOTES
#define BPM 120 // you can change this value changing all the others
#define H 2*Q //half 2/4
#define Q 60000/BPM //quarter 1/4
#define E Q/2 //eighth 1/8
#define S Q/4 // sixteenth 1/16
#define W 4*Q // whole 4/4
//------------------
byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; // connect to the row pinouts of the keypad
byte pin_column[COLUMN_NUM] = {5, 4, 3, 2}; // connect to the column pinouts of the keypad
Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM);
void setup() {
lcd.begin(16, 2); // Initialize the LCD with 16x2 characters
lcd.backlight();
pinMode(buzzerPin, OUTPUT);
}
void loop() {
lcd.setCursor(0, 0);
lcd.print("1. Custom Play");
lcd.setCursor(0, 1);
lcd.print("2. Music Select");
lcd.setCursor(0, 2);
lcd.print("3. Volume Setting");
char key = keypad.getKey();
if (key) {
handleKeyPress(key);
}
}
void handleKeyPress(char key) {
switch (key) {
case '1':
customPlay();
break;
case '2':
lcd.clear();
musicSelect();
break;
case '3':
volumeSetting();
break;
default:
// Handle other keys if needed
break;
}
}
void customPlay() {
lcd.clear();
lcd.print("Custom Play");
lcd.setCursor(0, 1);
lcd.print("Press keys to play");
while (true) {
char key = keypad.getKey();
if (key == '#') {
lcd.clear();
return; // exit custom play mode
}
if (key) {
// Map the key to a frequency and play the tone
int frequency = map(key, '0', '9', 262, 988); // Adjust the frequency range as needed
tone(buzzerPin, frequency, 100); // Adjust the duration as needed
}
}
}
void musicSelect() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Music Select");
lcd.setCursor(0, 1);
lcd.print("1. Airtel");
lcd.setCursor(0, 2);
lcd.print("Music 2");
char key;
do {
key = keypad.getKey();
if (key == '1') {
airtel_song();
lcd.clear();
return; // exit music select after playing
}
// Implement logic for selecting other music and play/pause here
// For simplicity, we will just wait for the '#' key to go back to the main menu
} while (key != '#');
}
void volumeSetting() {
lcd.clear();
lcd.print("Volume Setting");
lcd.setCursor(0, 1);
lcd.print("Use keys to adjust");
int volume = 5; // Initial volume level, adjust as needed
displayVolume(volume);
while (true) {
char key = keypad.getKey();
if (key == '#') {
lcd.clear();
return; // exit volume setting mode
}
if (key == 'A' && volume < 10) {
volume++;
displayVolume(volume);
} else if (key == 'B' && volume > 0) {
volume--;
displayVolume(volume);
}
}
}
void displayVolume(int volume) {
lcd.setCursor(0, 2);
lcd.print("Volume: ");
lcd.print(volume);
lcd.print(" ");
// Implement custom character logic for displaying volume level
}
void playShapeOfYou() {
lcd.clear();
lcd.print("Shape of You.");
}
void airtel_song(){
// Line1
tone(pin,LA4,Q);
delay(1+Q);
tone(pin,LA4,E);
delay(1+E);
tone(pin,LA4,E);
delay(1+E);
tone(pin,LA4,Q);
delay(1+Q);
tone(pin,E5,E);
delay(1+E);
delay(1+E);
tone(pin,B4,E);
delay(1+E);
tone(pin,C5,E);
delay(1+E);
tone(pin,B4,E);
delay(1+E);
tone(pin,LA4,E);
delay(1+E);
tone(pin,G4,Q);
delay(1+Q);
tone(pin,B4,Q);
delay(1+Q);
// Line2
tone(pin,LA4,E);
delay(1+E);
tone(pin,B4,E);
delay(1+E);
tone(pin,LA4,E);
delay(1+E);
tone(pin,G4,E);
delay(1+E);
tone(pin,LA4,E);
delay(1+E);
tone(pin,B4,E);
delay(1+E);
tone(pin,C5,E);
delay(1+E);
delay(1+E);
tone(pin,B4,H);
delay(1+H);
tone(pin,LA4,E);
delay(1+E);
tone(pin,G4,E);
delay(1+E);
tone(pin,E4,H);
delay(1+H);
//Line3
tone(pin,LA5,Q);
delay(1+Q);
tone(pin,E5,Q);
delay(1+Q);
tone(pin,G5,Q);
delay(1+Q);
tone(pin,E5,E);
delay(1+E);
delay(1+E);
tone(pin,E5,Q);
delay(1+Q);
tone(pin,D5,Q);
delay(1+Q);
tone(pin,C5,Q);
delay(1+Q);
tone(pin,LA4,Q);
delay(1+Q);
//Line4
tone(pin,C5,Q);
delay(1+Q);
tone(pin,D5,Q);
delay(1+Q);
tone(pin,E5,Q);
delay(1+Q);
tone(pin,F5,E);
delay(1+E);
delay(1+E);
tone(pin,D5,W);
delay(1+W);
tone(pin,C5,E);
delay(1+E);
tone(pin,B4,E);
delay(1+E);
tone(pin,LA4,E);
delay(1+E);
}