A Speech Controlled Music Player that uses Google Speech API and Dialogflow API to understand natural speech.

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

Fork of Project_MP by Angus MacLean

Committer:
georgekamar
Date:
Wed Dec 13 05:30:52 2017 +0000
Revision:
3:ecf799cef1db
Parent:
2:54dcfef5c648
Speech Controlled Music Player Version 1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sarthakjaiswal 0:4b3056d3c684 1 #include "mbed.h"
sarthakjaiswal 0:4b3056d3c684 2 #include "SDFileSystem.h"
sarthakjaiswal 0:4b3056d3c684 3 #include "wave_player.h"
amaclean6 2:54dcfef5c648 4 #include "uLCD_4DGL.h"
sarthakjaiswal 0:4b3056d3c684 5 #include "PinDetect.h"
sarthakjaiswal 0:4b3056d3c684 6 #include "Speaker.h"
sarthakjaiswal 0:4b3056d3c684 7 #include <vector>
sarthakjaiswal 0:4b3056d3c684 8 #include <string>
sarthakjaiswal 1:45d8f6557ff8 9
georgekamar 3:ecf799cef1db 10 Serial pc(USBTX, USBRX);
georgekamar 3:ecf799cef1db 11 Serial esp(p28, p27); // tx, rx
georgekamar 3:ecf799cef1db 12 DigitalOut reset(p26);
georgekamar 3:ecf799cef1db 13
sarthakjaiswal 1:45d8f6557ff8 14 //Set up LEDs
sarthakjaiswal 0:4b3056d3c684 15 DigitalOut myled(LED1);
sarthakjaiswal 0:4b3056d3c684 16 DigitalOut myled2(LED2);
sarthakjaiswal 0:4b3056d3c684 17 DigitalOut myled3(LED3);
sarthakjaiswal 0:4b3056d3c684 18 DigitalOut myled4(LED4);
sarthakjaiswal 0:4b3056d3c684 19
georgekamar 3:ecf799cef1db 20 AnalogIn seed(p16);
georgekamar 3:ecf799cef1db 21 Timer t;
georgekamar 3:ecf799cef1db 22
georgekamar 3:ecf799cef1db 23 int count,ended,timeout;
georgekamar 3:ecf799cef1db 24 char buf[2024];
georgekamar 3:ecf799cef1db 25 char snd[1024];
georgekamar 3:ecf799cef1db 26
georgekamar 3:ecf799cef1db 27 char ssid[32] = "Mbednode"; // enter WiFi router ssid inside the quotes
georgekamar 3:ecf799cef1db 28 char pwd [32] = "Hello"; // enter WiFi router password inside the quotes
georgekamar 3:ecf799cef1db 29
sarthakjaiswal 0:4b3056d3c684 30 using namespace std;
sarthakjaiswal 0:4b3056d3c684 31
sarthakjaiswal 0:4b3056d3c684 32 SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
amaclean6 2:54dcfef5c648 33 uLCD_4DGL uLCD(p9,p10,p11);
sarthakjaiswal 1:45d8f6557ff8 34 DigitalIn sdDetect(p17); // Set up a pin for SD Card Detect
sarthakjaiswal 0:4b3056d3c684 35
sarthakjaiswal 1:45d8f6557ff8 36 AnalogOut DACout(p18); //set up speaker
sarthakjaiswal 1:45d8f6557ff8 37 wave_player waver(&DACout); //set up wave player library
sarthakjaiswal 1:45d8f6557ff8 38 int pos = 0; // index of the song
georgekamar 3:ecf799cef1db 39 int currentSongIndex = -1;
amaclean6 2:54dcfef5c648 40 int vol = 0;
amaclean6 2:54dcfef5c648 41
sarthakjaiswal 1:45d8f6557ff8 42
georgekamar 3:ecf799cef1db 43 bool playing = false; //variable for pause/play
georgekamar 3:ecf799cef1db 44 vector<string> song_names; //filenames are stored in a vector string
georgekamar 3:ecf799cef1db 45 vector<string> artist_names; //filenames are stored in a vector string
georgekamar 3:ecf799cef1db 46 string fname;
georgekamar 3:ecf799cef1db 47 FILE *wave_file;
georgekamar 3:ecf799cef1db 48
georgekamar 3:ecf799cef1db 49 void SendCMD(),getreply(),ESPconfig(),ESPsetbaudrate();
georgekamar 3:ecf799cef1db 50
georgekamar 3:ecf799cef1db 51 /* implementation of strcmp that ignores cases */
georgekamar 3:ecf799cef1db 52 int strcmpi(char *s1, char *s2)
georgekamar 3:ecf799cef1db 53 {
georgekamar 3:ecf799cef1db 54 int i;
georgekamar 3:ecf799cef1db 55 for (i = 0; s1[i] && s2[i]; ++i)
georgekamar 3:ecf799cef1db 56 {
georgekamar 3:ecf799cef1db 57 /* If characters are same or inverting the
georgekamar 3:ecf799cef1db 58 6th bit makes them same */
georgekamar 3:ecf799cef1db 59 if (s1[i] == s2[i] || (s1[i] ^ 32) == s2[i])
georgekamar 3:ecf799cef1db 60 continue;
georgekamar 3:ecf799cef1db 61 else
georgekamar 3:ecf799cef1db 62 break;
georgekamar 3:ecf799cef1db 63 }
georgekamar 3:ecf799cef1db 64
georgekamar 3:ecf799cef1db 65 /* Compare the last (or first mismatching in
georgekamar 3:ecf799cef1db 66 case of not same) characters */
georgekamar 3:ecf799cef1db 67 if (s1[i] == s2[i])
georgekamar 3:ecf799cef1db 68 return 0;
georgekamar 3:ecf799cef1db 69
georgekamar 3:ecf799cef1db 70 // Set the 6th bit in both, then compare
georgekamar 3:ecf799cef1db 71 if ((s1[i] | 32) < (s2[i] | 32))
georgekamar 3:ecf799cef1db 72 return -1;
georgekamar 3:ecf799cef1db 73 return 1;
georgekamar 3:ecf799cef1db 74 }
georgekamar 3:ecf799cef1db 75
georgekamar 3:ecf799cef1db 76 void read_file_names(char *dir, vector<string> &filenames) // function that reads in file names from sd cards
sarthakjaiswal 0:4b3056d3c684 77 {
sarthakjaiswal 0:4b3056d3c684 78 DIR *dp;
sarthakjaiswal 0:4b3056d3c684 79 struct dirent *dirp;
sarthakjaiswal 0:4b3056d3c684 80 dp = opendir(dir);
sarthakjaiswal 0:4b3056d3c684 81 //read all directory and file names in current directory into filename vector
georgekamar 3:ecf799cef1db 82 if(dp == NULL){
georgekamar 3:ecf799cef1db 83 return;
georgekamar 3:ecf799cef1db 84 }
georgekamar 3:ecf799cef1db 85 if((dirp = readdir(dp)) != NULL) {
georgekamar 3:ecf799cef1db 86 filenames.clear();
georgekamar 3:ecf799cef1db 87 filenames.push_back(string(dirp->d_name));
georgekamar 3:ecf799cef1db 88 }
georgekamar 3:ecf799cef1db 89
sarthakjaiswal 0:4b3056d3c684 90 while((dirp = readdir(dp)) != NULL) {
sarthakjaiswal 0:4b3056d3c684 91 filenames.push_back(string(dirp->d_name));
sarthakjaiswal 0:4b3056d3c684 92 }
sarthakjaiswal 0:4b3056d3c684 93 }
georgekamar 3:ecf799cef1db 94
georgekamar 3:ecf799cef1db 95 char pcCommand[1024] = "";
georgekamar 3:ecf799cef1db 96 char espCommand[1024] = "";
georgekamar 3:ecf799cef1db 97 string testIt = "";
georgekamar 3:ecf799cef1db 98 bool flag = false;
georgekamar 3:ecf799cef1db 99 bool espflag = false;
georgekamar 3:ecf799cef1db 100
georgekamar 3:ecf799cef1db 101 int espcnt = -1;
georgekamar 3:ecf799cef1db 102
georgekamar 3:ecf799cef1db 103 void dev_recv()
sarthakjaiswal 0:4b3056d3c684 104 {
georgekamar 3:ecf799cef1db 105 while(esp.readable()) {
georgekamar 3:ecf799cef1db 106
georgekamar 3:ecf799cef1db 107 if(espcnt == -1) {
georgekamar 3:ecf799cef1db 108 espcnt++;
georgekamar 3:ecf799cef1db 109 esp.getc();
georgekamar 3:ecf799cef1db 110 } else {
georgekamar 3:ecf799cef1db 111 espCommand[espcnt] = esp.getc();
georgekamar 3:ecf799cef1db 112 espcnt++;
georgekamar 3:ecf799cef1db 113
georgekamar 3:ecf799cef1db 114 if(espCommand[espcnt-1] == 34) {
georgekamar 3:ecf799cef1db 115 playing = 0;
georgekamar 3:ecf799cef1db 116 espflag = true;
georgekamar 3:ecf799cef1db 117 }
georgekamar 3:ecf799cef1db 118 }
sarthakjaiswal 0:4b3056d3c684 119 }
georgekamar 3:ecf799cef1db 120
sarthakjaiswal 0:4b3056d3c684 121 }
georgekamar 3:ecf799cef1db 122
georgekamar 3:ecf799cef1db 123 int cnt = -1;
georgekamar 3:ecf799cef1db 124
georgekamar 3:ecf799cef1db 125 void pc_recv()
sarthakjaiswal 0:4b3056d3c684 126 {
georgekamar 3:ecf799cef1db 127 while(pc.readable()) {
georgekamar 3:ecf799cef1db 128
georgekamar 3:ecf799cef1db 129 if(cnt == -1) {
georgekamar 3:ecf799cef1db 130 cnt++;
georgekamar 3:ecf799cef1db 131 pc.getc();
georgekamar 3:ecf799cef1db 132 } else {
georgekamar 3:ecf799cef1db 133 pcCommand[cnt] = pc.getc();
georgekamar 3:ecf799cef1db 134 cnt++;
georgekamar 3:ecf799cef1db 135
georgekamar 3:ecf799cef1db 136 if(pcCommand[cnt-1] == 34) {
georgekamar 3:ecf799cef1db 137 playing = 0;
georgekamar 3:ecf799cef1db 138 flag = true;
georgekamar 3:ecf799cef1db 139 }
georgekamar 3:ecf799cef1db 140 }
sarthakjaiswal 0:4b3056d3c684 141 }
sarthakjaiswal 0:4b3056d3c684 142 }
amaclean6 2:54dcfef5c648 143
georgekamar 3:ecf799cef1db 144 string song = "";
georgekamar 3:ecf799cef1db 145 string artist = "";
sarthakjaiswal 0:4b3056d3c684 146
georgekamar 3:ecf799cef1db 147 void executeCommand(char command[])
sarthakjaiswal 0:4b3056d3c684 148 {
georgekamar 3:ecf799cef1db 149
georgekamar 3:ecf799cef1db 150 uLCD.printf("Command: %s\n", command);
georgekamar 3:ecf799cef1db 151
georgekamar 3:ecf799cef1db 152 char parsedCommand[20][20];
georgekamar 3:ecf799cef1db 153 int finalCommand = 0;
georgekamar 3:ecf799cef1db 154 song = "";
georgekamar 3:ecf799cef1db 155 int i,j,ctr;
georgekamar 3:ecf799cef1db 156
georgekamar 3:ecf799cef1db 157 j=0; ctr=0;
georgekamar 3:ecf799cef1db 158 for(i=0;i<=(strlen(command));i++)
georgekamar 3:ecf799cef1db 159 {
georgekamar 3:ecf799cef1db 160 // if space or NULL found, assign NULL into parsedCommand[ctr]
georgekamar 3:ecf799cef1db 161 if(command[i]==' '||command[i]=='\0')
georgekamar 3:ecf799cef1db 162 {
georgekamar 3:ecf799cef1db 163 parsedCommand[ctr][j]='\0';
georgekamar 3:ecf799cef1db 164 ctr++; //for next word
georgekamar 3:ecf799cef1db 165 j=0; //for next word, init index to 0
georgekamar 3:ecf799cef1db 166 }
georgekamar 3:ecf799cef1db 167 else
georgekamar 3:ecf799cef1db 168 {
georgekamar 3:ecf799cef1db 169 parsedCommand[ctr][j]=command[i];
georgekamar 3:ecf799cef1db 170 j++;
georgekamar 3:ecf799cef1db 171 }
georgekamar 3:ecf799cef1db 172 }
georgekamar 3:ecf799cef1db 173
georgekamar 3:ecf799cef1db 174 if(strcmp (parsedCommand[0],"play") == 0) {
georgekamar 3:ecf799cef1db 175 finalCommand = 1;
georgekamar 3:ecf799cef1db 176 }else if(strcmp (parsedCommand[0],"stop") == 0) {
georgekamar 3:ecf799cef1db 177 finalCommand = 0;
georgekamar 3:ecf799cef1db 178 }else if(strcmp (parsedCommand[0],"playnext") == 0) {
georgekamar 3:ecf799cef1db 179 finalCommand = 2;
georgekamar 3:ecf799cef1db 180 }else if(strcmp (parsedCommand[0],"playback") == 0) {
georgekamar 3:ecf799cef1db 181 finalCommand = 3;
georgekamar 3:ecf799cef1db 182 }
georgekamar 3:ecf799cef1db 183
georgekamar 3:ecf799cef1db 184
georgekamar 3:ecf799cef1db 185 int ii = 2;
georgekamar 3:ecf799cef1db 186 int songLength = 0;
georgekamar 3:ecf799cef1db 187 int artistLength = 0;
georgekamar 3:ecf799cef1db 188
georgekamar 3:ecf799cef1db 189
georgekamar 3:ecf799cef1db 190 if(strcmp (parsedCommand[0],"play") == 0) {
georgekamar 3:ecf799cef1db 191 ctr--;
georgekamar 3:ecf799cef1db 192 artist = "";
georgekamar 3:ecf799cef1db 193 if(strcmp (parsedCommand[1],"song") == 0) {
georgekamar 3:ecf799cef1db 194 while((ii <= ctr) && (strcmp (parsedCommand[ii],"artist") != 0)){
georgekamar 3:ecf799cef1db 195 string songstr(parsedCommand[ii]);
georgekamar 3:ecf799cef1db 196 songLength++;
georgekamar 3:ecf799cef1db 197 if(ii == ctr || (strcmp (parsedCommand[ii+1],"artist") == 0)){
georgekamar 3:ecf799cef1db 198 song = song + songstr;
georgekamar 3:ecf799cef1db 199 }else{
georgekamar 3:ecf799cef1db 200 song = song + songstr + " ";
georgekamar 3:ecf799cef1db 201 }
georgekamar 3:ecf799cef1db 202 ii++;
georgekamar 3:ecf799cef1db 203 }
georgekamar 3:ecf799cef1db 204 if(strcmp (parsedCommand[ii],"artist") == 0) {
georgekamar 3:ecf799cef1db 205
georgekamar 3:ecf799cef1db 206 ii++;
georgekamar 3:ecf799cef1db 207 while(ii <= ctr) {
georgekamar 3:ecf799cef1db 208 string artiststr(parsedCommand[ii]);
georgekamar 3:ecf799cef1db 209 artistLength++;
georgekamar 3:ecf799cef1db 210 if(ii == ctr) {
georgekamar 3:ecf799cef1db 211 artist = artist + artiststr;
georgekamar 3:ecf799cef1db 212 } else {
georgekamar 3:ecf799cef1db 213 artist = artist + artiststr + " ";
georgekamar 3:ecf799cef1db 214 }
georgekamar 3:ecf799cef1db 215 ii++;
georgekamar 3:ecf799cef1db 216 }
georgekamar 3:ecf799cef1db 217 }
georgekamar 3:ecf799cef1db 218 }else if(strcmp (parsedCommand[1],"artist") == 0) {
georgekamar 3:ecf799cef1db 219
georgekamar 3:ecf799cef1db 220 while(ii <= ctr){
georgekamar 3:ecf799cef1db 221 string artiststr(parsedCommand[ii]);
georgekamar 3:ecf799cef1db 222 artistLength++;
georgekamar 3:ecf799cef1db 223 if(ii == ctr) {
georgekamar 3:ecf799cef1db 224 artist = artist + artiststr;
georgekamar 3:ecf799cef1db 225 } else {
georgekamar 3:ecf799cef1db 226 artist = artist + artiststr + " ";
georgekamar 3:ecf799cef1db 227 }
georgekamar 3:ecf799cef1db 228 ii++;
georgekamar 3:ecf799cef1db 229 }
georgekamar 3:ecf799cef1db 230 }
georgekamar 3:ecf799cef1db 231 }
georgekamar 3:ecf799cef1db 232
sarthakjaiswal 0:4b3056d3c684 233 sdDetect.mode(PullUp);
sarthakjaiswal 0:4b3056d3c684 234 wait(.1);
sarthakjaiswal 0:4b3056d3c684 235 //wait after pulling up the sd card,
amaclean6 2:54dcfef5c648 236
amaclean6 2:54dcfef5c648 237 uLCD.cls();
sarthakjaiswal 1:45d8f6557ff8 238 //detects whethere there is a SD card or not.. if not then it prints and informs the user
georgekamar 3:ecf799cef1db 239 while(sdDetect == 0) {
amaclean6 2:54dcfef5c648 240 uLCD.locate(0,0);
amaclean6 2:54dcfef5c648 241 uLCD.printf("Insert SD Card");
sarthakjaiswal 0:4b3056d3c684 242 wait(.5);
sarthakjaiswal 1:45d8f6557ff8 243 }
georgekamar 3:ecf799cef1db 244 uLCD.cls();
georgekamar 3:ecf799cef1db 245
sarthakjaiswal 0:4b3056d3c684 246 wait(.5);
sarthakjaiswal 0:4b3056d3c684 247 sd.disk_initialize();
georgekamar 3:ecf799cef1db 248
georgekamar 3:ecf799cef1db 249
georgekamar 3:ecf799cef1db 250 switch(finalCommand) {
georgekamar 3:ecf799cef1db 251
georgekamar 3:ecf799cef1db 252 case 0: // stop
georgekamar 3:ecf799cef1db 253 {
georgekamar 3:ecf799cef1db 254 fclose(wave_file);
georgekamar 3:ecf799cef1db 255 uLCD.cls();
georgekamar 3:ecf799cef1db 256 playing = false;
georgekamar 3:ecf799cef1db 257 pc.printf("Case 0: Stop !");
georgekamar 3:ecf799cef1db 258 break;
georgekamar 3:ecf799cef1db 259 }
georgekamar 3:ecf799cef1db 260 case 1: // play song
georgekamar 3:ecf799cef1db 261 {
georgekamar 3:ecf799cef1db 262 read_file_names("/sd/wave", artist_names);
georgekamar 3:ecf799cef1db 263
georgekamar 3:ecf799cef1db 264 if((strcmp (artist.c_str(), "") == 0) && (strcmp (song.c_str(), "") != 0)) { // no artist, but song name
georgekamar 3:ecf799cef1db 265
georgekamar 3:ecf799cef1db 266 int search = 1;
georgekamar 3:ecf799cef1db 267 int artistCounter = 0;
georgekamar 3:ecf799cef1db 268 artist = "";
georgekamar 3:ecf799cef1db 269 while(search){
georgekamar 3:ecf799cef1db 270 fname = "/sd/wave/" + artist_names[artistCounter] + "/" + song + ".wav";
georgekamar 3:ecf799cef1db 271 wave_file = fopen(fname.c_str(),"r");
georgekamar 3:ecf799cef1db 272 if(wave_file != NULL){
georgekamar 3:ecf799cef1db 273 search = 0;
georgekamar 3:ecf799cef1db 274 fclose(wave_file);
georgekamar 3:ecf799cef1db 275 string artistDirectory = "/sd/wave/" + artist_names[artistCounter];
georgekamar 3:ecf799cef1db 276 char *charArtistDirectory = new char[artistDirectory.length() + 1];
georgekamar 3:ecf799cef1db 277 strcpy(charArtistDirectory, artistDirectory.c_str());
georgekamar 3:ecf799cef1db 278 read_file_names(charArtistDirectory, song_names);
georgekamar 3:ecf799cef1db 279 artist = artist_names[artistCounter];
georgekamar 3:ecf799cef1db 280 delete [] charArtistDirectory;
georgekamar 3:ecf799cef1db 281 playing = true;
georgekamar 3:ecf799cef1db 282 }else{
georgekamar 3:ecf799cef1db 283 artistCounter++;
georgekamar 3:ecf799cef1db 284 }
georgekamar 3:ecf799cef1db 285 if(artistCounter >= artist_names.size()){
georgekamar 3:ecf799cef1db 286 uLCD.printf("Song not found");
georgekamar 3:ecf799cef1db 287 break;
georgekamar 3:ecf799cef1db 288 }
georgekamar 3:ecf799cef1db 289 }
georgekamar 3:ecf799cef1db 290
georgekamar 3:ecf799cef1db 291 } else if((strcmp (artist.c_str(), "") == 0) && (strcmp (song.c_str(), "") == 0)) { // no artist, no song name. Plays random song
georgekamar 3:ecf799cef1db 292
georgekamar 3:ecf799cef1db 293 artist = "";
georgekamar 3:ecf799cef1db 294 int seedVal = seed * 1000;
georgekamar 3:ecf799cef1db 295 srand(seedVal);
georgekamar 3:ecf799cef1db 296 int artistIndex = rand() % artist_names.size();
georgekamar 3:ecf799cef1db 297 string artistDirectory = "/sd/wave/" + artist_names[artistIndex];
georgekamar 3:ecf799cef1db 298 char *charArtistDirectory = new char[artistDirectory.length() + 1];
georgekamar 3:ecf799cef1db 299 strcpy(charArtistDirectory, artistDirectory.c_str());
georgekamar 3:ecf799cef1db 300 read_file_names(charArtistDirectory, song_names);
georgekamar 3:ecf799cef1db 301 delete [] charArtistDirectory;
georgekamar 3:ecf799cef1db 302 int songIndex = rand() % song_names.size();
georgekamar 3:ecf799cef1db 303 fname = artistDirectory + "/" + song_names[songIndex];
georgekamar 3:ecf799cef1db 304 song = song_names[songIndex].substr(0 ,((song_names[songIndex]).length() - 4));
georgekamar 3:ecf799cef1db 305 artist = artist_names[artistIndex];
georgekamar 3:ecf799cef1db 306 playing = true;
georgekamar 3:ecf799cef1db 307
georgekamar 3:ecf799cef1db 308 }else if((strcmp (artist.c_str(), "") != 0) && (strcmp (song.c_str(), "") == 0)){ //no song name but artist
georgekamar 3:ecf799cef1db 309 string artistDirectory = "/sd/wave/" + artist;
georgekamar 3:ecf799cef1db 310 char *charArtistDirectory = new char[artistDirectory.length() + 1];
georgekamar 3:ecf799cef1db 311 strcpy(charArtistDirectory, artistDirectory.c_str());
georgekamar 3:ecf799cef1db 312 read_file_names(charArtistDirectory, song_names);
georgekamar 3:ecf799cef1db 313 delete [] charArtistDirectory;
georgekamar 3:ecf799cef1db 314 fname = artistDirectory + "/" + song_names[0];
georgekamar 3:ecf799cef1db 315 song = song_names[0].substr(0, ((song_names[0]).length() - 4));
georgekamar 3:ecf799cef1db 316 wave_file = fopen(fname.c_str(),"r");
georgekamar 3:ecf799cef1db 317 playing = true;
georgekamar 3:ecf799cef1db 318 if(wave_file == NULL){
georgekamar 3:ecf799cef1db 319 uLCD.printf("Artist not found");
georgekamar 3:ecf799cef1db 320 playing = false;
georgekamar 3:ecf799cef1db 321 }
georgekamar 3:ecf799cef1db 322 fclose(wave_file);
georgekamar 3:ecf799cef1db 323 }else{ // song name and artist
georgekamar 3:ecf799cef1db 324 fname = "/sd/wave/" + artist + "/" + song + ".wav";
georgekamar 3:ecf799cef1db 325 wave_file = fopen(fname.c_str(),"r");
georgekamar 3:ecf799cef1db 326 playing = true;
georgekamar 3:ecf799cef1db 327 if(wave_file == NULL){
georgekamar 3:ecf799cef1db 328 uLCD.printf("Song not found");
georgekamar 3:ecf799cef1db 329 playing = false;
georgekamar 3:ecf799cef1db 330 }
georgekamar 3:ecf799cef1db 331 fclose(wave_file);
georgekamar 3:ecf799cef1db 332 }
georgekamar 3:ecf799cef1db 333
georgekamar 3:ecf799cef1db 334 int entering = 1;
georgekamar 3:ecf799cef1db 335
georgekamar 3:ecf799cef1db 336 while(playing == true){
georgekamar 3:ecf799cef1db 337 uLCD.cls();
georgekamar 3:ecf799cef1db 338 uLCD.printf("Now playing ");
georgekamar 3:ecf799cef1db 339 uLCD.printf("\n%s\n%s\n", song.c_str(), artist.c_str());
georgekamar 3:ecf799cef1db 340
georgekamar 3:ecf799cef1db 341 if(entering == 1) {
georgekamar 3:ecf799cef1db 342 entering = 0;
georgekamar 3:ecf799cef1db 343 string songWav = song + ".wav";
georgekamar 3:ecf799cef1db 344 char *songNameChar = new char[songWav.length() + 1];
georgekamar 3:ecf799cef1db 345 strcpy(songNameChar, songWav.c_str());
georgekamar 3:ecf799cef1db 346 for(int index=0; index<song_names.size(); index++) {
georgekamar 3:ecf799cef1db 347 char *songNameChar2 = new char[song_names[index].length() + 1];
georgekamar 3:ecf799cef1db 348 strcpy(songNameChar2, song_names[index].c_str());
georgekamar 3:ecf799cef1db 349 if(strcmpi(songNameChar, songNameChar2) == 0) {
georgekamar 3:ecf799cef1db 350 currentSongIndex = index;
georgekamar 3:ecf799cef1db 351 delete [] songNameChar2;
georgekamar 3:ecf799cef1db 352 break;
georgekamar 3:ecf799cef1db 353 }
georgekamar 3:ecf799cef1db 354 delete [] songNameChar2;
georgekamar 3:ecf799cef1db 355 }
georgekamar 3:ecf799cef1db 356 delete [] songNameChar;
georgekamar 3:ecf799cef1db 357 }
georgekamar 3:ecf799cef1db 358 wave_file = fopen(fname.c_str(),"r");
georgekamar 3:ecf799cef1db 359 waver.play(wave_file);
georgekamar 3:ecf799cef1db 360 fclose(wave_file);
georgekamar 3:ecf799cef1db 361 if(!flag && !espflag){
georgekamar 3:ecf799cef1db 362 if (currentSongIndex < (song_names.size()-1)) {
georgekamar 3:ecf799cef1db 363 currentSongIndex++;
georgekamar 3:ecf799cef1db 364 } else if (currentSongIndex == (song_names.size()-1)) {
georgekamar 3:ecf799cef1db 365 currentSongIndex = 0;
georgekamar 3:ecf799cef1db 366 }
georgekamar 3:ecf799cef1db 367 song = song_names[currentSongIndex].substr(0, ((song_names[currentSongIndex]).length() - 4));
georgekamar 3:ecf799cef1db 368 fname = "/sd/wave/" + artist + "/" + song + ".wav";
georgekamar 3:ecf799cef1db 369 }
georgekamar 3:ecf799cef1db 370 }
georgekamar 3:ecf799cef1db 371
georgekamar 3:ecf799cef1db 372 // fclose(wave_file);
georgekamar 3:ecf799cef1db 373
georgekamar 3:ecf799cef1db 374 pc.printf("Case 1: Play !");
georgekamar 3:ecf799cef1db 375 break;
georgekamar 3:ecf799cef1db 376 }
georgekamar 3:ecf799cef1db 377 case 2: // play next
georgekamar 3:ecf799cef1db 378 {
georgekamar 3:ecf799cef1db 379
georgekamar 3:ecf799cef1db 380 if(currentSongIndex != -1){
georgekamar 3:ecf799cef1db 381 currentSongIndex++;
georgekamar 3:ecf799cef1db 382 playing = true;
georgekamar 3:ecf799cef1db 383 song = song_names[currentSongIndex].substr(0, ((song_names[currentSongIndex]).length() - 4));
georgekamar 3:ecf799cef1db 384 fname = "/sd/wave/" + artist + "/" + song + ".wav";
georgekamar 3:ecf799cef1db 385 }else{
georgekamar 3:ecf799cef1db 386 uLCD.printf("No song playing");
georgekamar 3:ecf799cef1db 387 }
georgekamar 3:ecf799cef1db 388
georgekamar 3:ecf799cef1db 389 while(playing == true){
georgekamar 3:ecf799cef1db 390 uLCD.cls();
georgekamar 3:ecf799cef1db 391 uLCD.printf("Now playing ");
georgekamar 3:ecf799cef1db 392 uLCD.printf("\n%s\n%s\n", song.c_str(), artist.c_str());
georgekamar 3:ecf799cef1db 393
georgekamar 3:ecf799cef1db 394
georgekamar 3:ecf799cef1db 395 wave_file = fopen(fname.c_str(),"r");
georgekamar 3:ecf799cef1db 396 waver.play(wave_file);
georgekamar 3:ecf799cef1db 397 fclose(wave_file);
georgekamar 3:ecf799cef1db 398 if(!flag && !espflag){
georgekamar 3:ecf799cef1db 399 if (currentSongIndex < (song_names.size()-1)) {
georgekamar 3:ecf799cef1db 400 currentSongIndex++;
georgekamar 3:ecf799cef1db 401 } else if (currentSongIndex == (song_names.size()-1)) {
georgekamar 3:ecf799cef1db 402 currentSongIndex = 0;
georgekamar 3:ecf799cef1db 403 }
georgekamar 3:ecf799cef1db 404 song = song_names[currentSongIndex].substr(0, ((song_names[currentSongIndex]).length() - 4));
georgekamar 3:ecf799cef1db 405 fname = "/sd/wave/" + artist + "/" + song + ".wav";
georgekamar 3:ecf799cef1db 406 }
georgekamar 3:ecf799cef1db 407
georgekamar 3:ecf799cef1db 408 }
georgekamar 3:ecf799cef1db 409
georgekamar 3:ecf799cef1db 410 pc.printf("Case 2: Play Next!");
georgekamar 3:ecf799cef1db 411 break;
georgekamar 3:ecf799cef1db 412 }
georgekamar 3:ecf799cef1db 413 case 3: // play back
georgekamar 3:ecf799cef1db 414 {
georgekamar 3:ecf799cef1db 415 if(currentSongIndex != -1){
georgekamar 3:ecf799cef1db 416 if (currentSongIndex > 0) {
georgekamar 3:ecf799cef1db 417 currentSongIndex--;
georgekamar 3:ecf799cef1db 418 } else if (currentSongIndex == 0) {
georgekamar 3:ecf799cef1db 419 currentSongIndex = (song_names.size()-1);
georgekamar 3:ecf799cef1db 420 }
georgekamar 3:ecf799cef1db 421 playing = true;
georgekamar 3:ecf799cef1db 422 song = song_names[currentSongIndex].substr(0, ((song_names[currentSongIndex]).length() - 4));
georgekamar 3:ecf799cef1db 423 fname = "/sd/wave/" + artist + "/" + song + ".wav";
georgekamar 3:ecf799cef1db 424 }else{
georgekamar 3:ecf799cef1db 425 uLCD.printf("No song playing");
georgekamar 3:ecf799cef1db 426 }
georgekamar 3:ecf799cef1db 427
georgekamar 3:ecf799cef1db 428 while(playing == true){
georgekamar 3:ecf799cef1db 429 uLCD.cls();
georgekamar 3:ecf799cef1db 430 uLCD.printf("Now playing ");
georgekamar 3:ecf799cef1db 431 uLCD.printf("\n%s\n%s\n", song.c_str(), artist.c_str());
georgekamar 3:ecf799cef1db 432
georgekamar 3:ecf799cef1db 433
georgekamar 3:ecf799cef1db 434 wave_file = fopen(fname.c_str(),"r");
georgekamar 3:ecf799cef1db 435 waver.play(wave_file);
georgekamar 3:ecf799cef1db 436 fclose(wave_file);
georgekamar 3:ecf799cef1db 437 if(!flag && !espflag){
georgekamar 3:ecf799cef1db 438 if (currentSongIndex < (song_names.size()-1)) {
georgekamar 3:ecf799cef1db 439 currentSongIndex++;
georgekamar 3:ecf799cef1db 440 } else if (currentSongIndex == (song_names.size()-1)) {
georgekamar 3:ecf799cef1db 441 currentSongIndex = 0;
georgekamar 3:ecf799cef1db 442 }
georgekamar 3:ecf799cef1db 443 song = song_names[currentSongIndex].substr(0, ((song_names[currentSongIndex]).length() - 4));
georgekamar 3:ecf799cef1db 444 fname = "/sd/wave/" + artist + "/" + song + ".wav";
georgekamar 3:ecf799cef1db 445 }
georgekamar 3:ecf799cef1db 446 }
georgekamar 3:ecf799cef1db 447 pc.printf("Case 3: Play Previous!");
georgekamar 3:ecf799cef1db 448 break;
georgekamar 3:ecf799cef1db 449 }
georgekamar 3:ecf799cef1db 450 default: // stop
georgekamar 3:ecf799cef1db 451 {
georgekamar 3:ecf799cef1db 452 pc.printf("DEFAULT");
georgekamar 3:ecf799cef1db 453 break;
georgekamar 3:ecf799cef1db 454 }
georgekamar 3:ecf799cef1db 455 }
georgekamar 3:ecf799cef1db 456
georgekamar 3:ecf799cef1db 457 }
georgekamar 3:ecf799cef1db 458
georgekamar 3:ecf799cef1db 459 int main(){
georgekamar 3:ecf799cef1db 460
georgekamar 3:ecf799cef1db 461 reset=0; //hardware reset for 8266
georgekamar 3:ecf799cef1db 462 pc.baud(9600); // set what you want here depending on your terminal program speed
georgekamar 3:ecf799cef1db 463 pc.printf("\f\n\r-------------ESP8266 Hardware Reset-------------\n\r");
georgekamar 3:ecf799cef1db 464 wait(0.5);
georgekamar 3:ecf799cef1db 465 reset=1;
georgekamar 3:ecf799cef1db 466 timeout=2;
georgekamar 3:ecf799cef1db 467 getreply();
georgekamar 3:ecf799cef1db 468 esp.baud(9600);
georgekamar 3:ecf799cef1db 469 ESPconfig(); //****************** include Config to set the ESP8266 configuration ***********************
georgekamar 3:ecf799cef1db 470
georgekamar 3:ecf799cef1db 471 pc.baud(9600);
georgekamar 3:ecf799cef1db 472 char oldCommand[1024];
georgekamar 3:ecf799cef1db 473 pc.attach(&pc_recv, Serial::RxIrq);
georgekamar 3:ecf799cef1db 474 esp.attach(&dev_recv, Serial::RxIrq);
georgekamar 3:ecf799cef1db 475
sarthakjaiswal 0:4b3056d3c684 476 while(1) {
georgekamar 3:ecf799cef1db 477
georgekamar 3:ecf799cef1db 478 if(flag){
georgekamar 3:ecf799cef1db 479 memset(oldCommand, '\0', 1024);
georgekamar 3:ecf799cef1db 480 pcCommand[cnt-1] = '\0';
georgekamar 3:ecf799cef1db 481 pc.printf("pcCommand: %s", pcCommand);
georgekamar 3:ecf799cef1db 482 strncpy(oldCommand, pcCommand, sizeof(pcCommand));
georgekamar 3:ecf799cef1db 483 flag = false;
georgekamar 3:ecf799cef1db 484 espflag = false;
georgekamar 3:ecf799cef1db 485 memset(pcCommand, '\0', sizeof(pcCommand));
georgekamar 3:ecf799cef1db 486 memset(espCommand, '\0', sizeof(espCommand));
georgekamar 3:ecf799cef1db 487 cnt = -1;
georgekamar 3:ecf799cef1db 488 espcnt = -1;
georgekamar 3:ecf799cef1db 489 executeCommand(oldCommand);
georgekamar 3:ecf799cef1db 490 }
georgekamar 3:ecf799cef1db 491
georgekamar 3:ecf799cef1db 492 if(espflag){
georgekamar 3:ecf799cef1db 493 memset(oldCommand, '\0', 1024);
georgekamar 3:ecf799cef1db 494 espCommand[espcnt-1] = '\0';
georgekamar 3:ecf799cef1db 495 for(int j = espcnt; j > 0; j--){
georgekamar 3:ecf799cef1db 496 if(espCommand[j] == 34){
georgekamar 3:ecf799cef1db 497 espCommand[j] = '\0';
georgekamar 3:ecf799cef1db 498 break;
georgekamar 3:ecf799cef1db 499 }
georgekamar 3:ecf799cef1db 500 }
georgekamar 3:ecf799cef1db 501 pc.printf("espCommand: %s", espCommand);
georgekamar 3:ecf799cef1db 502 strncpy(oldCommand, espCommand, sizeof(espCommand));
georgekamar 3:ecf799cef1db 503 espflag = false;
georgekamar 3:ecf799cef1db 504 flag = false;
georgekamar 3:ecf799cef1db 505 memset(espCommand, '\0', sizeof(espCommand));
georgekamar 3:ecf799cef1db 506 memset(pcCommand, '\0', sizeof(pcCommand));
georgekamar 3:ecf799cef1db 507 cnt = -1;
georgekamar 3:ecf799cef1db 508 espcnt = -1;
georgekamar 3:ecf799cef1db 509 executeCommand(oldCommand);
georgekamar 3:ecf799cef1db 510 }
georgekamar 3:ecf799cef1db 511
georgekamar 3:ecf799cef1db 512 }
georgekamar 3:ecf799cef1db 513
georgekamar 3:ecf799cef1db 514 }
georgekamar 3:ecf799cef1db 515
georgekamar 3:ecf799cef1db 516 void ESPsetbaudrate()
georgekamar 3:ecf799cef1db 517 {
georgekamar 3:ecf799cef1db 518 strcpy(snd, "AT+CIOBAUD=9600\r\n"); // change the numeric value to the required baudrate
georgekamar 3:ecf799cef1db 519 SendCMD();
georgekamar 3:ecf799cef1db 520 }
georgekamar 3:ecf799cef1db 521
georgekamar 3:ecf799cef1db 522 // +++++++++++++++++++++++++++++++++ This is for ESP8266 config only, run this once to set up the ESP8266 +++++++++++++++
georgekamar 3:ecf799cef1db 523 void ESPconfig()
georgekamar 3:ecf799cef1db 524 {
georgekamar 3:ecf799cef1db 525
georgekamar 3:ecf799cef1db 526 wait(5);
georgekamar 3:ecf799cef1db 527 pc.printf("\f---------- Starting ESP Config ----------\r\n\n");
georgekamar 3:ecf799cef1db 528 strcpy(snd,".\r\n.\r\n");
georgekamar 3:ecf799cef1db 529 SendCMD();
georgekamar 3:ecf799cef1db 530 wait(1);
georgekamar 3:ecf799cef1db 531 pc.printf("---------- Reset & get Firmware ----------\r\n");
georgekamar 3:ecf799cef1db 532 strcpy(snd,"node.restart()\r\n");
georgekamar 3:ecf799cef1db 533 SendCMD();
georgekamar 3:ecf799cef1db 534 timeout=5;
georgekamar 3:ecf799cef1db 535 getreply();
georgekamar 3:ecf799cef1db 536 pc.printf(buf);
georgekamar 3:ecf799cef1db 537
georgekamar 3:ecf799cef1db 538 wait(2);
georgekamar 3:ecf799cef1db 539
georgekamar 3:ecf799cef1db 540 pc.printf("\n---------- Get Version ----------\r\n");
georgekamar 3:ecf799cef1db 541 strcpy(snd,"print(node.info())\r\n");
georgekamar 3:ecf799cef1db 542 SendCMD();
georgekamar 3:ecf799cef1db 543 timeout=4;
georgekamar 3:ecf799cef1db 544 getreply();
georgekamar 3:ecf799cef1db 545 pc.printf(buf);
georgekamar 3:ecf799cef1db 546
georgekamar 3:ecf799cef1db 547 wait(3);
georgekamar 3:ecf799cef1db 548
georgekamar 3:ecf799cef1db 549 // set CWMODE to 1=Station,2=AP,3=BOTH, default mode 1 (Station)
georgekamar 3:ecf799cef1db 550 pc.printf("\n---------- Setting Mode ----------\r\n");
georgekamar 3:ecf799cef1db 551 strcpy(snd, "wifi.setmode(wifi.STATION)\r\n");
georgekamar 3:ecf799cef1db 552 SendCMD();
georgekamar 3:ecf799cef1db 553 timeout=4;
georgekamar 3:ecf799cef1db 554 getreply();
georgekamar 3:ecf799cef1db 555 pc.printf(buf);
georgekamar 3:ecf799cef1db 556
georgekamar 3:ecf799cef1db 557 wait(2);
georgekamar 3:ecf799cef1db 558
georgekamar 3:ecf799cef1db 559
georgekamar 3:ecf799cef1db 560
georgekamar 3:ecf799cef1db 561 pc.printf("\n---------- Listing Access Points ----------\r\n");
georgekamar 3:ecf799cef1db 562 strcpy(snd, "function listap(t)\r\n");
georgekamar 3:ecf799cef1db 563 SendCMD();
georgekamar 3:ecf799cef1db 564 wait(1);
georgekamar 3:ecf799cef1db 565 strcpy(snd, "for k,v in pairs(t) do\r\n");
georgekamar 3:ecf799cef1db 566 SendCMD();
georgekamar 3:ecf799cef1db 567 wait(1);
georgekamar 3:ecf799cef1db 568 strcpy(snd, "print(k..\" : \"..v)\r\n");
georgekamar 3:ecf799cef1db 569 SendCMD();
georgekamar 3:ecf799cef1db 570 wait(1);
georgekamar 3:ecf799cef1db 571 strcpy(snd, "end\r\n");
georgekamar 3:ecf799cef1db 572 SendCMD();
georgekamar 3:ecf799cef1db 573 wait(1);
georgekamar 3:ecf799cef1db 574 strcpy(snd, "end\r\n");
georgekamar 3:ecf799cef1db 575 SendCMD();
georgekamar 3:ecf799cef1db 576 wait(1);
georgekamar 3:ecf799cef1db 577 strcpy(snd, "wifi.sta.getap(listap)\r\n");
georgekamar 3:ecf799cef1db 578 SendCMD();
georgekamar 3:ecf799cef1db 579 wait(1);
georgekamar 3:ecf799cef1db 580 timeout=15;
georgekamar 3:ecf799cef1db 581 getreply();
georgekamar 3:ecf799cef1db 582 pc.printf(buf);
georgekamar 3:ecf799cef1db 583
georgekamar 3:ecf799cef1db 584 wait(2);
georgekamar 3:ecf799cef1db 585
georgekamar 3:ecf799cef1db 586 pc.printf("\n---------- Connecting to AP ----------\r\n");
georgekamar 3:ecf799cef1db 587 pc.printf("ssid = %s pwd = %s\r\n",ssid,pwd);
georgekamar 3:ecf799cef1db 588 strcpy(snd, "wifi.sta.config(\"");
georgekamar 3:ecf799cef1db 589 strcat(snd, ssid);
georgekamar 3:ecf799cef1db 590 strcat(snd, "\",\"");
georgekamar 3:ecf799cef1db 591 strcat(snd, pwd);
georgekamar 3:ecf799cef1db 592 strcat(snd, "\")\r\n");
georgekamar 3:ecf799cef1db 593 SendCMD();
georgekamar 3:ecf799cef1db 594 timeout=10;
georgekamar 3:ecf799cef1db 595 getreply();
georgekamar 3:ecf799cef1db 596 pc.printf(buf);
georgekamar 3:ecf799cef1db 597
georgekamar 3:ecf799cef1db 598 wait(5);
georgekamar 3:ecf799cef1db 599
georgekamar 3:ecf799cef1db 600 pc.printf("\n---------- Get IP's ----------\r\n");
georgekamar 3:ecf799cef1db 601 strcpy(snd, "print(wifi.sta.getip())\r\n");
georgekamar 3:ecf799cef1db 602 SendCMD();
georgekamar 3:ecf799cef1db 603 timeout=3;
georgekamar 3:ecf799cef1db 604 getreply();
georgekamar 3:ecf799cef1db 605 pc.printf(buf);
georgekamar 3:ecf799cef1db 606
georgekamar 3:ecf799cef1db 607 wait(1);
georgekamar 3:ecf799cef1db 608
georgekamar 3:ecf799cef1db 609 pc.printf("\n---------- Get Connection Status ----------\r\n");
georgekamar 3:ecf799cef1db 610 strcpy(snd, "print(wifi.sta.status())\r\n");
georgekamar 3:ecf799cef1db 611 SendCMD();
georgekamar 3:ecf799cef1db 612 timeout=5;
georgekamar 3:ecf799cef1db 613 getreply();
georgekamar 3:ecf799cef1db 614 pc.printf(buf);
georgekamar 3:ecf799cef1db 615
georgekamar 3:ecf799cef1db 616 pc.printf("\n\n\n If you get a valid (non zero) IP, ESP8266 has been set up.\r\n");
georgekamar 3:ecf799cef1db 617 pc.printf(" Run this if you want to reconfig the ESP8266 at any time.\r\n");
georgekamar 3:ecf799cef1db 618 pc.printf(" It saves the SSID and password settings internally\r\n");
georgekamar 3:ecf799cef1db 619 wait(10);
georgekamar 3:ecf799cef1db 620
georgekamar 3:ecf799cef1db 621
georgekamar 3:ecf799cef1db 622 pc.printf("\n---------- Setting up http server ----------\r\n");
georgekamar 3:ecf799cef1db 623 strcpy(snd, "srv=net.createServer(net.TCP)\r\n");
georgekamar 3:ecf799cef1db 624 SendCMD();
georgekamar 3:ecf799cef1db 625 wait(1);
georgekamar 3:ecf799cef1db 626
georgekamar 3:ecf799cef1db 627 strcpy(snd, "srv:listen(80,function(conn)\r\n");
georgekamar 3:ecf799cef1db 628 SendCMD();
georgekamar 3:ecf799cef1db 629 wait(1);
georgekamar 3:ecf799cef1db 630
georgekamar 3:ecf799cef1db 631 strcpy(snd, "conn:on(\"receive\",function(conn,payload)\r\n");
georgekamar 3:ecf799cef1db 632 SendCMD();
georgekamar 3:ecf799cef1db 633 wait(1);
georgekamar 3:ecf799cef1db 634
georgekamar 3:ecf799cef1db 635 strcpy(snd, "print(payload)");
georgekamar 3:ecf799cef1db 636 SendCMD();
georgekamar 3:ecf799cef1db 637 wait(1);
georgekamar 3:ecf799cef1db 638
georgekamar 3:ecf799cef1db 639 strcpy(snd, "end)\r\n");
georgekamar 3:ecf799cef1db 640 SendCMD();
georgekamar 3:ecf799cef1db 641 wait(1);
georgekamar 3:ecf799cef1db 642
georgekamar 3:ecf799cef1db 643 strcpy(snd, "conn:on(\"sent\",function(conn) conn:close() end)\r\n");
georgekamar 3:ecf799cef1db 644 SendCMD();
georgekamar 3:ecf799cef1db 645 wait(1);
georgekamar 3:ecf799cef1db 646
georgekamar 3:ecf799cef1db 647 strcpy(snd, "end)\r\n");
georgekamar 3:ecf799cef1db 648 SendCMD();
georgekamar 3:ecf799cef1db 649 wait(1);
georgekamar 3:ecf799cef1db 650
georgekamar 3:ecf799cef1db 651 timeout=17;
georgekamar 3:ecf799cef1db 652 getreply();
georgekamar 3:ecf799cef1db 653 pc.printf(buf);
georgekamar 3:ecf799cef1db 654 pc.printf("\r\nDONE");
georgekamar 3:ecf799cef1db 655 }
georgekamar 3:ecf799cef1db 656
georgekamar 3:ecf799cef1db 657 void SendCMD()
georgekamar 3:ecf799cef1db 658 {
georgekamar 3:ecf799cef1db 659 esp.printf("%s", snd);
georgekamar 3:ecf799cef1db 660 }
georgekamar 3:ecf799cef1db 661
georgekamar 3:ecf799cef1db 662 void getreply()
georgekamar 3:ecf799cef1db 663 {
georgekamar 3:ecf799cef1db 664 memset(buf, '\0', sizeof(buf));
georgekamar 3:ecf799cef1db 665 t.start();
georgekamar 3:ecf799cef1db 666 ended=0;
georgekamar 3:ecf799cef1db 667 count=0;
georgekamar 3:ecf799cef1db 668 while(!ended) {
georgekamar 3:ecf799cef1db 669 if(esp.readable()) {
georgekamar 3:ecf799cef1db 670 buf[count] = esp.getc();
georgekamar 3:ecf799cef1db 671 count++;
georgekamar 3:ecf799cef1db 672 }
georgekamar 3:ecf799cef1db 673 if(t.read() > timeout) {
georgekamar 3:ecf799cef1db 674 ended = 1;
georgekamar 3:ecf799cef1db 675 t.stop();
georgekamar 3:ecf799cef1db 676 t.reset();
sarthakjaiswal 0:4b3056d3c684 677 }
sarthakjaiswal 0:4b3056d3c684 678 }
sarthakjaiswal 0:4b3056d3c684 679 }
georgekamar 3:ecf799cef1db 680
georgekamar 3:ecf799cef1db 681