sd

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

Fork of WavePlayer_HelloWorld by jim hamblen

Committer:
jmar7
Date:
Wed Mar 26 18:21:02 2014 +0000
Revision:
2:6e4f4a49eebe
Parent:
1:5b8e223e983d
f

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jmar7 2:6e4f4a49eebe 1 //Jason Mar
4180_1 1:5b8e223e983d 2 #include "mbed.h"
4180_1 1:5b8e223e983d 3 #include "SDFileSystem.h"
4180_1 1:5b8e223e983d 4 #include "wave_player.h"
jmar7 2:6e4f4a49eebe 5 #include "uLCD_4DGL.h"
jmar7 2:6e4f4a49eebe 6 #include "PinDetect.h"
jmar7 2:6e4f4a49eebe 7 #include <string>
jmar7 2:6e4f4a49eebe 8 #include <vector>
4180_1 1:5b8e223e983d 9
jmar7 2:6e4f4a49eebe 10 //initialize all pins
jmar7 2:6e4f4a49eebe 11 SDFileSystem sd(p5, p6, p7, p8, p9, "sd"); //SD card
jmar7 2:6e4f4a49eebe 12 uLCD_4DGL uLCD(p28, p27, p29);
jmar7 2:6e4f4a49eebe 13 PinDetect pb1(p24);
jmar7 2:6e4f4a49eebe 14 PinDetect pb2(p23);
jmar7 2:6e4f4a49eebe 15 PinDetect pb3(p22);
jmar7 2:6e4f4a49eebe 16 PinDetect pb4(p21);
4180_1 1:5b8e223e983d 17
4180_1 1:5b8e223e983d 18 AnalogOut DACout(p18);
4180_1 1:5b8e223e983d 19
4180_1 1:5b8e223e983d 20 wave_player waver(&DACout);
jmar7 2:6e4f4a49eebe 21 //unused pins
jmar7 2:6e4f4a49eebe 22 DigitalOut P10(p10);
jmar7 2:6e4f4a49eebe 23 DigitalOut P11(p11);
jmar7 2:6e4f4a49eebe 24 DigitalOut P12(p12);
jmar7 2:6e4f4a49eebe 25 DigitalOut P13(p13);
jmar7 2:6e4f4a49eebe 26 DigitalOut P14(p14);
jmar7 2:6e4f4a49eebe 27 DigitalOut P15(p15);
jmar7 2:6e4f4a49eebe 28 DigitalOut P16(p16);
jmar7 2:6e4f4a49eebe 29 DigitalOut P17(p17);
jmar7 2:6e4f4a49eebe 30 DigitalOut P19(p19);
jmar7 2:6e4f4a49eebe 31 DigitalOut P20(p20);
jmar7 2:6e4f4a49eebe 32
jmar7 2:6e4f4a49eebe 33 vector<string> filenames; //filenames are stored in a vector string
jmar7 2:6e4f4a49eebe 34 int volatile selection = 0;
jmar7 2:6e4f4a49eebe 35 int volatile totalSongs = 0;
jmar7 2:6e4f4a49eebe 36 bool play = false;
jmar7 2:6e4f4a49eebe 37 bool *playptr = &play;
jmar7 2:6e4f4a49eebe 38
jmar7 2:6e4f4a49eebe 39 //implement pushbuttons
jmar7 2:6e4f4a49eebe 40 void pb1_hit_callback (void)
jmar7 2:6e4f4a49eebe 41 {
jmar7 2:6e4f4a49eebe 42 play = !play;
jmar7 2:6e4f4a49eebe 43 }
jmar7 2:6e4f4a49eebe 44 void pb2_hit_callback (void)
jmar7 2:6e4f4a49eebe 45 {
jmar7 2:6e4f4a49eebe 46 selection++;
jmar7 2:6e4f4a49eebe 47 if(selection >= totalSongs)
jmar7 2:6e4f4a49eebe 48 selection = 0;
jmar7 2:6e4f4a49eebe 49 }
jmar7 2:6e4f4a49eebe 50 void pb3_hit_callback (void)
jmar7 2:6e4f4a49eebe 51 {
jmar7 2:6e4f4a49eebe 52 selection--;
jmar7 2:6e4f4a49eebe 53 if(selection < 0)
jmar7 2:6e4f4a49eebe 54 selection = totalSongs - 1;
jmar7 2:6e4f4a49eebe 55 }
jmar7 2:6e4f4a49eebe 56 void pb4_hit_callback (void)
jmar7 2:6e4f4a49eebe 57 {
jmar7 2:6e4f4a49eebe 58 int *vol = waver.getVolume();
jmar7 2:6e4f4a49eebe 59 *vol = *vol + 1;
jmar7 2:6e4f4a49eebe 60 if (*vol >= 16){
jmar7 2:6e4f4a49eebe 61 *vol = 0;
jmar7 2:6e4f4a49eebe 62 }
jmar7 2:6e4f4a49eebe 63 }
jmar7 2:6e4f4a49eebe 64 //reads the file names
jmar7 2:6e4f4a49eebe 65 void read_file_names(char *dir)
jmar7 2:6e4f4a49eebe 66 {
jmar7 2:6e4f4a49eebe 67 DIR *dp;
jmar7 2:6e4f4a49eebe 68 struct dirent *dirp;
jmar7 2:6e4f4a49eebe 69 dp = opendir(dir);
jmar7 2:6e4f4a49eebe 70 //read all directory and file names in current directory into filename vector
jmar7 2:6e4f4a49eebe 71 while((dirp = readdir(dp)) != NULL) {
jmar7 2:6e4f4a49eebe 72 filenames.push_back(string(dirp->d_name));
jmar7 2:6e4f4a49eebe 73 totalSongs++;
jmar7 2:6e4f4a49eebe 74 }
jmar7 2:6e4f4a49eebe 75 closedir(dp);
jmar7 2:6e4f4a49eebe 76 }
jmar7 2:6e4f4a49eebe 77
4180_1 1:5b8e223e983d 78
4180_1 1:5b8e223e983d 79 int main()
4180_1 1:5b8e223e983d 80 {
jmar7 2:6e4f4a49eebe 81 //initialize the buttons
jmar7 2:6e4f4a49eebe 82 pb1.mode(PullUp);
jmar7 2:6e4f4a49eebe 83 pb2.mode(PullUp);
jmar7 2:6e4f4a49eebe 84 pb3.mode(PullUp);
jmar7 2:6e4f4a49eebe 85 pb4.mode(PullUp);
jmar7 2:6e4f4a49eebe 86
jmar7 2:6e4f4a49eebe 87 // Delay for initial pullup to take effect
jmar7 2:6e4f4a49eebe 88 wait(.01);
jmar7 2:6e4f4a49eebe 89
jmar7 2:6e4f4a49eebe 90 // Setup Interrupt callback functions for a pb hit
jmar7 2:6e4f4a49eebe 91 pb1.attach_deasserted(&pb1_hit_callback);
jmar7 2:6e4f4a49eebe 92 pb2.attach_deasserted(&pb2_hit_callback);
jmar7 2:6e4f4a49eebe 93 pb3.attach_deasserted(&pb3_hit_callback);
jmar7 2:6e4f4a49eebe 94 pb4.attach_deasserted(&pb4_hit_callback);
jmar7 2:6e4f4a49eebe 95
jmar7 2:6e4f4a49eebe 96 // Start sampling pb inputs using interrupts
jmar7 2:6e4f4a49eebe 97 pb1.setSampleFrequency();
jmar7 2:6e4f4a49eebe 98 pb2.setSampleFrequency();
jmar7 2:6e4f4a49eebe 99 pb3.setSampleFrequency();
jmar7 2:6e4f4a49eebe 100 pb4.setSampleFrequency();
jmar7 2:6e4f4a49eebe 101
jmar7 2:6e4f4a49eebe 102 //check for SD card insertion, if no sd card print Insert SD Card
jmar7 2:6e4f4a49eebe 103 bool SDinsert = false;
jmar7 2:6e4f4a49eebe 104 while(SDinsert == false){
jmar7 2:6e4f4a49eebe 105 SDinsert = sd.sd_inserted();
jmar7 2:6e4f4a49eebe 106 if(SDinsert == false){
jmar7 2:6e4f4a49eebe 107 uLCD.locate(0,1);
jmar7 2:6e4f4a49eebe 108 uLCD.printf("Insert SD Card");
jmar7 2:6e4f4a49eebe 109 }
jmar7 2:6e4f4a49eebe 110 else {
jmar7 2:6e4f4a49eebe 111 sd.disk_initialize();
jmar7 2:6e4f4a49eebe 112 uLCD.cls();
jmar7 2:6e4f4a49eebe 113 }
jmar7 2:6e4f4a49eebe 114 }
jmar7 2:6e4f4a49eebe 115 FILE *file;
jmar7 2:6e4f4a49eebe 116 read_file_names("/sd/myMusic");
jmar7 2:6e4f4a49eebe 117
jmar7 2:6e4f4a49eebe 118
jmar7 2:6e4f4a49eebe 119 string song;
jmar7 2:6e4f4a49eebe 120 string dir;
jmar7 2:6e4f4a49eebe 121 int c = 0;
jmar7 2:6e4f4a49eebe 122 int prevfile = -1;
jmar7 2:6e4f4a49eebe 123 while(1) {
jmar7 2:6e4f4a49eebe 124 //prints the directory of songs and does not refresh until a pushbutton changes the selection
jmar7 2:6e4f4a49eebe 125 if(c == 0 || selection != prevfile){
jmar7 2:6e4f4a49eebe 126 prevfile = selection;
jmar7 2:6e4f4a49eebe 127 uLCD.cls();
jmar7 2:6e4f4a49eebe 128 uLCD.locate(0,0);
jmar7 2:6e4f4a49eebe 129 //lists the directory songs in white and the selected song in red
jmar7 2:6e4f4a49eebe 130 for(int i=0;i<totalSongs;i++){
jmar7 2:6e4f4a49eebe 131 if(i != selection){
jmar7 2:6e4f4a49eebe 132 int l=filenames[i].size();
jmar7 2:6e4f4a49eebe 133 uLCD.locate(0,i);
jmar7 2:6e4f4a49eebe 134 uLCD.color(WHITE);
jmar7 2:6e4f4a49eebe 135 //substrings the .wav out of the print
jmar7 2:6e4f4a49eebe 136 uLCD.printf("%s",filenames[i].substr(0,l-4));
jmar7 2:6e4f4a49eebe 137 }
jmar7 2:6e4f4a49eebe 138 else {
jmar7 2:6e4f4a49eebe 139 int l=filenames[selection].size();
jmar7 2:6e4f4a49eebe 140 uLCD.locate(0,selection);
jmar7 2:6e4f4a49eebe 141 uLCD.color(RED);
jmar7 2:6e4f4a49eebe 142 uLCD.printf("%s",filenames[selection].substr(0,l-4));
jmar7 2:6e4f4a49eebe 143 }
jmar7 2:6e4f4a49eebe 144 }
jmar7 2:6e4f4a49eebe 145 }
jmar7 2:6e4f4a49eebe 146 c++;
jmar7 2:6e4f4a49eebe 147
jmar7 2:6e4f4a49eebe 148 if(play==true) {
jmar7 2:6e4f4a49eebe 149 //concatenates directory with songname
jmar7 2:6e4f4a49eebe 150 dir="/sd/myMusic";
jmar7 2:6e4f4a49eebe 151 song = dir + "/" + filenames[selection];
jmar7 2:6e4f4a49eebe 152 //reads the wav file
jmar7 2:6e4f4a49eebe 153 file = fopen(song.c_str(), "r");
jmar7 2:6e4f4a49eebe 154 //clears the screen to print song playiing
jmar7 2:6e4f4a49eebe 155 uLCD.cls();
jmar7 2:6e4f4a49eebe 156 int l=filenames[selection].size();
jmar7 2:6e4f4a49eebe 157 uLCD.locate(0,0);
jmar7 2:6e4f4a49eebe 158 uLCD.printf("%s",filenames[selection].substr(0,l-4));
jmar7 2:6e4f4a49eebe 159 uLCD.locate(0,1);
jmar7 2:6e4f4a49eebe 160 uLCD.printf("%s","Now Playing");
jmar7 2:6e4f4a49eebe 161 waver.play(file,playptr);
jmar7 2:6e4f4a49eebe 162 play=false;
jmar7 2:6e4f4a49eebe 163 fclose(file);
jmar7 2:6e4f4a49eebe 164 uLCD.cls();
jmar7 2:6e4f4a49eebe 165 //reprint the menu as it was before the song started
jmar7 2:6e4f4a49eebe 166 for(int i=0;i<totalSongs;i++){
jmar7 2:6e4f4a49eebe 167 if(i != selection){
jmar7 2:6e4f4a49eebe 168 int l=filenames[i].size();
jmar7 2:6e4f4a49eebe 169 uLCD.locate(0,i);
jmar7 2:6e4f4a49eebe 170 uLCD.color(WHITE);
jmar7 2:6e4f4a49eebe 171 uLCD.printf("%s",filenames[i].substr(0,l-4));
jmar7 2:6e4f4a49eebe 172 }
jmar7 2:6e4f4a49eebe 173 else {
jmar7 2:6e4f4a49eebe 174 int l=filenames[selection].size();
jmar7 2:6e4f4a49eebe 175 uLCD.locate(0,selection);
jmar7 2:6e4f4a49eebe 176 uLCD.color(RED);
jmar7 2:6e4f4a49eebe 177 uLCD.printf("%s",filenames[selection].substr(0,l-4));
jmar7 2:6e4f4a49eebe 178 }
jmar7 2:6e4f4a49eebe 179 }
jmar7 2:6e4f4a49eebe 180 }
jmar7 2:6e4f4a49eebe 181 else
jmar7 2:6e4f4a49eebe 182 wait(0.3);
jmar7 2:6e4f4a49eebe 183 }
4180_1 1:5b8e223e983d 184 }