Final code

Dependencies:   C12832 PinDetect USBHost mbed wave_player

Fork of MusicPlayer_ThaoLeMinh by Yan Long

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);
        }
    }
}