IOT Cooler that has an integrated MP3 Player attached

Dependencies:   4DGL-uLCD-SE PinDetect SDFileSystem mbed wave_player

Committer:
anevil14
Date:
Fri May 01 16:52:11 2015 +0000
Revision:
0:16db2db8886d
IOT Cooler Code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
anevil14 0:16db2db8886d 1 #include "mbed.h"
anevil14 0:16db2db8886d 2 #include "TMP36.h"
anevil14 0:16db2db8886d 3 #include "PinDetect.h"
anevil14 0:16db2db8886d 4 #include "SDFileSystem.h"
anevil14 0:16db2db8886d 5 #include "SystemState.h"
anevil14 0:16db2db8886d 6 #include "wave_player.h"
anevil14 0:16db2db8886d 7 #include "WavDis.h"
anevil14 0:16db2db8886d 8 #include "time.h"
anevil14 0:16db2db8886d 9 #include <vector>
anevil14 0:16db2db8886d 10 #include <string>
anevil14 0:16db2db8886d 11 #include <stdio.h>
anevil14 0:16db2db8886d 12
anevil14 0:16db2db8886d 13 using std::string;
anevil14 0:16db2db8886d 14
anevil14 0:16db2db8886d 15 PinDetect fwdButton(p17, PullUp);
anevil14 0:16db2db8886d 16 PinDetect revButton(p16, PullUp);
anevil14 0:16db2db8886d 17 PinDetect playButton(p12, PullUp);
anevil14 0:16db2db8886d 18 PinDetect volumeButton(p20, PullUp);
anevil14 0:16db2db8886d 19
anevil14 0:16db2db8886d 20 Serial rn42(p13,p14); // Bluetooth Module
anevil14 0:16db2db8886d 21 Serial pc(USBTX, USBRX);
anevil14 0:16db2db8886d 22
anevil14 0:16db2db8886d 23 SDFileSystem sd(p5, p6, p7, p8, p9, "sd"); //SD card extra pin p9
anevil14 0:16db2db8886d 24
anevil14 0:16db2db8886d 25 AnalogOut DACout(p18);
anevil14 0:16db2db8886d 26 wave_player waver(&DACout);
anevil14 0:16db2db8886d 27
anevil14 0:16db2db8886d 28 float Current_temp = 0.0;
anevil14 0:16db2db8886d 29 float Current_temp1 = 0.0;
anevil14 0:16db2db8886d 30 float Current_temp2 = 0.0;
anevil14 0:16db2db8886d 31
anevil14 0:16db2db8886d 32 TMP36 myTMP36(p15);
anevil14 0:16db2db8886d 33 Timer t;
anevil14 0:16db2db8886d 34
anevil14 0:16db2db8886d 35 const char* cmds[] = {"MUSIC:UP", "MUSIC:STOP", "MUSIC:PLAY", "MUSIC:NEXT", "MUSIC:PREV", "MUSIC:DOWN"};
anevil14 0:16db2db8886d 36 SystemState currentState = stop;
anevil14 0:16db2db8886d 37 string currentSong;
anevil14 0:16db2db8886d 38 string fileDirectory;
anevil14 0:16db2db8886d 39 int currentIndex;
anevil14 0:16db2db8886d 40 int librarySize;
anevil14 0:16db2db8886d 41 int volumeControl;
anevil14 0:16db2db8886d 42 bool playStop;
anevil14 0:16db2db8886d 43 float const rate = 1.0;
anevil14 0:16db2db8886d 44 string fileName = "";
anevil14 0:16db2db8886d 45
anevil14 0:16db2db8886d 46 WavDis display;
anevil14 0:16db2db8886d 47
anevil14 0:16db2db8886d 48
anevil14 0:16db2db8886d 49 vector<string> filenames; //filenames are stored in a vector string
anevil14 0:16db2db8886d 50
anevil14 0:16db2db8886d 51 //PROTOCOL:
anevil14 0:16db2db8886d 52 // ex) TEMPERATURE:30 --> reading of 30 degrees
anevil14 0:16db2db8886d 53 //
anevil14 0:16db2db8886d 54 bool writeLine (char* towrite, int length)
anevil14 0:16db2db8886d 55 {
anevil14 0:16db2db8886d 56 if (rn42.writeable()) {
anevil14 0:16db2db8886d 57 for (int i = 0; i < length; i++) {
anevil14 0:16db2db8886d 58 if (towrite[i] == NULL ) {
anevil14 0:16db2db8886d 59 break;
anevil14 0:16db2db8886d 60 }
anevil14 0:16db2db8886d 61 pc.printf("|%c",towrite[i]);
anevil14 0:16db2db8886d 62 rn42.putc(towrite[i]);
anevil14 0:16db2db8886d 63 }
anevil14 0:16db2db8886d 64 rn42.putc('\n');
anevil14 0:16db2db8886d 65 rn42.putc(0);
anevil14 0:16db2db8886d 66 return true;
anevil14 0:16db2db8886d 67 }
anevil14 0:16db2db8886d 68
anevil14 0:16db2db8886d 69 return false;
anevil14 0:16db2db8886d 70 }
anevil14 0:16db2db8886d 71
anevil14 0:16db2db8886d 72
anevil14 0:16db2db8886d 73 bool readLine (char* buffer, int sizebuffer)
anevil14 0:16db2db8886d 74 {
anevil14 0:16db2db8886d 75 char tmpRead = 0;
anevil14 0:16db2db8886d 76
anevil14 0:16db2db8886d 77 if (rn42.readable() == 0){
anevil14 0:16db2db8886d 78 return false;
anevil14 0:16db2db8886d 79 }
anevil14 0:16db2db8886d 80 int i;
anevil14 0:16db2db8886d 81 for (i= 0 ; i< sizebuffer-1; i++) {
anevil14 0:16db2db8886d 82
anevil14 0:16db2db8886d 83 //if (rn42.readable()) {
anevil14 0:16db2db8886d 84 tmpRead = rn42.getc();
anevil14 0:16db2db8886d 85 //} else {
anevil14 0:16db2db8886d 86 // break;
anevil14 0:16db2db8886d 87 //}
anevil14 0:16db2db8886d 88
anevil14 0:16db2db8886d 89 if (tmpRead == '\n' || tmpRead == 0) {
anevil14 0:16db2db8886d 90 break;
anevil14 0:16db2db8886d 91 }
anevil14 0:16db2db8886d 92 buffer[i] = tmpRead;
anevil14 0:16db2db8886d 93 if (i == 0 && tmpRead == 0) {
anevil14 0:16db2db8886d 94 return false;
anevil14 0:16db2db8886d 95 }
anevil14 0:16db2db8886d 96 }
anevil14 0:16db2db8886d 97
anevil14 0:16db2db8886d 98 buffer[i] = 0;
anevil14 0:16db2db8886d 99 if (i == 0 ) {
anevil14 0:16db2db8886d 100 return false;
anevil14 0:16db2db8886d 101 }
anevil14 0:16db2db8886d 102
anevil14 0:16db2db8886d 103 return true;
anevil14 0:16db2db8886d 104
anevil14 0:16db2db8886d 105 }
anevil14 0:16db2db8886d 106 /*
anevil14 0:16db2db8886d 107 void Rx_interrupt(void) {
anevil14 0:16db2db8886d 108 pc.printf("I blocked you bitch");
anevil14 0:16db2db8886d 109 pc.putc(rn42.getc());
anevil14 0:16db2db8886d 110 pc.printf("jk");
anevil14 0:16db2db8886d 111 }*/
anevil14 0:16db2db8886d 112
anevil14 0:16db2db8886d 113 //UPDATE NECESSARY VARIABLES EACH TIME A BUTTON EVEN OCCURS
anevil14 0:16db2db8886d 114 void Update(int index, SystemState state)
anevil14 0:16db2db8886d 115 {
anevil14 0:16db2db8886d 116 currentState = state;
anevil14 0:16db2db8886d 117 currentIndex = index;
anevil14 0:16db2db8886d 118 currentSong = filenames[currentIndex];
anevil14 0:16db2db8886d 119 display.UpdateState(currentState);
anevil14 0:16db2db8886d 120 display.UpdateSong(currentSong);
anevil14 0:16db2db8886d 121 display.UpdateVolume(15-volumeControl);
anevil14 0:16db2db8886d 122 Current_temp = (1.8*myTMP36.read())+32;
anevil14 0:16db2db8886d 123 display.UpdateTemp(Current_temp);
anevil14 0:16db2db8886d 124 switch(currentState) {
anevil14 0:16db2db8886d 125 case stop:
anevil14 0:16db2db8886d 126 playStop = false;
anevil14 0:16db2db8886d 127 break;
anevil14 0:16db2db8886d 128 case play_state:
anevil14 0:16db2db8886d 129 playStop = true;
anevil14 0:16db2db8886d 130 break;
anevil14 0:16db2db8886d 131 }
anevil14 0:16db2db8886d 132 }
anevil14 0:16db2db8886d 133
anevil14 0:16db2db8886d 134
anevil14 0:16db2db8886d 135 void getWaveFiles()
anevil14 0:16db2db8886d 136 {
anevil14 0:16db2db8886d 137 if (!sd.SDInserted()) {
anevil14 0:16db2db8886d 138 while (!sd.SDInserted()) {
anevil14 0:16db2db8886d 139 //check for sd card until true
anevil14 0:16db2db8886d 140 display.UpdateState(Need_SD);
anevil14 0:16db2db8886d 141 printf("SD Card Not Found\n");
anevil14 0:16db2db8886d 142 wait(1);
anevil14 0:16db2db8886d 143 }
anevil14 0:16db2db8886d 144 wait(2);
anevil14 0:16db2db8886d 145 sd.disk_initialize();
anevil14 0:16db2db8886d 146 wait(2);
anevil14 0:16db2db8886d 147 }
anevil14 0:16db2db8886d 148
anevil14 0:16db2db8886d 149 wait(2);
anevil14 0:16db2db8886d 150 DIR *dp;
anevil14 0:16db2db8886d 151 struct dirent *dirp;
anevil14 0:16db2db8886d 152 dp = opendir(fileDirectory.c_str());
anevil14 0:16db2db8886d 153
anevil14 0:16db2db8886d 154 while((dirp = readdir(dp)) != NULL) {
anevil14 0:16db2db8886d 155 filenames.push_back(string(dirp->d_name));
anevil14 0:16db2db8886d 156 }
anevil14 0:16db2db8886d 157 // print filename strings from vector using an iterator
anevil14 0:16db2db8886d 158 for(vector<string>::iterator it=filenames.begin(); it < filenames.end(); it++) {
anevil14 0:16db2db8886d 159 printf("%s\n\r",(*it).c_str());
anevil14 0:16db2db8886d 160 }
anevil14 0:16db2db8886d 161
anevil14 0:16db2db8886d 162 librarySize = filenames.size();
anevil14 0:16db2db8886d 163 if (librarySize == 0) {
anevil14 0:16db2db8886d 164 printf("Library Empty\n\n");
anevil14 0:16db2db8886d 165 return;
anevil14 0:16db2db8886d 166 }
anevil14 0:16db2db8886d 167
anevil14 0:16db2db8886d 168 fileDirectory.append("/");
anevil14 0:16db2db8886d 169
anevil14 0:16db2db8886d 170 Update(0,stop);
anevil14 0:16db2db8886d 171 }
anevil14 0:16db2db8886d 172
anevil14 0:16db2db8886d 173
anevil14 0:16db2db8886d 174
anevil14 0:16db2db8886d 175 void fwdButton_Event(void)
anevil14 0:16db2db8886d 176 {
anevil14 0:16db2db8886d 177 if (currentState == stop) {
anevil14 0:16db2db8886d 178 currentIndex++; //INCREMENT CURRENT INDEX (0 TO NUMBER OF SONGS -1)
anevil14 0:16db2db8886d 179 if(currentIndex >= librarySize) {
anevil14 0:16db2db8886d 180 currentIndex = 0;
anevil14 0:16db2db8886d 181 }
anevil14 0:16db2db8886d 182 Update(currentIndex,currentState);
anevil14 0:16db2db8886d 183 }
anevil14 0:16db2db8886d 184 }
anevil14 0:16db2db8886d 185 void revButton_Event(void)
anevil14 0:16db2db8886d 186 {
anevil14 0:16db2db8886d 187 if (currentState == stop) {
anevil14 0:16db2db8886d 188 currentIndex--; //DECREMENT CURRENT INDEX (0 TO NUMBER OF SONGS -1)
anevil14 0:16db2db8886d 189 if(currentIndex < 0) {
anevil14 0:16db2db8886d 190 currentIndex = (librarySize - 1);
anevil14 0:16db2db8886d 191 }
anevil14 0:16db2db8886d 192 Update(currentIndex,currentState);
anevil14 0:16db2db8886d 193 }
anevil14 0:16db2db8886d 194 }
anevil14 0:16db2db8886d 195
anevil14 0:16db2db8886d 196 void playButton_Event(void)
anevil14 0:16db2db8886d 197 {
anevil14 0:16db2db8886d 198
anevil14 0:16db2db8886d 199 switch (currentState) {
anevil14 0:16db2db8886d 200 case stop:
anevil14 0:16db2db8886d 201 Update(currentIndex, play_state);
anevil14 0:16db2db8886d 202 break;
anevil14 0:16db2db8886d 203 case play_state:
anevil14 0:16db2db8886d 204 Update(currentIndex, stop);
anevil14 0:16db2db8886d 205 break;
anevil14 0:16db2db8886d 206 }
anevil14 0:16db2db8886d 207 }
anevil14 0:16db2db8886d 208 void volumeUpButton_Event(void)
anevil14 0:16db2db8886d 209 {
anevil14 0:16db2db8886d 210 if ((volumeControl >= 0) && (volumeControl < 15)){
anevil14 0:16db2db8886d 211 volumeControl++;
anevil14 0:16db2db8886d 212 }
anevil14 0:16db2db8886d 213 display.UpdateVolume(15-volumeControl);
anevil14 0:16db2db8886d 214 }
anevil14 0:16db2db8886d 215 void volumeButton_Event(void)
anevil14 0:16db2db8886d 216 {
anevil14 0:16db2db8886d 217 if(volumeControl >= 15) {
anevil14 0:16db2db8886d 218 volumeControl = 0;
anevil14 0:16db2db8886d 219 } else {
anevil14 0:16db2db8886d 220 volumeControl++;
anevil14 0:16db2db8886d 221 }
anevil14 0:16db2db8886d 222 display.UpdateVolume(15-volumeControl);
anevil14 0:16db2db8886d 223 }
anevil14 0:16db2db8886d 224
anevil14 0:16db2db8886d 225 void volumeDownButton_Event(void)
anevil14 0:16db2db8886d 226 {
anevil14 0:16db2db8886d 227 if(volumeControl > 0) {
anevil14 0:16db2db8886d 228 volumeControl--;
anevil14 0:16db2db8886d 229 }
anevil14 0:16db2db8886d 230 display.UpdateVolume(15-volumeControl);
anevil14 0:16db2db8886d 231 }
anevil14 0:16db2db8886d 232
anevil14 0:16db2db8886d 233 int main()
anevil14 0:16db2db8886d 234 {
anevil14 0:16db2db8886d 235
anevil14 0:16db2db8886d 236 // BlueTooth Module
anevil14 0:16db2db8886d 237 rn42.baud(19600);
anevil14 0:16db2db8886d 238 pc.baud(9600);
anevil14 0:16db2db8886d 239
anevil14 0:16db2db8886d 240 // MP3 Player
anevil14 0:16db2db8886d 241 currentState = stop;
anevil14 0:16db2db8886d 242 currentSong = "";
anevil14 0:16db2db8886d 243 librarySize = 0;
anevil14 0:16db2db8886d 244 volumeControl = 0;
anevil14 0:16db2db8886d 245 currentIndex = -1;
anevil14 0:16db2db8886d 246 fileDirectory = "/sd/myMusic";
anevil14 0:16db2db8886d 247 char output[50];
anevil14 0:16db2db8886d 248 string temp;
anevil14 0:16db2db8886d 249 bool didRead = false;
anevil14 0:16db2db8886d 250 char buf [100];
anevil14 0:16db2db8886d 251
anevil14 0:16db2db8886d 252 fwdButton.attach_asserted(&fwdButton_Event);
anevil14 0:16db2db8886d 253 fwdButton.setSampleFrequency();
anevil14 0:16db2db8886d 254 revButton.attach_asserted(&revButton_Event);
anevil14 0:16db2db8886d 255 revButton.setSampleFrequency();
anevil14 0:16db2db8886d 256 playButton.attach_asserted(&playButton_Event);
anevil14 0:16db2db8886d 257 playButton.setSampleFrequency();
anevil14 0:16db2db8886d 258 volumeButton.attach_asserted(&volumeButton_Event);
anevil14 0:16db2db8886d 259 volumeButton.setSampleFrequency();
anevil14 0:16db2db8886d 260 //rn42.attach(&Rx_interrupt, Serial::RxIrq);
anevil14 0:16db2db8886d 261
anevil14 0:16db2db8886d 262 getWaveFiles();
anevil14 0:16db2db8886d 263 pc.printf("init");
anevil14 0:16db2db8886d 264
anevil14 0:16db2db8886d 265 while(1) {
anevil14 0:16db2db8886d 266 switch (currentState) {
anevil14 0:16db2db8886d 267 case stop:
anevil14 0:16db2db8886d 268 break;
anevil14 0:16db2db8886d 269 case play_state:
anevil14 0:16db2db8886d 270 string fileName = "";
anevil14 0:16db2db8886d 271 fileName.append(fileDirectory + currentSong);
anevil14 0:16db2db8886d 272 printf("%s\n\r",fileName.c_str());
anevil14 0:16db2db8886d 273 FILE *wave_file;
anevil14 0:16db2db8886d 274 wave_file=fopen(fileName.c_str(),"r");
anevil14 0:16db2db8886d 275
anevil14 0:16db2db8886d 276 waver.play(wave_file, &playStop, &volumeControl);
anevil14 0:16db2db8886d 277
anevil14 0:16db2db8886d 278 fclose(wave_file);
anevil14 0:16db2db8886d 279 Update(currentIndex,stop);
anevil14 0:16db2db8886d 280 break;
anevil14 0:16db2db8886d 281 }
anevil14 0:16db2db8886d 282 wait(0.1);
anevil14 0:16db2db8886d 283 t.start();
anevil14 0:16db2db8886d 284
anevil14 0:16db2db8886d 285 if (t.read() >= rate) {
anevil14 0:16db2db8886d 286 Current_temp = (1.8*myTMP36.read())+32;
anevil14 0:16db2db8886d 287 Current_temp1 = (1.8*myTMP36.read())+32;
anevil14 0:16db2db8886d 288 Current_temp2 = (1.8*myTMP36.read())+32;
anevil14 0:16db2db8886d 289 Current_temp = (Current_temp + Current_temp1 + Current_temp2) / 3.00;
anevil14 0:16db2db8886d 290 display.UpdateTemp(Current_temp);
anevil14 0:16db2db8886d 291 snprintf(output,50,"%.2f", Current_temp);
anevil14 0:16db2db8886d 292 writeLine (output, 50);
anevil14 0:16db2db8886d 293 t.reset();
anevil14 0:16db2db8886d 294 t.start();
anevil14 0:16db2db8886d 295 }
anevil14 0:16db2db8886d 296
anevil14 0:16db2db8886d 297
anevil14 0:16db2db8886d 298 didRead = readLine(buf, 100);
anevil14 0:16db2db8886d 299 pc.printf("(%s)\n",buf);
anevil14 0:16db2db8886d 300 if (didRead) {
anevil14 0:16db2db8886d 301 if (strcmp(buf,cmds[0]) == 0) {
anevil14 0:16db2db8886d 302 pc.printf("Volume Increase");
anevil14 0:16db2db8886d 303 volumeUpButton_Event();
anevil14 0:16db2db8886d 304 }
anevil14 0:16db2db8886d 305 if (strcmp(buf,cmds[1]) == 0) {
anevil14 0:16db2db8886d 306 pc.printf("STOP");
anevil14 0:16db2db8886d 307 playButton_Event();
anevil14 0:16db2db8886d 308 }
anevil14 0:16db2db8886d 309 if (strcmp(buf,cmds[2]) == 0) {
anevil14 0:16db2db8886d 310 pc.printf("PLAY");
anevil14 0:16db2db8886d 311 playButton_Event();
anevil14 0:16db2db8886d 312 }
anevil14 0:16db2db8886d 313 if (strcmp(buf,cmds[3]) == 0) {
anevil14 0:16db2db8886d 314 pc.printf("FORWARD");
anevil14 0:16db2db8886d 315 fwdButton_Event();
anevil14 0:16db2db8886d 316 }
anevil14 0:16db2db8886d 317 if (strcmp(buf,cmds[4]) == 0) {
anevil14 0:16db2db8886d 318 pc.printf("REVERSE");
anevil14 0:16db2db8886d 319 revButton_Event();
anevil14 0:16db2db8886d 320 }
anevil14 0:16db2db8886d 321 if (strcmp(buf,cmds[5]) == 0) {
anevil14 0:16db2db8886d 322 pc.printf("DOWN");
anevil14 0:16db2db8886d 323 volumeDownButton_Event();
anevil14 0:16db2db8886d 324 }
anevil14 0:16db2db8886d 325
anevil14 0:16db2db8886d 326 }
anevil14 0:16db2db8886d 327 }
anevil14 0:16db2db8886d 328
anevil14 0:16db2db8886d 329 }