Young Chang / Mbed 2 deprecated musicplayer

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

Fork of musicplayer by Sarthak Jaiswal

Revision:
2:84f06fb95343
Parent:
1:45d8f6557ff8
--- a/main.cpp	Mon Mar 17 18:48:13 2014 +0000
+++ b/main.cpp	Mon Mar 14 23:31:18 2016 +0000
@@ -1,7 +1,8 @@
 #include "mbed.h"
+#include "EasyVR.h"
 #include "SDFileSystem.h"
 #include "wave_player.h"
-#include "TextLCD.h"
+#include "uLCD_4DGL.h"
 #include "PinDetect.h"
 #include "Speaker.h"
 #include <vector>
@@ -13,24 +14,27 @@
 DigitalOut myled3(LED3);
 DigitalOut myled4(LED4);
 
+EasyVR VR(p28, p27);  // tx, rx
+Serial pc(USBTX,USBRX);
+
+PwmOut red(p21);
+PwmOut blue(p22);
+PwmOut green(p23);
+
+PinDetect pb3(p26); // pb for pause
+
 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); // Set up a pin for SD Card Detect
+SDFileSystem sd(p5, p6, p7, p15, "sd"); //SD card
+uLCD_4DGL lcd(p9, p10, p8);
+DigitalIn sdDetect(p17); // SD Card Detect
 
-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); //set up speaker
+AnalogOut DACout(p18); //speaker
 wave_player waver(&DACout); //set up wave player library
 int pos = 0; // index of the song
-int vol = 0; // volume controller
+int vol = 0; // volume
  
-bool playing = false; //variable for pause/play since we only have 1 pb for that
+bool playing = false; //variable for pause
 vector<string> filenames; //filenames are stored in a vector string
 void read_file_names(char *dir) // function that reads in file names from sd cards
 {
@@ -42,10 +46,11 @@
         filenames.push_back(string(dirp->d_name));
     }
 }
-//interrupt handler for pb1 
-void pb1_hit_callback (void)
+
+//incrementing music list
+void music_increment (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
+    // counts 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++;
@@ -56,12 +61,14 @@
     unsigned index = songname.find(".wav");
     songname = songname.substr(0,index);
     lcd.cls();
-    lcd.printf(songname.c_str()); //it clears screen and then sets the new index song in the lcd display
+    lcd.printf(songname.c_str()); //clears screen then sets the new index song in the lcd display
 }
-//interrupt handler for pb2
-void pb2_hit_callback (void)
+
+
+//decrement music list
+void decrement_music (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
+    //dmoves the index down..from 2nd song to 1st song via changing the index number
     int l = filenames.size();
     if (pos > 0) {
         pos--;
@@ -74,8 +81,10 @@
     lcd.cls();
     lcd.printf(songname.c_str());
 }
-//interrupt handler for 3rd pushbutton
-void pb3_hit_callback (void)
+
+
+//play-stop music
+void play_stop (void)
 {
     //this interrupt handler changes the play to pause mode or vice versa
     //this is done using the boolean playing
@@ -90,48 +99,60 @@
         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;
+
+//high volume
+void vol_high (void){
+    vol = (vol+2) % 16;
+}
+
+//low volume
+void vol_low (void){
+    vol = (vol-2) % 16;
+}
+
+void ledDance()
+{
+    for(int i=0;i<1000;i++)
+    {
+        red = !green;
+        green = !blue;
+        blue = !red;
+        wait(0.001);
+    }
+    red = 1;
+    green = 1;
+    blue = 1;
+    
 }
 
 int main()
 {
+    char buffer=0;
+
+    if(VR.awake())                //wake up device - needs more work and a timeout
+    {
+        myled = 1;
+    }
+        
     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);
+    pb3.attach_deasserted(&play_stop);
     // Start sampling pb inputs using interrupts
-    pb1.setSampleFrequency();
-    pb2.setSampleFrequency();
     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);
-    }    
+
     lcd.cls(); 
     wait(.5);
     sd.disk_initialize();
     read_file_names("/sd/Music");
-    while(1) {
+    
+    while (1)
+    {
         //while pb3 is low, then we can start playing the song
         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];
@@ -144,5 +165,30 @@
             waver.play(wave_file); //plays the music file
             fclose(wave_file);
         }
+        
+        VR.sendCmd(CMD_RECOG_SI); // Start Recognition
+        VR.sendArg(2);            // Use Wordset 2 command 0-5
+        
+        buffer = VR.recv();       // Receive frequency in byte from easyVR 
+        
+        if(buffer == CMD_SLEEP)   // If easyVR is sleeping, then activate
+        {
+            VR.sendCmd(' ');      
+        }
+        else
+        {
+            VR.decrypt(&buffer);  // If not sleeping, then continue received message
+            pc.printf("%d\n",buffer);
+        }
+        
+        // if command is taken by easyVR, the LED4 will toggle
+        if (buffer==1) {red = 0; green = 0; blue = 1;music_increment();}   // right: move song
+        if (buffer==0) {red = 1; green = 0; blue = 0;decrement_music();}   // left: move song
+        if (buffer==4) {myled4=!myled4;ledDance();play_stop();}      // foward: play music
+        if (buffer==2) {red = 1; green = 1; blue = 0;vol_high();}   // up: volume high
+        if (buffer==3) {red = 0; green = 1; blue = 1;vol_low();}   // down: volum low
+        wait(0.1);
     }
+
+
 }