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
main.cpp
- Committer:
- sarthakjaiswal
- Date:
- 2014-03-13
- Revision:
- 0:4b3056d3c684
- Child:
- 1:45d8f6557ff8
File content as of revision 0:4b3056d3c684:
#include "mbed.h"
#include "SDFileSystem.h"
#include "wave_player.h"
#include "TextLCD.h"
#include "PinDetect.h"
#include "Speaker.h"
#include <vector>
#include <string>
DigitalOut myled(LED1);
DigitalOut myled2(LED2);
DigitalOut myled3(LED3);
DigitalOut myled4(LED4);
using namespace std;
SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
TextLCD lcd(p9, p10, p11, p12, p13, p14); // rs, e, d4-d7
DigitalIn sdDetect(p17);
PinDetect pb1(p28); // up shift
PinDetect pb2(p29); // down shift
PinDetect pb3(p30); // pause
PinDetect pb4(p27); // 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;
vector<string> filenames; //filenames are stored in a vector string
void read_file_names(char *dir)
{
DIR *dp;
struct dirent *dirp;
dp = opendir(dir);
//read all directory and file names in current directory into filename vector
while((dirp = readdir(dp)) != NULL) {
filenames.push_back(string(dirp->d_name));
}
}
void pb1_hit_callback (void)
{
int l = filenames.size();
if (pos < (l-1)) {
pos++;
} else if (pos == (l-1)) {
pos = 0;
}
string songname = filenames[pos];
unsigned index = songname.find(".wav");
songname = songname.substr(0,index);
lcd.cls();
lcd.printf(songname.c_str());
}
void pb2_hit_callback (void)
{
int l = filenames.size();
if (pos > 0) {
pos--;
} else if (pos == 0 ) {
pos = l-1;
}
string songname = filenames[pos];
unsigned index = songname.find(".wav");
songname = songname.substr(0,index);
lcd.cls();
lcd.printf(songname.c_str());
}
void pb3_hit_callback (void)
{
if (playing == false) {
playing = true;
// old_playing = false;
} else if (playing == true) {
lcd.cls();
playing = false;
// old_playing = true;
string songname = filenames[pos];
unsigned index = songname.find(".wav");
songname = songname.substr(0,index);
lcd.printf(songname.c_str());
}
}
void pb4_hit_callback (void){
vol = (vol+1) % 16;
}
int main()
{
sdDetect.mode(PullUp);
wait(.1);
//wait after pulling up the sd card,
// read file names into vector of strings
pb1.mode(PullUp);
pb2.mode(PullUp);
pb3.mode(PullUp);
pb4.mode(PullUp);
// Delay for initial pullup to take effect
wait(.01);
// Setup Interrupt callback functions for a pb hit
pb1.attach_deasserted(&pb1_hit_callback);
pb2.attach_deasserted(&pb2_hit_callback);
pb3.attach_deasserted(&pb3_hit_callback);
pb4.attach_deasserted(&pb4_hit_callback);
// Start sampling pb inputs using interrupts
pb1.setSampleFrequency();
pb2.setSampleFrequency();
pb3.setSampleFrequency();
pb4.setSampleFrequency();
lcd.cls();
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");
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) {
string songname = filenames[pos];
string a = "/sd/Music/";
string fname = a + songname;
FILE *wave_file;
lcd.locate(0,1);
lcd.printf("Now Playing");
wave_file = fopen(fname.c_str(),"r");
waver.play(wave_file);
fclose(wave_file);
}
}
}
