Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: 4DGL-uLCD-SE PinDetect SDFileSystem Speaker TextLCD mbed wave_player
Fork of musicplayer by
Diff: main.cpp
- Revision:
- 1:45d8f6557ff8
- Parent:
- 0:4b3056d3c684
- Child:
- 2:84f06fb95343
diff -r 4b3056d3c684 -r 45d8f6557ff8 main.cpp
--- a/main.cpp Thu Mar 13 00:23:46 2014 +0000
+++ b/main.cpp Mon Mar 17 18:48:13 2014 +0000
@@ -6,7 +6,8 @@
#include "Speaker.h"
#include <vector>
#include <string>
-
+
+//Set up LEDs
DigitalOut myled(LED1);
DigitalOut myled2(LED2);
DigitalOut myled3(LED3);
@@ -16,29 +17,22 @@
SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
TextLCD lcd(p9, p10, p11, p12, p13, p14); // rs, e, d4-d7
-DigitalIn sdDetect(p17);
+DigitalIn sdDetect(p17); // Set up a pin for SD Card Detect
-PinDetect pb1(p28); // up shift
-PinDetect pb2(p29); // down shift
-PinDetect pb3(p30); // pause
-PinDetect pb4(p27); // volume or play
+PinDetect pb1(p28); // pb forup shift
+PinDetect pb2(p29); // pb fordown shift
+PinDetect pb3(p30); // pb for pause
+PinDetect pb4(p27); // pb for volume or play
-AnalogOut DACout(p18);
-wave_player waver(&DACout);
-int pos = 0;
-int xx = -1;
-int vol = 0;
-//extern "C" {
-//int SD_inserted();
-//}
-//extern "C" virtual disk_initialize();
-/*int disk_initialize();
-}*/
-bool playing = false;
-bool old_playing = false;
+AnalogOut DACout(p18); //set up speaker
+wave_player waver(&DACout); //set up wave player library
+int pos = 0; // index of the song
+int vol = 0; // volume controller
+
+bool playing = false; //variable for pause/play since we only have 1 pb for that
vector<string> filenames; //filenames are stored in a vector string
-void read_file_names(char *dir)
+void read_file_names(char *dir) // function that reads in file names from sd cards
{
DIR *dp;
struct dirent *dirp;
@@ -48,9 +42,10 @@
filenames.push_back(string(dirp->d_name));
}
}
-
+//interrupt handler for pb1
void pb1_hit_callback (void)
{
+ // it checks for the total number of songs in the sd card..then increments the index until it reaches the last one, then resets to 0
int l = filenames.size();
if (pos < (l-1)) {
pos++;
@@ -61,10 +56,12 @@
unsigned index = songname.find(".wav");
songname = songname.substr(0,index);
lcd.cls();
- lcd.printf(songname.c_str());
+ lcd.printf(songname.c_str()); //it clears screen and then sets the new index song in the lcd display
}
+//interrupt handler for pb2
void pb2_hit_callback (void)
{
+ //does opposite of pb1..moves the index down..from 2nd song to 1st song via changing the index number and then calling in the vector
int l = filenames.size();
if (pos > 0) {
pos--;
@@ -77,23 +74,27 @@
lcd.cls();
lcd.printf(songname.c_str());
}
-
+//interrupt handler for 3rd pushbutton
void pb3_hit_callback (void)
{
+ //this interrupt handler changes the play to pause mode or vice versa
+ //this is done using the boolean playing
if (playing == false) {
- playing = true;
- // old_playing = false;
+ playing = true;
} else if (playing == true) {
lcd.cls();
- playing = false;
- // old_playing = true;
+ playing = false;
string songname = filenames[pos];
unsigned index = songname.find(".wav");
songname = songname.substr(0,index);
lcd.printf(songname.c_str());
}
}
+//interrupt handler for pb4
void pb4_hit_callback (void){
+ // this pb changes the volume by lowering the volume until it reaches 0. then it resets to the max volume
+ // the volume range has been divided into 16 possible ranges. and hence, it toggles through those 16 values
+ // this only changes the variable vol, which is then used in the wave player file to actually adjust the volume
vol = (vol+1) % 16;
}
@@ -120,30 +121,27 @@
pb3.setSampleFrequency();
pb4.setSampleFrequency();
lcd.cls();
+ //detects whethere there is a SD card or not.. if not then it prints and informs the user
while(sdDetect ==0) {
lcd.locate(0,0);
lcd.printf("Insert SD Card");
wait(.5);
- }
- //sd.disk_initialize();
- lcd.cls();
- //SD_inserted();
- //lcd.locate(0,0);
- //lcd.printf("Insert SD Card");
+ }
+ lcd.cls();
wait(.5);
sd.disk_initialize();
read_file_names("/sd/Music");
while(1) {
//while pb3 is low, then we can start playing the song
- while(playing == true) {
+ while(playing == true) { //we have 2 while loops..one while loop makes sure the music player is always on, the other one is for the song
string songname = filenames[pos];
string a = "/sd/Music/";
- string fname = a + songname;
- FILE *wave_file;
+ string fname = a + songname; //retrieves the file name
+ FILE *wave_file;
lcd.locate(0,1);
lcd.printf("Now Playing");
- wave_file = fopen(fname.c_str(),"r");
- waver.play(wave_file);
+ wave_file = fopen(fname.c_str(),"r"); //opens the music file
+ waver.play(wave_file); //plays the music file
fclose(wave_file);
}
}
