mp3 player hw gatech

Dependencies:   PinDetect SDFileSystem TextLCD mbed wave_player

Committer:
zchen311
Date:
Sun Jul 14 20:31:43 2013 +0000
Revision:
0:00b023aa8f45
mp3 player done

Who changed what in which revision?

UserRevisionLine numberNew contents of line
zchen311 0:00b023aa8f45 1
zchen311 0:00b023aa8f45 2 #include "mbed.h"
zchen311 0:00b023aa8f45 3 #include "SDFileSystem.h"
zchen311 0:00b023aa8f45 4 #include "wave_player.h"
zchen311 0:00b023aa8f45 5 #include "TextLCD.h"
zchen311 0:00b023aa8f45 6 #include "PinDetect.h"
zchen311 0:00b023aa8f45 7 #include <string>
zchen311 0:00b023aa8f45 8
zchen311 0:00b023aa8f45 9 #include <vector>
zchen311 0:00b023aa8f45 10
zchen311 0:00b023aa8f45 11 SDFileSystem sd(p5, p6, p7, p8,p9, "sd"); //SD card
zchen311 0:00b023aa8f45 12 TextLCD myLCD(p22, p23, p24, p25, p26, p27); //TextLCD
zchen311 0:00b023aa8f45 13 AnalogOut DACout(p18);
zchen311 0:00b023aa8f45 14 //AnalogOut DACout(p20);
zchen311 0:00b023aa8f45 15
zchen311 0:00b023aa8f45 16 void read_file_names(char *);
zchen311 0:00b023aa8f45 17 void volumePressed();
zchen311 0:00b023aa8f45 18 wave_player waver(&DACout);
zchen311 0:00b023aa8f45 19 vector<string> filenames; //filenames are stored in a vector string
zchen311 0:00b023aa8f45 20 PinDetect pb1(p28); // Up button - scrolls up the list
zchen311 0:00b023aa8f45 21 PinDetect pb2(p29); // Down button - scrolls down the list
zchen311 0:00b023aa8f45 22 PinDetect pb3(p30); // Play/Pause- selects and plays or pauses the filename
zchen311 0:00b023aa8f45 23 PinDetect pb4(p15);
zchen311 0:00b023aa8f45 24 int volatile Scrollup=0; // heat to temp
zchen311 0:00b023aa8f45 25 int volatile Scrolldown=0;// cool to temp
zchen311 0:00b023aa8f45 26 int volatile total=0; // heat or cool mpde
zchen311 0:00b023aa8f45 27 bool select=false;
zchen311 0:00b023aa8f45 28 bool *selectptr=&select;
zchen311 0:00b023aa8f45 29
zchen311 0:00b023aa8f45 30
zchen311 0:00b023aa8f45 31 void pb1_hit_callback (void)
zchen311 0:00b023aa8f45 32 {
zchen311 0:00b023aa8f45 33 Scrollup++;
zchen311 0:00b023aa8f45 34
zchen311 0:00b023aa8f45 35
zchen311 0:00b023aa8f45 36 if(Scrollup >= total)
zchen311 0:00b023aa8f45 37 Scrollup=0;
zchen311 0:00b023aa8f45 38
zchen311 0:00b023aa8f45 39 }
zchen311 0:00b023aa8f45 40 // Callback routine is interrupt activated by a debounced pb2 hit
zchen311 0:00b023aa8f45 41 void pb2_hit_callback (void)
zchen311 0:00b023aa8f45 42 {
zchen311 0:00b023aa8f45 43
zchen311 0:00b023aa8f45 44 Scrollup--;
zchen311 0:00b023aa8f45 45 if(Scrollup < 0)
zchen311 0:00b023aa8f45 46 Scrollup = total-1;
zchen311 0:00b023aa8f45 47 }
zchen311 0:00b023aa8f45 48
zchen311 0:00b023aa8f45 49 // Callback routine is interrupt activated by a debounced pb3 hit
zchen311 0:00b023aa8f45 50
zchen311 0:00b023aa8f45 51 void pb3_hit_callback (void)
zchen311 0:00b023aa8f45 52 {
zchen311 0:00b023aa8f45 53 select=!select;
zchen311 0:00b023aa8f45 54 }
zchen311 0:00b023aa8f45 55 // Callback routine is interrupt activated by a debounced pb3 hit
zchen311 0:00b023aa8f45 56 void pb4_hit_callback (void)
zchen311 0:00b023aa8f45 57 {
zchen311 0:00b023aa8f45 58
zchen311 0:00b023aa8f45 59 volumePressed();
zchen311 0:00b023aa8f45 60
zchen311 0:00b023aa8f45 61
zchen311 0:00b023aa8f45 62
zchen311 0:00b023aa8f45 63 }
zchen311 0:00b023aa8f45 64 int main()
zchen311 0:00b023aa8f45 65 {
zchen311 0:00b023aa8f45 66 // Use internal pullups for the three pushbuttons
zchen311 0:00b023aa8f45 67 pb1.mode(PullUp);
zchen311 0:00b023aa8f45 68 pb2.mode(PullUp);
zchen311 0:00b023aa8f45 69 pb3.mode(PullUp);
zchen311 0:00b023aa8f45 70 pb4.mode(PullUp);
zchen311 0:00b023aa8f45 71 // Delay for initial pullup to take effect
zchen311 0:00b023aa8f45 72 wait(.01);
zchen311 0:00b023aa8f45 73 //Setup Interrupt callback functions for a pb hit
zchen311 0:00b023aa8f45 74 pb1.attach_deasserted(&pb1_hit_callback);
zchen311 0:00b023aa8f45 75 pb2.attach_deasserted(&pb2_hit_callback);
zchen311 0:00b023aa8f45 76 pb3.attach_deasserted(&pb3_hit_callback);
zchen311 0:00b023aa8f45 77 pb4.attach_deasserted(&pb4_hit_callback);
zchen311 0:00b023aa8f45 78 // Start sampling pb inputs using interrupts
zchen311 0:00b023aa8f45 79 pb1.setSampleFrequency();
zchen311 0:00b023aa8f45 80 pb2.setSampleFrequency();
zchen311 0:00b023aa8f45 81 pb3.setSampleFrequency();
zchen311 0:00b023aa8f45 82 pb4.setSampleFrequency();
zchen311 0:00b023aa8f45 83
zchen311 0:00b023aa8f45 84
zchen311 0:00b023aa8f45 85 // myLCD.printf("\n\n\nHello, wave world!\n");
zchen311 0:00b023aa8f45 86 // wave_file = fopen("/sd/myMusic", "r");
zchen311 0:00b023aa8f45 87 bool SDcard=0;
zchen311 0:00b023aa8f45 88 while(!SDcard)
zchen311 0:00b023aa8f45 89 { SDcard=sd.sd_inserted();
zchen311 0:00b023aa8f45 90 if( SDcard==false){
zchen311 0:00b023aa8f45 91 myLCD.locate(0,0);
zchen311 0:00b023aa8f45 92 myLCD.printf("Insert SDCARD");
zchen311 0:00b023aa8f45 93 }
zchen311 0:00b023aa8f45 94 else
zchen311 0:00b023aa8f45 95 myLCD.cls();
zchen311 0:00b023aa8f45 96 }
zchen311 0:00b023aa8f45 97 FILE *wave_file;
zchen311 0:00b023aa8f45 98 read_file_names("/sd/myMusic");
zchen311 0:00b023aa8f45 99 string directory;
zchen311 0:00b023aa8f45 100 directory="/sd/myMusic";
zchen311 0:00b023aa8f45 101 string song;
zchen311 0:00b023aa8f45 102
zchen311 0:00b023aa8f45 103
zchen311 0:00b023aa8f45 104 while(1) {
zchen311 0:00b023aa8f45 105 //int pos=size((*it).c_str())-4;
zchen311 0:00b023aa8f45 106 int index=0;
zchen311 0:00b023aa8f45 107 index=Scrollup;
zchen311 0:00b023aa8f45 108 int len=filenames[index].size();
zchen311 0:00b023aa8f45 109
zchen311 0:00b023aa8f45 110 myLCD.cls();
zchen311 0:00b023aa8f45 111 myLCD.locate(0,0);
zchen311 0:00b023aa8f45 112 myLCD.printf("%s",filenames[index].substr(0,len-4));
zchen311 0:00b023aa8f45 113
zchen311 0:00b023aa8f45 114 if(select==true) {
zchen311 0:00b023aa8f45 115 song = directory + "/" + filenames[index];
zchen311 0:00b023aa8f45 116 wave_file = fopen(song.c_str(), "r");
zchen311 0:00b023aa8f45 117 myLCD.locate(0,1);
zchen311 0:00b023aa8f45 118 myLCD.printf("%s","Now Playing");
zchen311 0:00b023aa8f45 119 waver.play(wave_file,selectptr);
zchen311 0:00b023aa8f45 120 select=false;
zchen311 0:00b023aa8f45 121 fclose(wave_file);
zchen311 0:00b023aa8f45 122
zchen311 0:00b023aa8f45 123 }
zchen311 0:00b023aa8f45 124 else
zchen311 0:00b023aa8f45 125 //myLCD.cls();
zchen311 0:00b023aa8f45 126 //myLCD.printf("%d",Scrollup);
zchen311 0:00b023aa8f45 127 //myLCD.printf("%s","now playing");
zchen311 0:00b023aa8f45 128 //waver.play(wave_file);
zchen311 0:00b023aa8f45 129 wait(0.3);
zchen311 0:00b023aa8f45 130 }
zchen311 0:00b023aa8f45 131
zchen311 0:00b023aa8f45 132
zchen311 0:00b023aa8f45 133
zchen311 0:00b023aa8f45 134
zchen311 0:00b023aa8f45 135
zchen311 0:00b023aa8f45 136 }
zchen311 0:00b023aa8f45 137
zchen311 0:00b023aa8f45 138
zchen311 0:00b023aa8f45 139 void read_file_names(char *dir)
zchen311 0:00b023aa8f45 140
zchen311 0:00b023aa8f45 141 {
zchen311 0:00b023aa8f45 142
zchen311 0:00b023aa8f45 143 DIR *dp;
zchen311 0:00b023aa8f45 144
zchen311 0:00b023aa8f45 145 struct dirent *dirp;
zchen311 0:00b023aa8f45 146
zchen311 0:00b023aa8f45 147 dp = opendir(dir);
zchen311 0:00b023aa8f45 148
zchen311 0:00b023aa8f45 149 //read all directory and file names in current directory into filename vector
zchen311 0:00b023aa8f45 150 while((dirp = readdir(dp)) != NULL) {
zchen311 0:00b023aa8f45 151 filenames.push_back(string(dirp->d_name));
zchen311 0:00b023aa8f45 152 total++;
zchen311 0:00b023aa8f45 153 }
zchen311 0:00b023aa8f45 154 }
zchen311 0:00b023aa8f45 155 void volumePressed(){
zchen311 0:00b023aa8f45 156
zchen311 0:00b023aa8f45 157
zchen311 0:00b023aa8f45 158
zchen311 0:00b023aa8f45 159 int *volumeMod=waver.getVolumeMod();
zchen311 0:00b023aa8f45 160
zchen311 0:00b023aa8f45 161 *volumeMod = *volumeMod + 1;
zchen311 0:00b023aa8f45 162
zchen311 0:00b023aa8f45 163 if (*volumeMod >= 16)
zchen311 0:00b023aa8f45 164
zchen311 0:00b023aa8f45 165 *volumeMod = 0;
zchen311 0:00b023aa8f45 166 }
zchen311 0:00b023aa8f45 167
zchen311 0:00b023aa8f45 168
zchen311 0:00b023aa8f45 169
zchen311 0:00b023aa8f45 170
zchen311 0:00b023aa8f45 171
zchen311 0:00b023aa8f45 172
zchen311 0:00b023aa8f45 173
zchen311 0:00b023aa8f45 174
zchen311 0:00b023aa8f45 175
zchen311 0:00b023aa8f45 176