IOT Cooler that has an integrated MP3 Player attached
Dependencies: 4DGL-uLCD-SE PinDetect SDFileSystem mbed wave_player
main.cpp
- Committer:
- anevil14
- Date:
- 2015-05-01
- Revision:
- 0:16db2db8886d
File content as of revision 0:16db2db8886d:
#include "mbed.h" #include "TMP36.h" #include "PinDetect.h" #include "SDFileSystem.h" #include "SystemState.h" #include "wave_player.h" #include "WavDis.h" #include "time.h" #include <vector> #include <string> #include <stdio.h> using std::string; PinDetect fwdButton(p17, PullUp); PinDetect revButton(p16, PullUp); PinDetect playButton(p12, PullUp); PinDetect volumeButton(p20, PullUp); Serial rn42(p13,p14); // Bluetooth Module Serial pc(USBTX, USBRX); SDFileSystem sd(p5, p6, p7, p8, p9, "sd"); //SD card extra pin p9 AnalogOut DACout(p18); wave_player waver(&DACout); float Current_temp = 0.0; float Current_temp1 = 0.0; float Current_temp2 = 0.0; TMP36 myTMP36(p15); Timer t; const char* cmds[] = {"MUSIC:UP", "MUSIC:STOP", "MUSIC:PLAY", "MUSIC:NEXT", "MUSIC:PREV", "MUSIC:DOWN"}; SystemState currentState = stop; string currentSong; string fileDirectory; int currentIndex; int librarySize; int volumeControl; bool playStop; float const rate = 1.0; string fileName = ""; WavDis display; vector<string> filenames; //filenames are stored in a vector string //PROTOCOL: // ex) TEMPERATURE:30 --> reading of 30 degrees // bool writeLine (char* towrite, int length) { if (rn42.writeable()) { for (int i = 0; i < length; i++) { if (towrite[i] == NULL ) { break; } pc.printf("|%c",towrite[i]); rn42.putc(towrite[i]); } rn42.putc('\n'); rn42.putc(0); return true; } return false; } bool readLine (char* buffer, int sizebuffer) { char tmpRead = 0; if (rn42.readable() == 0){ return false; } int i; for (i= 0 ; i< sizebuffer-1; i++) { //if (rn42.readable()) { tmpRead = rn42.getc(); //} else { // break; //} if (tmpRead == '\n' || tmpRead == 0) { break; } buffer[i] = tmpRead; if (i == 0 && tmpRead == 0) { return false; } } buffer[i] = 0; if (i == 0 ) { return false; } return true; } /* void Rx_interrupt(void) { pc.printf("I blocked you bitch"); pc.putc(rn42.getc()); pc.printf("jk"); }*/ //UPDATE NECESSARY VARIABLES EACH TIME A BUTTON EVEN OCCURS void Update(int index, SystemState state) { currentState = state; currentIndex = index; currentSong = filenames[currentIndex]; display.UpdateState(currentState); display.UpdateSong(currentSong); display.UpdateVolume(15-volumeControl); Current_temp = (1.8*myTMP36.read())+32; display.UpdateTemp(Current_temp); switch(currentState) { case stop: playStop = false; break; case play_state: playStop = true; break; } } void getWaveFiles() { if (!sd.SDInserted()) { while (!sd.SDInserted()) { //check for sd card until true display.UpdateState(Need_SD); printf("SD Card Not Found\n"); wait(1); } wait(2); sd.disk_initialize(); wait(2); } wait(2); DIR *dp; struct dirent *dirp; dp = opendir(fileDirectory.c_str()); while((dirp = readdir(dp)) != NULL) { filenames.push_back(string(dirp->d_name)); } // print filename strings from vector using an iterator for(vector<string>::iterator it=filenames.begin(); it < filenames.end(); it++) { printf("%s\n\r",(*it).c_str()); } librarySize = filenames.size(); if (librarySize == 0) { printf("Library Empty\n\n"); return; } fileDirectory.append("/"); Update(0,stop); } void fwdButton_Event(void) { if (currentState == stop) { currentIndex++; //INCREMENT CURRENT INDEX (0 TO NUMBER OF SONGS -1) if(currentIndex >= librarySize) { currentIndex = 0; } Update(currentIndex,currentState); } } void revButton_Event(void) { if (currentState == stop) { currentIndex--; //DECREMENT CURRENT INDEX (0 TO NUMBER OF SONGS -1) if(currentIndex < 0) { currentIndex = (librarySize - 1); } Update(currentIndex,currentState); } } void playButton_Event(void) { switch (currentState) { case stop: Update(currentIndex, play_state); break; case play_state: Update(currentIndex, stop); break; } } void volumeUpButton_Event(void) { if ((volumeControl >= 0) && (volumeControl < 15)){ volumeControl++; } display.UpdateVolume(15-volumeControl); } void volumeButton_Event(void) { if(volumeControl >= 15) { volumeControl = 0; } else { volumeControl++; } display.UpdateVolume(15-volumeControl); } void volumeDownButton_Event(void) { if(volumeControl > 0) { volumeControl--; } display.UpdateVolume(15-volumeControl); } int main() { // BlueTooth Module rn42.baud(19600); pc.baud(9600); // MP3 Player currentState = stop; currentSong = ""; librarySize = 0; volumeControl = 0; currentIndex = -1; fileDirectory = "/sd/myMusic"; char output[50]; string temp; bool didRead = false; char buf [100]; fwdButton.attach_asserted(&fwdButton_Event); fwdButton.setSampleFrequency(); revButton.attach_asserted(&revButton_Event); revButton.setSampleFrequency(); playButton.attach_asserted(&playButton_Event); playButton.setSampleFrequency(); volumeButton.attach_asserted(&volumeButton_Event); volumeButton.setSampleFrequency(); //rn42.attach(&Rx_interrupt, Serial::RxIrq); getWaveFiles(); pc.printf("init"); while(1) { switch (currentState) { case stop: break; case play_state: string fileName = ""; fileName.append(fileDirectory + currentSong); printf("%s\n\r",fileName.c_str()); FILE *wave_file; wave_file=fopen(fileName.c_str(),"r"); waver.play(wave_file, &playStop, &volumeControl); fclose(wave_file); Update(currentIndex,stop); break; } wait(0.1); t.start(); if (t.read() >= rate) { Current_temp = (1.8*myTMP36.read())+32; Current_temp1 = (1.8*myTMP36.read())+32; Current_temp2 = (1.8*myTMP36.read())+32; Current_temp = (Current_temp + Current_temp1 + Current_temp2) / 3.00; display.UpdateTemp(Current_temp); snprintf(output,50,"%.2f", Current_temp); writeLine (output, 50); t.reset(); t.start(); } didRead = readLine(buf, 100); pc.printf("(%s)\n",buf); if (didRead) { if (strcmp(buf,cmds[0]) == 0) { pc.printf("Volume Increase"); volumeUpButton_Event(); } if (strcmp(buf,cmds[1]) == 0) { pc.printf("STOP"); playButton_Event(); } if (strcmp(buf,cmds[2]) == 0) { pc.printf("PLAY"); playButton_Event(); } if (strcmp(buf,cmds[3]) == 0) { pc.printf("FORWARD"); fwdButton_Event(); } if (strcmp(buf,cmds[4]) == 0) { pc.printf("REVERSE"); revButton_Event(); } if (strcmp(buf,cmds[5]) == 0) { pc.printf("DOWN"); volumeDownButton_Event(); } } } }