
VS1053 audio player with lcd and rotary encoder
Dependencies: LibMenu PinDetect SDFileSystem TextLCD VS1053lib mRotaryEncoder mbed
Revision 2:1c751f044ecd, committed 2013-06-19
- Comitter:
- ollie8
- Date:
- Wed Jun 19 10:56:07 2013 +0000
- Parent:
- 1:0040f640281c
- Child:
- 3:b6bf1e6d9cde
- Commit message:
- Removed debug loging
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Tue Jun 18 17:01:22 2013 +0000 +++ b/main.cpp Wed Jun 19 10:56:07 2013 +0000 @@ -15,6 +15,10 @@ PAUSED }; +void select(MenuNode *node); +void enterMenu(Menu *menu); +void enterPausedMenu(Menu *menu); + TextLCD lcd(p24, p25, p26, p27, p28, p29); SDFileSystem sd(p5, p6, p7, p8, "sd"); // PinName mosi, PinName miso, PinName sclk, PinName cs, PinName dreq, PinName rst, PinName xdcs @@ -26,17 +30,17 @@ char* currentfile; char* lastPlaytime = (char*) malloc(6); unsigned char volume = 0x00; +Menu root(&enterMenu, &select, "ROOT", 5); +Menu pausedMenu(&enterPausedMenu, &select, "PAUSED", 2); void select(MenuNode *node) { lcd.cls(); lcd.printf(node->getName()); - pc.printf("Selected - %s\n\r", node->getName()); } void cueNode(MenuNode *node) { currentfile = node->getName(); state = CUED; - pc.printf("Cueing menu node - %s\n\r", node->getName()); } void setVolume(MenuNode *node) { @@ -58,11 +62,12 @@ void enterMenu(Menu *menu) { current = menu; - pc.printf("Entered menu - %s\n\r", menu->getName()); } -Menu root(&enterMenu, &select, "ROOT", 5); -Menu pausedMenu(&enterMenu, &select, "PAUSED", 2); +void enterPausedMenu(Menu *menu) { + current = menu; + state = PAUSED; +} void cancelPlay(MenuNode *node) { state = IDLE; @@ -70,30 +75,20 @@ } void buttonPress() { - pc.printf("Button press"); switch (state) { case IDLE: + case PAUSED: current->getSelectedNode().enter(); break; case CUED: // do nothing until we start playing; break; case PLAYING: - state = PAUSED; pausedMenu.enter(); break; - case PAUSED: - current->getSelectedNode().enter(); - break; } } -void buttonHeld() { - pc.printf("Button held"); - state = IDLE; - root.enter(); -} - void buildLibrary() { DIR *d; struct dirent *p; @@ -108,29 +103,21 @@ root.addMenuNode(*library); d = opendir("/sd"); while ((p = readdir(d)) != NULL) { - pc.printf("Makning node\n\r"); char * name = p->d_name; if (sizeof(name) > 0) { MenuNode *node = new MenuNode(&cueNode, &select, name); - pc.printf("Makning node done\n\r"); library->addMenuNode(*node); - pc.printf("Node added\n\r"); - pc.printf(" - %s\n\r", name); - } else { - pc.printf("BLANK NAME"); } } } else { - pc.printf("Could not open directory!\n"); + lcd.printf("Could not open root directory!\n"); } closedir(d); } void setupMenu() { pc.printf("Building menus...\n\r"); - pc.printf("Menu size - %d\r\n", root.size()); buildLibrary(); - pc.printf("Menu size - %d\r\n", root.size()); Menu *settings = new Menu(&enterMenu, &select, "Settings", 3); root.addMenuNode(*settings); Menu *test = new Menu(&enterMenu, &select, "Test", 2); @@ -141,7 +128,6 @@ settings->addMenuNode(*bass); MenuNode *treble = new MenuNode(&setTreble, &select, "Treble"); settings->addMenuNode(*treble); - pc.printf("Menu size - %d\r\n", root.size()); MenuNode *contPlay = new MenuNode(&continuePlay, &select, "Continue"); MenuNode *cancPlay = new MenuNode(&cancelPlay, &select, "Cancel"); pausedMenu.addMenuNode(*contPlay); @@ -152,27 +138,22 @@ void control() { int val = rot.Get(); - pc.printf("Enc val - %d", val); if (state == PLAYING) { pc.printf("\r\n"); if (val > 1) { - pc.printf("Going up...\r\n"); volume -= 0x05; + vs1053.setvolume(volume, volume); rot.Set(0); } else if (val < -1) { - pc.printf("Going down...\r\n"); volume += 0x05; + vs1053.setvolume(volume, volume); rot.Set(0); } - pc.printf("Setting volume - %d", volume); - vs1053.setvolume(volume, volume); } else if (state == IDLE || state == PAUSED) { if (val > 1) { - pc.printf("forward\n\r"); current->up(); rot.Set(0); } else if (val < -1) { - pc.printf("back\n\r"); current->down(); rot.Set(0); } @@ -193,21 +174,18 @@ void checkCued() { if (state == CUED) { - pc.printf("Opening file %s\n\r", currentfile); unsigned char buff[BUFFER_SIZE]; char abs[16]; strcpy(abs, "/sd/"); strcat(abs, currentfile); FILE *song = fopen(abs, "r"); if (song == NULL) { - pc.printf("Cannot find file\n\r"); lcd.cls(); lcd.printf("File not found."); wait(1.5); root.enter(); } else { char* playtime = (char*) malloc(6); - pc.printf("File open\n\r"); drawNowPlaying("00:00"); state = PLAYING; while(!feof(song)) { @@ -243,16 +221,15 @@ } int main() { + pc.printf("Starting...\n\r"); lcd.printf("Initialising..."); lcd.locate(0, 1); - lcd.printf("O pod v0.1"); + lcd.printf("O pod v0.2"); wait(1.0); - pc.printf("Starting...\n\r"); vs1053.init(); vs1053.loadpatch(); rot.Set(0); rot.attachSW(&buttonPress); - //rot.attachSWHeld(&buttonHeld); rot.attachROT(&control); setupMenu(); while (1) {