Linking but does not give binary - Error L6320W
Dependencies: mbed wave_player SDFileSystem PinDetect
Diff: main.cpp
- Revision:
- 0:69e13b99ec01
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Aug 11 09:41:33 2019 +0000 @@ -0,0 +1,218 @@ +#include "mbed.h" +#include "SDFileSystem.h" +#include "wave_player.h" +#include "PinDetect.h" +#include <vector> +#include <string> + +#define UP PC_13 +#define DOWN PB_1 +#define BACK PB_5 +#define MENU PB_2 +#define SELECT PB_9 +#define VOLUP PB_7 +#define VOLDOWN PB_6 + +#define LONG_PRESS_TIME 80 //Value * 20ms = debounce time +#define SHORT_PRESS_TIME 5 //Value * 20ms = debounce time + +using namespace std; + +SDFileSystem sd(PB_15, PB_14, PB_13, PB_12, "TEST"); + +PinDetect up(UP, PullUp); +PinDetect down(DOWN, PullUp); +PinDetect back(BACK, PullUp); +PinDetect menu(MENU, PullUp); +PinDetect select(SELECT, PullUp); +PinDetect volup(VOLUP, PullUp); +PinDetect voldown(VOLDOWN, PullUp); +bool buttonStatus = 0; + +AnalogOut DACout(PA_4); +wave_player waver(&DACout); +int pos = 0; // index of the song +int vol = 0; // volume controller + +bool playing = false; //variable for pause/play since we only have 1 pb for that +vector<string> filenames; //filenames are stored in a vector string + +void read_file_names(char *dir) // function that reads in file names from sd cards +{ + 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)); + } +} + +void upPressedCallback(void){ + //printf("\nUP Pressed\n"); + + int l = filenames.size(); + if (pos > 0) { + pos--; + } else if (pos == 0 ) { + pos = l-1; + } + +} +void upHeldCallback(void){ + printf("\nUP Held\n"); +} + +void downPressedCallback(void){ + //printf("\ndown Pressed\n"); + // it checks for the total number of songs in the sd card..then increments the index until it reaches the last one, then resets to 0 + + int l = filenames.size(); + if (pos < (l-1)) { + pos++; + } else if (pos == (l-1)) { + pos = 0; + } + +} +void downHeldCallback(void){ + printf("\ndown Held\n"); +} + +void backPressedCallback(void){ + printf("\nback Pressed\n"); +} +void backHeldCallback(void){ + printf("\nback Held\n"); +} + +void menuPressedCallback(void){ + //printf("\nmenu Pressed\n"); + + //this interrupt handler changes the play to pause mode or vice versa + //this is done using the boolean playing + + if (playing == false) { + playing = true; + } else if (playing == true) { + playing = false; + } + +} +void menuHeldCallback(void){ + //printf("\nmenu Held\n"); +} + +void volupPressedCallback(void){ + printf("\nvolup Pressed\n"); +} +void volupHeldCallback(void){ + printf("\nvolup Held\n"); +} + +void voldownPressedCallback(void){ + //printf("\nvoldown Pressed\n"); + // this pb changes the volume by lowering the volume until it reaches 0. then it resets to the max volume + // the volume range has been divided into 16 possible ranges. and hence, it toggles through those 16 values + // this only changes the variable vol, which is then used in the wave player file to actually adjust the volume + vol = (vol+1) % 16; +} +void voldownHeldCallback(void){ + printf("\nvoldown Held\n"); +} + +bool buttons_init(void) { + up.attach_deasserted( &upPressedCallback ); + //up.attach_deasserted( &upReleasedCallback ); + up.attach_asserted_held( &upHeldCallback ); + up.setSamplesTillAssert( SHORT_PRESS_TIME ); + up.setSamplesTillHeld( LONG_PRESS_TIME ); + up.setAssertValue( 0 ); + up.setSampleFrequency(); + //up.fall(callback(this, &upCallback)); + + down.attach_deasserted( &downPressedCallback ); + //down.attach_deasserted( &downReleasedCallback ); + down.attach_asserted_held( &downHeldCallback ); + down.setSamplesTillAssert( SHORT_PRESS_TIME ); + down.setSamplesTillHeld( LONG_PRESS_TIME ); + down.setAssertValue( 0 ); + down.setSampleFrequency(); + + back.attach_deasserted( &backPressedCallback ); + //back.attach_deasserted( &backReleasedCallback ); + back.attach_asserted_held( &backHeldCallback ); + back.setSamplesTillAssert( SHORT_PRESS_TIME ); + back.setSamplesTillHeld( LONG_PRESS_TIME ); + back.setAssertValue( 0 ); + back.setSampleFrequency(); + + menu.attach_deasserted( &menuPressedCallback ); + //menu.attach_deasserted( &menuReleasedCallback ); + menu.attach_asserted_held( &menuHeldCallback ); + menu.setSamplesTillAssert( SHORT_PRESS_TIME ); + menu.setSamplesTillHeld( LONG_PRESS_TIME ); + menu.setAssertValue( 0 ); + menu.setSampleFrequency(); + + volup.attach_deasserted( &volupPressedCallback ); + //volup.attach_deasserted( &volupReleasedCallback ); + volup.attach_asserted_held( &volupHeldCallback ); + volup.setSamplesTillAssert( SHORT_PRESS_TIME ); + volup.setSamplesTillHeld( LONG_PRESS_TIME ); + volup.setAssertValue( 0 ); + volup.setSampleFrequency(); + + voldown.attach_deasserted( &voldownPressedCallback ); + //voldown.attach_deasserted( &voldownReleasedCallback ); + voldown.attach_asserted_held( &voldownHeldCallback ); + voldown.setSamplesTillAssert( SHORT_PRESS_TIME ); + voldown.setSamplesTillHeld( LONG_PRESS_TIME ); + voldown.setAssertValue( 0 ); + voldown.setSampleFrequency(); + + /* + down.fall(callback(&downCallback)); + back.fall(callback(&backCallback)); + menu.fall(callback(&menuCallback)); + select.fall(callback(&selectCallback)); + volup.fall(callback(&volupCallback)); + voldown.fall(callback(&voldownCallback)); + */ + + printf("\nButtons Initialized\n"); + return 1; +} + +int main() +{ + printf("\n\n\nHello, wave world =======!\n"); + buttonStatus = buttons_init(); + read_file_names("/TEST/Music"); + + /* + //FILE *wave_file; + //wave_file=fopen("/TEST/queen.wav","r"); + //wave_player waver(&DACout, wave_file); + //waver.play(); + + wave_file=fopen("/TEST/queen.wav","r"); + waver.play(); + fclose(wave_file); + */ + + while(1) { + //while pb3 is low, then we can start playing the song + while(playing == true) { //we have 2 while loops..one while loop makes sure the music player is always on, the other one is for the song + string songname = filenames[pos]; + string a = "/TEST/"; + string fname = a + songname; //retrieves the file name + FILE *wave_file; + wave_file = fopen(fname.c_str(),"r"); //opens the music file + waver.play(wave_file); //plays the music file + fclose(wave_file); + } + } + +} +