Young Chang / Mbed 2 deprecated musicplayer

Dependencies:   4DGL-uLCD-SE PinDetect SDFileSystem Speaker TextLCD mbed wave_player

Fork of musicplayer by Sarthak Jaiswal

Committer:
ychang79
Date:
Mon Mar 14 23:31:18 2016 +0000
Revision:
2:84f06fb95343
Parent:
1:45d8f6557ff8
hello

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sarthakjaiswal 0:4b3056d3c684 1 #include "mbed.h"
ychang79 2:84f06fb95343 2 #include "EasyVR.h"
sarthakjaiswal 0:4b3056d3c684 3 #include "SDFileSystem.h"
sarthakjaiswal 0:4b3056d3c684 4 #include "wave_player.h"
ychang79 2:84f06fb95343 5 #include "uLCD_4DGL.h"
sarthakjaiswal 0:4b3056d3c684 6 #include "PinDetect.h"
sarthakjaiswal 0:4b3056d3c684 7 #include "Speaker.h"
sarthakjaiswal 0:4b3056d3c684 8 #include <vector>
sarthakjaiswal 0:4b3056d3c684 9 #include <string>
sarthakjaiswal 1:45d8f6557ff8 10
sarthakjaiswal 1:45d8f6557ff8 11 //Set up LEDs
sarthakjaiswal 0:4b3056d3c684 12 DigitalOut myled(LED1);
sarthakjaiswal 0:4b3056d3c684 13 DigitalOut myled2(LED2);
sarthakjaiswal 0:4b3056d3c684 14 DigitalOut myled3(LED3);
sarthakjaiswal 0:4b3056d3c684 15 DigitalOut myled4(LED4);
sarthakjaiswal 0:4b3056d3c684 16
ychang79 2:84f06fb95343 17 EasyVR VR(p28, p27); // tx, rx
ychang79 2:84f06fb95343 18 Serial pc(USBTX,USBRX);
ychang79 2:84f06fb95343 19
ychang79 2:84f06fb95343 20 PwmOut red(p21);
ychang79 2:84f06fb95343 21 PwmOut blue(p22);
ychang79 2:84f06fb95343 22 PwmOut green(p23);
ychang79 2:84f06fb95343 23
ychang79 2:84f06fb95343 24 PinDetect pb3(p26); // pb for pause
ychang79 2:84f06fb95343 25
sarthakjaiswal 0:4b3056d3c684 26 using namespace std;
sarthakjaiswal 0:4b3056d3c684 27
ychang79 2:84f06fb95343 28 SDFileSystem sd(p5, p6, p7, p15, "sd"); //SD card
ychang79 2:84f06fb95343 29 uLCD_4DGL lcd(p9, p10, p8);
ychang79 2:84f06fb95343 30 DigitalIn sdDetect(p17); // SD Card Detect
sarthakjaiswal 0:4b3056d3c684 31
ychang79 2:84f06fb95343 32 AnalogOut DACout(p18); //speaker
sarthakjaiswal 1:45d8f6557ff8 33 wave_player waver(&DACout); //set up wave player library
sarthakjaiswal 1:45d8f6557ff8 34 int pos = 0; // index of the song
ychang79 2:84f06fb95343 35 int vol = 0; // volume
sarthakjaiswal 1:45d8f6557ff8 36
ychang79 2:84f06fb95343 37 bool playing = false; //variable for pause
sarthakjaiswal 0:4b3056d3c684 38 vector<string> filenames; //filenames are stored in a vector string
sarthakjaiswal 1:45d8f6557ff8 39 void read_file_names(char *dir) // function that reads in file names from sd cards
sarthakjaiswal 0:4b3056d3c684 40 {
sarthakjaiswal 0:4b3056d3c684 41 DIR *dp;
sarthakjaiswal 0:4b3056d3c684 42 struct dirent *dirp;
sarthakjaiswal 0:4b3056d3c684 43 dp = opendir(dir);
sarthakjaiswal 0:4b3056d3c684 44 //read all directory and file names in current directory into filename vector
sarthakjaiswal 0:4b3056d3c684 45 while((dirp = readdir(dp)) != NULL) {
sarthakjaiswal 0:4b3056d3c684 46 filenames.push_back(string(dirp->d_name));
sarthakjaiswal 0:4b3056d3c684 47 }
sarthakjaiswal 0:4b3056d3c684 48 }
ychang79 2:84f06fb95343 49
ychang79 2:84f06fb95343 50 //incrementing music list
ychang79 2:84f06fb95343 51 void music_increment (void)
sarthakjaiswal 0:4b3056d3c684 52 {
ychang79 2:84f06fb95343 53 // counts number of songs in the sd card, then increments the index until it reaches the last one, then resets to 0
sarthakjaiswal 0:4b3056d3c684 54 int l = filenames.size();
sarthakjaiswal 0:4b3056d3c684 55 if (pos < (l-1)) {
sarthakjaiswal 0:4b3056d3c684 56 pos++;
sarthakjaiswal 0:4b3056d3c684 57 } else if (pos == (l-1)) {
sarthakjaiswal 0:4b3056d3c684 58 pos = 0;
sarthakjaiswal 0:4b3056d3c684 59 }
sarthakjaiswal 0:4b3056d3c684 60 string songname = filenames[pos];
sarthakjaiswal 0:4b3056d3c684 61 unsigned index = songname.find(".wav");
sarthakjaiswal 0:4b3056d3c684 62 songname = songname.substr(0,index);
sarthakjaiswal 0:4b3056d3c684 63 lcd.cls();
ychang79 2:84f06fb95343 64 lcd.printf(songname.c_str()); //clears screen then sets the new index song in the lcd display
sarthakjaiswal 0:4b3056d3c684 65 }
ychang79 2:84f06fb95343 66
ychang79 2:84f06fb95343 67
ychang79 2:84f06fb95343 68 //decrement music list
ychang79 2:84f06fb95343 69 void decrement_music (void)
sarthakjaiswal 0:4b3056d3c684 70 {
ychang79 2:84f06fb95343 71 //dmoves the index down..from 2nd song to 1st song via changing the index number
sarthakjaiswal 0:4b3056d3c684 72 int l = filenames.size();
sarthakjaiswal 0:4b3056d3c684 73 if (pos > 0) {
sarthakjaiswal 0:4b3056d3c684 74 pos--;
sarthakjaiswal 0:4b3056d3c684 75 } else if (pos == 0 ) {
sarthakjaiswal 0:4b3056d3c684 76 pos = l-1;
sarthakjaiswal 0:4b3056d3c684 77 }
sarthakjaiswal 0:4b3056d3c684 78 string songname = filenames[pos];
sarthakjaiswal 0:4b3056d3c684 79 unsigned index = songname.find(".wav");
sarthakjaiswal 0:4b3056d3c684 80 songname = songname.substr(0,index);
sarthakjaiswal 0:4b3056d3c684 81 lcd.cls();
sarthakjaiswal 0:4b3056d3c684 82 lcd.printf(songname.c_str());
sarthakjaiswal 0:4b3056d3c684 83 }
ychang79 2:84f06fb95343 84
ychang79 2:84f06fb95343 85
ychang79 2:84f06fb95343 86 //play-stop music
ychang79 2:84f06fb95343 87 void play_stop (void)
sarthakjaiswal 0:4b3056d3c684 88 {
sarthakjaiswal 1:45d8f6557ff8 89 //this interrupt handler changes the play to pause mode or vice versa
sarthakjaiswal 1:45d8f6557ff8 90 //this is done using the boolean playing
sarthakjaiswal 0:4b3056d3c684 91 if (playing == false) {
sarthakjaiswal 1:45d8f6557ff8 92 playing = true;
sarthakjaiswal 0:4b3056d3c684 93 } else if (playing == true) {
sarthakjaiswal 0:4b3056d3c684 94 lcd.cls();
sarthakjaiswal 1:45d8f6557ff8 95 playing = false;
sarthakjaiswal 0:4b3056d3c684 96 string songname = filenames[pos];
sarthakjaiswal 0:4b3056d3c684 97 unsigned index = songname.find(".wav");
sarthakjaiswal 0:4b3056d3c684 98 songname = songname.substr(0,index);
sarthakjaiswal 0:4b3056d3c684 99 lcd.printf(songname.c_str());
sarthakjaiswal 0:4b3056d3c684 100 }
sarthakjaiswal 0:4b3056d3c684 101 }
ychang79 2:84f06fb95343 102
ychang79 2:84f06fb95343 103 //high volume
ychang79 2:84f06fb95343 104 void vol_high (void){
ychang79 2:84f06fb95343 105 vol = (vol+2) % 16;
ychang79 2:84f06fb95343 106 }
ychang79 2:84f06fb95343 107
ychang79 2:84f06fb95343 108 //low volume
ychang79 2:84f06fb95343 109 void vol_low (void){
ychang79 2:84f06fb95343 110 vol = (vol-2) % 16;
ychang79 2:84f06fb95343 111 }
ychang79 2:84f06fb95343 112
ychang79 2:84f06fb95343 113 void ledDance()
ychang79 2:84f06fb95343 114 {
ychang79 2:84f06fb95343 115 for(int i=0;i<1000;i++)
ychang79 2:84f06fb95343 116 {
ychang79 2:84f06fb95343 117 red = !green;
ychang79 2:84f06fb95343 118 green = !blue;
ychang79 2:84f06fb95343 119 blue = !red;
ychang79 2:84f06fb95343 120 wait(0.001);
ychang79 2:84f06fb95343 121 }
ychang79 2:84f06fb95343 122 red = 1;
ychang79 2:84f06fb95343 123 green = 1;
ychang79 2:84f06fb95343 124 blue = 1;
ychang79 2:84f06fb95343 125
sarthakjaiswal 0:4b3056d3c684 126 }
sarthakjaiswal 0:4b3056d3c684 127
sarthakjaiswal 0:4b3056d3c684 128 int main()
sarthakjaiswal 0:4b3056d3c684 129 {
ychang79 2:84f06fb95343 130 char buffer=0;
ychang79 2:84f06fb95343 131
ychang79 2:84f06fb95343 132 if(VR.awake()) //wake up device - needs more work and a timeout
ychang79 2:84f06fb95343 133 {
ychang79 2:84f06fb95343 134 myled = 1;
ychang79 2:84f06fb95343 135 }
ychang79 2:84f06fb95343 136
sarthakjaiswal 0:4b3056d3c684 137 sdDetect.mode(PullUp);
sarthakjaiswal 0:4b3056d3c684 138 wait(.1);
sarthakjaiswal 0:4b3056d3c684 139 //wait after pulling up the sd card,
sarthakjaiswal 0:4b3056d3c684 140 // read file names into vector of strings
sarthakjaiswal 0:4b3056d3c684 141 pb3.mode(PullUp);
sarthakjaiswal 0:4b3056d3c684 142 // Delay for initial pullup to take effect
sarthakjaiswal 0:4b3056d3c684 143 wait(.01);
sarthakjaiswal 0:4b3056d3c684 144 // Setup Interrupt callback functions for a pb hit
ychang79 2:84f06fb95343 145 pb3.attach_deasserted(&play_stop);
sarthakjaiswal 0:4b3056d3c684 146 // Start sampling pb inputs using interrupts
sarthakjaiswal 0:4b3056d3c684 147 pb3.setSampleFrequency();
ychang79 2:84f06fb95343 148
sarthakjaiswal 1:45d8f6557ff8 149 lcd.cls();
sarthakjaiswal 0:4b3056d3c684 150 wait(.5);
sarthakjaiswal 0:4b3056d3c684 151 sd.disk_initialize();
sarthakjaiswal 0:4b3056d3c684 152 read_file_names("/sd/Music");
ychang79 2:84f06fb95343 153
ychang79 2:84f06fb95343 154 while (1)
ychang79 2:84f06fb95343 155 {
sarthakjaiswal 0:4b3056d3c684 156 //while pb3 is low, then we can start playing the song
sarthakjaiswal 1:45d8f6557ff8 157 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
sarthakjaiswal 0:4b3056d3c684 158 string songname = filenames[pos];
sarthakjaiswal 0:4b3056d3c684 159 string a = "/sd/Music/";
sarthakjaiswal 1:45d8f6557ff8 160 string fname = a + songname; //retrieves the file name
sarthakjaiswal 1:45d8f6557ff8 161 FILE *wave_file;
sarthakjaiswal 0:4b3056d3c684 162 lcd.locate(0,1);
sarthakjaiswal 0:4b3056d3c684 163 lcd.printf("Now Playing");
sarthakjaiswal 1:45d8f6557ff8 164 wave_file = fopen(fname.c_str(),"r"); //opens the music file
sarthakjaiswal 1:45d8f6557ff8 165 waver.play(wave_file); //plays the music file
sarthakjaiswal 0:4b3056d3c684 166 fclose(wave_file);
sarthakjaiswal 0:4b3056d3c684 167 }
ychang79 2:84f06fb95343 168
ychang79 2:84f06fb95343 169 VR.sendCmd(CMD_RECOG_SI); // Start Recognition
ychang79 2:84f06fb95343 170 VR.sendArg(2); // Use Wordset 2 command 0-5
ychang79 2:84f06fb95343 171
ychang79 2:84f06fb95343 172 buffer = VR.recv(); // Receive frequency in byte from easyVR
ychang79 2:84f06fb95343 173
ychang79 2:84f06fb95343 174 if(buffer == CMD_SLEEP) // If easyVR is sleeping, then activate
ychang79 2:84f06fb95343 175 {
ychang79 2:84f06fb95343 176 VR.sendCmd(' ');
ychang79 2:84f06fb95343 177 }
ychang79 2:84f06fb95343 178 else
ychang79 2:84f06fb95343 179 {
ychang79 2:84f06fb95343 180 VR.decrypt(&buffer); // If not sleeping, then continue received message
ychang79 2:84f06fb95343 181 pc.printf("%d\n",buffer);
ychang79 2:84f06fb95343 182 }
ychang79 2:84f06fb95343 183
ychang79 2:84f06fb95343 184 // if command is taken by easyVR, the LED4 will toggle
ychang79 2:84f06fb95343 185 if (buffer==1) {red = 0; green = 0; blue = 1;music_increment();} // right: move song
ychang79 2:84f06fb95343 186 if (buffer==0) {red = 1; green = 0; blue = 0;decrement_music();} // left: move song
ychang79 2:84f06fb95343 187 if (buffer==4) {myled4=!myled4;ledDance();play_stop();} // foward: play music
ychang79 2:84f06fb95343 188 if (buffer==2) {red = 1; green = 1; blue = 0;vol_high();} // up: volume high
ychang79 2:84f06fb95343 189 if (buffer==3) {red = 0; green = 1; blue = 1;vol_low();} // down: volum low
ychang79 2:84f06fb95343 190 wait(0.1);
sarthakjaiswal 0:4b3056d3c684 191 }
ychang79 2:84f06fb95343 192
ychang79 2:84f06fb95343 193
sarthakjaiswal 0:4b3056d3c684 194 }