Jostein Baustad / Mbed 2 deprecated WavPlayerUSB

Dependencies:   WavPlayer mbed C12832 MSCFileSystem WavPlayerSD

Revision:
2:b090afa8d3b9
Parent:
1:45d8f6557ff8
Child:
3:eb77b82ce461
--- a/main.cpp	Mon Mar 17 18:48:13 2014 +0000
+++ b/main.cpp	Sat Mar 30 16:25:41 2019 +0000
@@ -1,37 +1,87 @@
 #include "mbed.h"
-#include "SDFileSystem.h"
+#include "string.h"
+#include "stdio.h"
+#include "math.h"
+#include "C12832.h"
 #include "wave_player.h"
-#include "TextLCD.h"
-#include "PinDetect.h"
-#include "Speaker.h"
-#include <vector>
+#include "SDFileSystem.h"
 #include <string>
-
-//Set up LEDs
-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); // Set up a pin for SD Card Detect
+//Communication\interfaces
+Serial pc(USBTX,USBRX); //USB serial
+C12832 lcd(p5, p7, p6, p8, p11); //LCD
+SDFileSystem sd(p5, p6, p7, p8, "sd"); //SDCard
+DigitalIn sdDetect(p17); //CardDetect
 
-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
+//in- and outputs
+DigitalIn PauseBtn(p21);
+DigitalIn StopBtn(p22);
+
+//joystick
+BusIn joy(p15,p12,p13,p16);
+DigitalIn joyBtn(p14);
+
+//DAC output
+AnalogOut DACout(p18);
+wave_player waver(&DACout); //set up DAC to use wave player library
 
 
-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
+//timer
+Timer dur;
+
+//func
+void read_file_names(char *dir); //SDCard read file names
+void menu();
+void PlaySong(int m);
+void PauseSong();
+void StopSong();
+
+//variables
+int m = 1; //index of choosen songs
+int i = 0; //index of files from folder
+int Paused = 0; //Is the song paused?
+int Stopped = 0; //Is the song stopped?
+char* songs[5];
+
+int main()
+{
+    while(sdDetect == 0) {
+        lcd.locate(0,0);
+        lcd.printf("Insert SD Card!!");
+        wait(0.5);
+    }
+    menu();
+}
+
+void menu()
+{
+    lcd.cls();
+    sd.disk_initialize();
+    read_file_names("/sd/Music");
+    while(1) {
+        lcd.locate(0,0);
+        lcd.printf("Please select a song");
+        if(joy == 1) {
+            m++;
+            if(m == 5) {
+                m = 0;
+            }
+        } else if(joy == 2) {
+            m--;
+            if(m == -1) {
+                m = 4;
+            }
+        }
+        lcd.locate(0,15);
+        lcd.printf("%s", (songs[m]));
+        if(joyBtn == 1) {
+            PlaySong(m);
+        }
+        wait(0.1);
+    }
+}
+
 void read_file_names(char *dir) // function that reads in file names from sd cards
 {
     DIR *dp;
@@ -39,110 +89,60 @@
     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));
+        songs[i] = dirp->d_name;
+        i++;
     }
 }
-//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++;
-    } 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()); //it clears screen and then sets the new index song in the lcd display
-}
-//interrupt handler for pb2
-void pb2_hit_callback (void)
+
+void PlaySong(int m)
 {
-    //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--;
-    } else if (pos == 0 ) {
-        pos = l-1;
-    }
-    string songname = filenames[pos];
-    unsigned index = songname.find(".wav");
-    songname = songname.substr(0,index);
+    string songname = songs[m];
+    string a = "/sd/Music/";
+    string fname = a + songname; //retrieves the file name
+    FILE *wave_file;
+    dur.start();
     lcd.cls();
-    lcd.printf(songname.c_str());
+    lcd.locate(0,0);
+    lcd.printf("Now playing");
+    wave_file = fopen(fname.c_str(),"r"); //opens the music file
+    waver.play(wave_file); //plays the music file
+    lcd.locate(0,10);
+    lcd.printf("%s", (songs[m]));
+    while(Stopped == 0) {
+        if(StopBtn == 1) {
+            StopSong();
+        }
+        if(PauseBtn == 1) {
+            PauseSong();
+        }
+        lcd.locate(0,20);
+        lcd.printf("%2.f s", dur.read());
+    }
+    fclose(wave_file);
+    menu();
 }
-//interrupt handler for 3rd pushbutton
-void pb3_hit_callback (void)
+
+void PauseSong()
 {
-    //this interrupt handler changes the play to pause mode or vice versa
-    //this is done using the boolean playing
-    if (playing == false) {
-        playing = true; 
-    } else if (playing == true) {
-        lcd.cls();
-        playing = false; 
-        string songname = filenames[pos];
+    if(Paused == 0) {
+        string songname = songs[m];
         unsigned index = songname.find(".wav");
         songname = songname.substr(0,index);
         lcd.printf(songname.c_str());
+        dur.stop();
+        Paused = 1;
+    } else {
+        Paused = 0;
     }
 }
-//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;
-}
 
-int main()
+void StopSong()
 {
-    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();
-    //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 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];
-            string a = "/sd/Music/";
-            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"); //opens the music file
-            waver.play(wave_file); //plays the music file
-            fclose(wave_file);
-        }
-    }
+    dur.reset();
+    Stopped = 1;
 }
+
+
+
+