Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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