![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
MBED Bluetooth Controlled Party Bus
Dependencies: 4DGL-uLCD-SE Motor PinDetect SDFileSystem mbed wave_player
Revision 0:36e81c32e784, committed 2016-03-14
- Comitter:
- jtgt21
- Date:
- Mon Mar 14 17:18:53 2016 +0000
- Commit message:
- commited
Changed in this revision
diff -r 000000000000 -r 36e81c32e784 4DGL-uLCD-SE.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/4DGL-uLCD-SE.lib Mon Mar 14 17:18:53 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/jlind6/code/4DGL-uLCD-SE/#d901d4d206e6
diff -r 000000000000 -r 36e81c32e784 Motor.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Motor.lib Mon Mar 14 17:18:53 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/simon/code/Motor/#f265e441bcd9
diff -r 000000000000 -r 36e81c32e784 PinDetect.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PinDetect.lib Mon Mar 14 17:18:53 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/AjK/code/PinDetect/#cb3afc45028b
diff -r 000000000000 -r 36e81c32e784 SDFileSystem.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SDFileSystem.lib Mon Mar 14 17:18:53 2016 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/users/jtgt21/code/SDFileSystem/#9b2701146950
diff -r 000000000000 -r 36e81c32e784 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Mar 14 17:18:53 2016 +0000 @@ -0,0 +1,285 @@ +#include "mbed.h" +#include "PinDetect.h" +#include "SDFileSystem.h" +#include "uLCD_4DGL.h" +#include "wave_player.h" +#include "Motor.h" +#include <vector> +#include <string> +//SDfile +SDFileSystem sd(p5, p6, p7, p8, p9, "sd"); //SD card +//Pushbuttons +PinDetect pbStop(p17); +//LEDS and Bluetooth Serial Pins +BusOut myled(LED1,LED2,LED3,LED4); +Serial blue(p13,p14); //tx, rx + +//Motor +Motor m(p21, p22, p23); // pwm, fwd, rev +Motor m2(p26, p25, p24); + + +//uLCD +uLCD_4DGL uLCD(p28, p27, p29); +//Wave Player +AnalogOut DACout(p18); +wave_player waver(&DACout); +int pbPlays = 1; +//Create Music State +enum musicStateType {START, WAIT, WAIT2, LIST,REVERSE, NEXT, PLAY}; +FILE *wave_file; +musicStateType musicState = START; +//Callback Functions +void pbUp_hit_callback (void) +{ + switch (musicState) + { + case WAIT: + musicState = LIST; + break; + case WAIT2: + musicState = REVERSE; + break; + } +} + +void pbDown_hit_callback (void) +{ + switch (musicState) + { + case WAIT: + musicState = LIST; + break; + case WAIT2: + musicState = NEXT; + break; + } +} + +void pbPlay_hit_callback (void) +{ + switch (musicState) + { + case WAIT: + musicState = LIST; + break; + case WAIT2: + musicState = PLAY; + break; + case PLAY: + pbPlays = 0; + break; + } +} + +vector<string> filenames; //filenames are stored in a vector string +void read_file_names(char *dir) +{ +DIR *dp; +struct dirent *dirp; +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)); + } + } + +int main() +{ + //Setup for song stop pushbutton + pbStop.mode(PullUp); + wait(0.1); + pbStop.attach_deasserted(&pbPlay_hit_callback); + pbStop.setSampleFrequency(); + //intialize uLCD + uLCD.display_control(PORTRAIT); + uLCD.cls(); + uLCD.baudrate(BAUD_3000000); + uLCD.background_color(BLACK); + //initialize variables + char bnum=0; + char bhit=0; + while(sd.SD_inserted() == false) { + uLCD.cls(); + uLCD.printf("Insert SD Card!\n"); + wait(0.5); + } + int i = 0; + vector<string>::iterator it=filenames.begin(); + vector<string>::iterator ittemp=filenames.begin(); + //While loop for music state. state is initialized to Start + //and waits until a button is pressed to go to the music LIST state. + while (1) + { + switch (musicState) + { + case START: + { + read_file_names("/sd/myMusic"); + it = filenames.begin(); + ittemp = filenames.begin(); + uLCD.cls(); + uLCD.locate(0,0); + uLCD.printf("MBED Party Bus!!!\n\n"); + uLCD.printf("Press Key to Start"); + musicState = WAIT; + break; + } + case LIST: + { + pbPlays = 1; + // read file names into vector of strings + uLCD.cls(); + // print filename strings from vector using an iterator + for(it = ittemp;it < filenames.end(); it++) + { + uLCD.printf("%s\n\r", (*it).substr(0, (*it).length()-4).c_str()); + } + } + musicState = WAIT2; + break; + //Case for next song in list + case NEXT: + { + if(ittemp == filenames.end()) + {ittemp = filenames.begin(); + musicState = LIST;} + else + {ittemp = ittemp++; + musicState = LIST;} + break; + } + //Case for previous song in list + case REVERSE: + { + if(ittemp == filenames.begin()) + {ittemp = filenames.begin(); + musicState = LIST; + } + else + {ittemp = ittemp--; + musicState = LIST;} + break; + } + //Case to play selected song + case PLAY: + { + uLCD.cls(); + uLCD.printf("%s\n\r", (*ittemp).substr(0, (*ittemp).length()-4).c_str()); + uLCD.printf("Now Playing"); + string filename = "/sd/myMusic/"; + filename = filename + (*ittemp); + //If statements below deteremine which song is playing and what album artwork to show on uLCD screen + if(filename == "/sd/myMusic/badboys2.wav"){ + uLCD.media_init(); + uLCD.set_sector_address(0x0000, 0x0000); + uLCD.display_image(0,0); + } + if(filename == "/sd/myMusic/Childish_3005.wav"){ + uLCD.media_init(); + uLCD.set_sector_address(0x0000, 0x0041); + uLCD.display_image(0,0); + } + if(filename == "/sd/myMusic/Drake.wav"){ + uLCD.media_init(); + uLCD.set_sector_address(0x0000, 0x0082); + uLCD.display_image(0,0); + } + if(filename == "/sd/myMusic/Chase.wav"){ + uLCD.media_init(); + uLCD.set_sector_address(0x0000, 0x00C3); + uLCD.display_image(0,0); + } + if(filename == "/sd/myMusic/Kanye.wav"){ + uLCD.media_init(); + uLCD.set_sector_address(0x0000, 0x0104); + uLCD.display_image(0,0); + } + //Start up motor for robot. Left motor speed is faster because of weight on shadowbot(Can be changed). + m.speed(-0.4); + m2.speed(-0.55); + wave_file=fopen(filename.c_str(), "r"); + //Play song + waver.play(wave_file, pbPlays); + fclose(wave_file); + //Turn off robot motors + m.speed(0); + m2.speed(0); + //Return to music LIST + musicState = LIST; + break; + } + case WAIT: + i++; + //Commands for intial wait. The bluetooth commands for up, down, and right all change the music state to the LIST at startup + if (blue.getc()=='!') { + if (blue.getc()=='B') { //button data packet + bnum = blue.getc(); //button number + bhit = blue.getc(); //1=hit, 0=release + if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK? + myled = bnum - '0'; //current button number will appear on LEDs + switch (bnum) { + case '5': //button 5 up arrow + if (bhit=='1') { + //add hit code here + } else { + pbUp_hit_callback(); + } + break; + case '6': //button 6 down arrow + if (bhit=='1') { + //add hit code here + } else { + pbDown_hit_callback();//add release code here + } + break; + case '8': //button 8 right arrow + if (bhit=='1') { + //add hit code here + } else { + pbPlay_hit_callback();//add release code here + } + break; + } + } + }} + break; + case WAIT2: + if (blue.getc()=='!') { + //Second wait function moves up and down in list with bluetooth commands. Right ble button plays the song here + if (blue.getc()=='B') { //button data packet + bnum = blue.getc(); //button number + bhit = blue.getc(); //1=hit, 0=release + if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK? + myled = bnum - '0'; //current button number will appear on LEDs + switch (bnum) { + case '5': //button 5 up arrow + if (bhit=='1') { + //add hit code here + } else { + pbUp_hit_callback(); + } + break; + case '6': //button 6 down arrow + if (bhit=='1') { + //add hit code here + } else { + pbDown_hit_callback();//add release code here + } + break; + case '8': //button 8 right arrow + if (bhit=='1') { + //add hit code here + } else { + pbPlay_hit_callback();//add release code here + } + break; + } + } + }} + i++; + break; + } + } +} +
diff -r 000000000000 -r 36e81c32e784 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Mon Mar 14 17:18:53 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/63cdd78b2dc1 \ No newline at end of file
diff -r 000000000000 -r 36e81c32e784 wave_player.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wave_player.lib Mon Mar 14 17:18:53 2016 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/users/jtgt21/code/wave_player/#7579a7b64408