a

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

Fork of WavePlayer_HelloWorld by jim hamblen

Committer:
ychen644
Date:
Wed Apr 26 14:41:00 2017 +0000
Revision:
2:09abe388d23e
Parent:
1:5b8e223e983d
a

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ychen644 2:09abe388d23e 1 //
ychen644 2:09abe388d23e 2 //#include "mbed.h"
ychen644 2:09abe388d23e 3 //#include "SDFileSystem.h"
ychen644 2:09abe388d23e 4 //#include "wave_player.h"
ychen644 2:09abe388d23e 5 //
ychen644 2:09abe388d23e 6 //
ychen644 2:09abe388d23e 7 //SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
ychen644 2:09abe388d23e 8 //
ychen644 2:09abe388d23e 9 //AnalogOut DACout(p18);
ychen644 2:09abe388d23e 10 //
ychen644 2:09abe388d23e 11 //wave_player waver(&DACout);
ychen644 2:09abe388d23e 12 //
ychen644 2:09abe388d23e 13 //int main()
ychen644 2:09abe388d23e 14 //{
ychen644 2:09abe388d23e 15 // FILE *wave_file;
ychen644 2:09abe388d23e 16 // printf("\n\n\nHello, wave world!\n");
ychen644 2:09abe388d23e 17 // wave_file=fopen("/sd/wavfiles/increasing.wav","r");
ychen644 2:09abe388d23e 18 // waver.play(wave_file);
ychen644 2:09abe388d23e 19 // fclose(wave_file);
ychen644 2:09abe388d23e 20 //}
ychen644 2:09abe388d23e 21
4180_1 1:5b8e223e983d 22
4180_1 1:5b8e223e983d 23 #include "mbed.h"
ychen644 2:09abe388d23e 24 #include "uLCD_4DGL.h"
ychen644 2:09abe388d23e 25 #include "queue.h"
4180_1 1:5b8e223e983d 26 #include "SDFileSystem.h"
4180_1 1:5b8e223e983d 27 #include "wave_player.h"
ychen644 2:09abe388d23e 28 #include <string>
ychen644 2:09abe388d23e 29 #include <vector>
ychen644 2:09abe388d23e 30 #include <stdio.h>
ychen644 2:09abe388d23e 31
4180_1 1:5b8e223e983d 32 SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
4180_1 1:5b8e223e983d 33
4180_1 1:5b8e223e983d 34 AnalogOut DACout(p18);
4180_1 1:5b8e223e983d 35
4180_1 1:5b8e223e983d 36 wave_player waver(&DACout);
ychen644 2:09abe388d23e 37
ychen644 2:09abe388d23e 38 // uLCD
ychen644 2:09abe388d23e 39 uLCD_4DGL uLCD(p28,p27,p29); // serial tx, serial rx, reset pin;
ychen644 2:09abe388d23e 40
ychen644 2:09abe388d23e 41 // Serial PC
ychen644 2:09abe388d23e 42 Serial myPc( USBTX, USBRX );
ychen644 2:09abe388d23e 43
ychen644 2:09abe388d23e 44 // Bluetooth
ychen644 2:09abe388d23e 45 Serial blue(p9,p10);
ychen644 2:09abe388d23e 46
ychen644 2:09abe388d23e 47 // Queue
ychen644 2:09abe388d23e 48 Queue myQueue(1,15);
ychen644 2:09abe388d23e 49 Queue tempQueue(1,15);
ychen644 2:09abe388d23e 50
ychen644 2:09abe388d23e 51 // Shiftbrite LED
ychen644 2:09abe388d23e 52 DigitalOut latch(p15);
ychen644 2:09abe388d23e 53 DigitalOut enable(p16);
ychen644 2:09abe388d23e 54 SPI spi(p11, p12, p13);
ychen644 2:09abe388d23e 55
ychen644 2:09abe388d23e 56 // LED code
ychen644 2:09abe388d23e 57 void RGB_LED(int red, int green, int blue) {
ychen644 2:09abe388d23e 58 unsigned int low_color=0;
ychen644 2:09abe388d23e 59 unsigned int high_color=0;
ychen644 2:09abe388d23e 60 high_color=(blue<<4)|((red&0x3C0)>>6);
ychen644 2:09abe388d23e 61 low_color=(((red&0x3F)<<10)|(green));
ychen644 2:09abe388d23e 62 spi.write(high_color);
ychen644 2:09abe388d23e 63 spi.write(low_color);
ychen644 2:09abe388d23e 64 latch=1;
ychen644 2:09abe388d23e 65 latch=0;
ychen644 2:09abe388d23e 66 }
ychen644 2:09abe388d23e 67 FILE *wave_file;
ychen644 2:09abe388d23e 68 void speaker(const char* path) {
ychen644 2:09abe388d23e 69 wave_file=fopen(path,"r");
ychen644 2:09abe388d23e 70 waver.play(wave_file);
ychen644 2:09abe388d23e 71 fclose(wave_file);
ychen644 2:09abe388d23e 72 }
4180_1 1:5b8e223e983d 73
ychen644 2:09abe388d23e 74 // vector data structure that holds patient info
ychen644 2:09abe388d23e 75 vector <string> v;
ychen644 2:09abe388d23e 76
ychen644 2:09abe388d23e 77 string getCommand(int i) {
ychen644 2:09abe388d23e 78 string tempStr = v.at(i);
ychen644 2:09abe388d23e 79 int pos = tempStr.find(",");
ychen644 2:09abe388d23e 80 return tempStr.substr(0,pos);
ychen644 2:09abe388d23e 81 }
ychen644 2:09abe388d23e 82
ychen644 2:09abe388d23e 83 string getName(int i) {
ychen644 2:09abe388d23e 84 string tempStr = v.at(i);
ychen644 2:09abe388d23e 85 int pos = tempStr.find(",");
ychen644 2:09abe388d23e 86 string command = tempStr.substr(0,pos);
ychen644 2:09abe388d23e 87 tempStr.erase(0,pos + 1);
ychen644 2:09abe388d23e 88 pos = tempStr.find(",");
ychen644 2:09abe388d23e 89 return tempStr.substr(0,pos);
ychen644 2:09abe388d23e 90
ychen644 2:09abe388d23e 91 }
ychen644 2:09abe388d23e 92
ychen644 2:09abe388d23e 93 string getNumber(int i) {
ychen644 2:09abe388d23e 94 string tempStr = v.at(i);
ychen644 2:09abe388d23e 95 int pos = tempStr.find(",");
ychen644 2:09abe388d23e 96 string command = tempStr.substr(0,pos);
ychen644 2:09abe388d23e 97 tempStr.erase(0,pos + 1);
ychen644 2:09abe388d23e 98 pos = tempStr.find(",");
ychen644 2:09abe388d23e 99 string name = tempStr.substr(0,pos);
ychen644 2:09abe388d23e 100 tempStr.erase(0,pos + 1);
ychen644 2:09abe388d23e 101 return tempStr;
ychen644 2:09abe388d23e 102 }
ychen644 2:09abe388d23e 103
ychen644 2:09abe388d23e 104 int main()
ychen644 2:09abe388d23e 105 {
ychen644 2:09abe388d23e 106 //FILE *wave_file;
ychen644 2:09abe388d23e 107 //printf("\n\n\nHello, wave world!\n");
ychen644 2:09abe388d23e 108 //wave_file=fopen("/sd/wavfiles/increasing.wav","r");
ychen644 2:09abe388d23e 109 //waver.play(wave_file);
ychen644 2:09abe388d23e 110 //fclose(wave_file);
ychen644 2:09abe388d23e 111 // variables for Serial Port
ychen644 2:09abe388d23e 112 char value[100];
ychen644 2:09abe388d23e 113
ychen644 2:09abe388d23e 114 // starting wait time
ychen644 2:09abe388d23e 115 int waitTime = 0;
ychen644 2:09abe388d23e 116
ychen644 2:09abe388d23e 117 // variables used for getting bluetooth button
ychen644 2:09abe388d23e 118 char bnum=0;
ychen644 2:09abe388d23e 119 char bhit=0;
ychen644 2:09abe388d23e 120
ychen644 2:09abe388d23e 121 // LED variables
ychen644 2:09abe388d23e 122 int r=0;
ychen644 2:09abe388d23e 123 int g=50;
ychen644 2:09abe388d23e 124 int b=0;
ychen644 2:09abe388d23e 125 spi.format(16,0);
ychen644 2:09abe388d23e 126 spi.frequency(500000);
ychen644 2:09abe388d23e 127 enable=0;
ychen644 2:09abe388d23e 128 latch=0;
ychen644 2:09abe388d23e 129 wait(1);
ychen644 2:09abe388d23e 130
ychen644 2:09abe388d23e 131 while(1) {
ychen644 2:09abe388d23e 132 // Get bluetooth signal
ychen644 2:09abe388d23e 133 if (blue.readable()) {
ychen644 2:09abe388d23e 134 if (blue.getc()=='!') {
ychen644 2:09abe388d23e 135 if (blue.getc()=='B') { //button data packet
ychen644 2:09abe388d23e 136 bnum = blue.getc(); //button number
ychen644 2:09abe388d23e 137 bhit = blue.getc(); //1=hit, 0=release
ychen644 2:09abe388d23e 138 if (bhit=='1')
ychen644 2:09abe388d23e 139 uLCD.cls();
ychen644 2:09abe388d23e 140 uLCD.locate(3,1);
ychen644 2:09abe388d23e 141 //if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK?
ychen644 2:09abe388d23e 142 switch (bnum) {
ychen644 2:09abe388d23e 143 case '1': //number button 1
ychen644 2:09abe388d23e 144 if (bhit=='1') {
ychen644 2:09abe388d23e 145 //uLCD.printf("Next patient");
ychen644 2:09abe388d23e 146 waitTime -= 15;
ychen644 2:09abe388d23e 147 //int patientNum = stoi(v.at(0));
ychen644 2:09abe388d23e 148 int patientNum = std::atoi(getNumber(0).c_str());
ychen644 2:09abe388d23e 149 switch (patientNum) {
ychen644 2:09abe388d23e 150 case 1:
ychen644 2:09abe388d23e 151 speaker("/sd/wavfiles/1.wav");
ychen644 2:09abe388d23e 152 break;
ychen644 2:09abe388d23e 153 case 2:
ychen644 2:09abe388d23e 154 speaker("/sd/wavfiles/2.wav");
ychen644 2:09abe388d23e 155 break;
ychen644 2:09abe388d23e 156 case 3:
ychen644 2:09abe388d23e 157 speaker("/sd/wavfiles/3.wav");
ychen644 2:09abe388d23e 158 break;
ychen644 2:09abe388d23e 159 case 4:
ychen644 2:09abe388d23e 160 speaker("/sd/wavfiles/4.wav");
ychen644 2:09abe388d23e 161 break;
ychen644 2:09abe388d23e 162 case 5:
ychen644 2:09abe388d23e 163 speaker("/sd/wavfiles/5.wav");
ychen644 2:09abe388d23e 164 break;
ychen644 2:09abe388d23e 165 case 6:
ychen644 2:09abe388d23e 166 speaker("/sd/wavfiles/6.wav");
ychen644 2:09abe388d23e 167 break;
ychen644 2:09abe388d23e 168 case 7:
ychen644 2:09abe388d23e 169 speaker("/sd/wavfiles/7.wav");
ychen644 2:09abe388d23e 170 break;
ychen644 2:09abe388d23e 171 case 8:
ychen644 2:09abe388d23e 172 speaker("/sd/wavfiles/8.wav");
ychen644 2:09abe388d23e 173 break;
ychen644 2:09abe388d23e 174 case 9:
ychen644 2:09abe388d23e 175 speaker("/sd/wavfiles/9.wav");
ychen644 2:09abe388d23e 176 break;
ychen644 2:09abe388d23e 177 case 10:
ychen644 2:09abe388d23e 178 speaker("/sd/wavfiles/10.wav");
ychen644 2:09abe388d23e 179 break;
ychen644 2:09abe388d23e 180 }
ychen644 2:09abe388d23e 181 v.erase(v.begin());
ychen644 2:09abe388d23e 182 myPc.putc('1');
ychen644 2:09abe388d23e 183 }
ychen644 2:09abe388d23e 184 break;
ychen644 2:09abe388d23e 185 case '2': //number button 2
ychen644 2:09abe388d23e 186 if (bhit=='1') {
ychen644 2:09abe388d23e 187 //uLCD.printf("Increase wait time");
ychen644 2:09abe388d23e 188 waitTime += 5;
ychen644 2:09abe388d23e 189 myPc.putc('2');
ychen644 2:09abe388d23e 190 speaker("/sd/wavfiles/increasing.wav");
ychen644 2:09abe388d23e 191 }
ychen644 2:09abe388d23e 192 break;
ychen644 2:09abe388d23e 193 case '3': //number button 3
ychen644 2:09abe388d23e 194 if (bhit=='1') {
ychen644 2:09abe388d23e 195 //uLCD.printf("Decrease wait time");
ychen644 2:09abe388d23e 196 waitTime -= 5;
ychen644 2:09abe388d23e 197 myPc.putc('3');
ychen644 2:09abe388d23e 198 speaker("/sd/wavfiles/decreasing.wav");
ychen644 2:09abe388d23e 199 }
ychen644 2:09abe388d23e 200 break;
ychen644 2:09abe388d23e 201 case '4': //number button 4
ychen644 2:09abe388d23e 202 if (bhit=='1') {
ychen644 2:09abe388d23e 203 //uLCD.printf("Change LED");
ychen644 2:09abe388d23e 204 if (r == 0) {
ychen644 2:09abe388d23e 205 r = 50;
ychen644 2:09abe388d23e 206 g = 0;
ychen644 2:09abe388d23e 207 speaker("/sd/wavfiles/busy.wav");
ychen644 2:09abe388d23e 208 } else {
ychen644 2:09abe388d23e 209 r = 0;
ychen644 2:09abe388d23e 210 g = 50;
ychen644 2:09abe388d23e 211 speaker("/sd/wavfiles/available.wav");
ychen644 2:09abe388d23e 212 }
ychen644 2:09abe388d23e 213 }
ychen644 2:09abe388d23e 214 break;
ychen644 2:09abe388d23e 215 }
ychen644 2:09abe388d23e 216 //}
ychen644 2:09abe388d23e 217 }
ychen644 2:09abe388d23e 218 }
ychen644 2:09abe388d23e 219 }
ychen644 2:09abe388d23e 220 // update LED color
ychen644 2:09abe388d23e 221 RGB_LED(r,g,b);
ychen644 2:09abe388d23e 222
ychen644 2:09abe388d23e 223 // Display wait time on LCD
ychen644 2:09abe388d23e 224 uLCD.locate(0,14);
ychen644 2:09abe388d23e 225 if (waitTime < 0)
ychen644 2:09abe388d23e 226 waitTime = 0;
ychen644 2:09abe388d23e 227 uLCD.printf("Wait Time: %d", waitTime);
ychen644 2:09abe388d23e 228
ychen644 2:09abe388d23e 229 // get input from Serial Port
ychen644 2:09abe388d23e 230 if (myPc.readable()) {
ychen644 2:09abe388d23e 231 // store char[] in value
ychen644 2:09abe388d23e 232 myPc.gets(value, 20);
ychen644 2:09abe388d23e 233 // convert to string
ychen644 2:09abe388d23e 234 string temp (value);
ychen644 2:09abe388d23e 235 temp = value;
ychen644 2:09abe388d23e 236 // decode information
ychen644 2:09abe388d23e 237 // (command, name, number)
ychen644 2:09abe388d23e 238 int pos = temp.find(",");
ychen644 2:09abe388d23e 239 string command = temp.substr(0,pos);
ychen644 2:09abe388d23e 240 // if adding patient
ychen644 2:09abe388d23e 241 if (command == "Add") {
ychen644 2:09abe388d23e 242 v.push_back(temp);
ychen644 2:09abe388d23e 243 waitTime += 15;
ychen644 2:09abe388d23e 244 // if removing patient
ychen644 2:09abe388d23e 245 } else {
ychen644 2:09abe388d23e 246 temp.erase(0,pos + 1);
ychen644 2:09abe388d23e 247 pos = temp.find(",");
ychen644 2:09abe388d23e 248 string name = temp.substr(0,pos);
ychen644 2:09abe388d23e 249 // find patient in vector and remove
ychen644 2:09abe388d23e 250 for (int i = 0; i < v.size(); i++) {
ychen644 2:09abe388d23e 251 // TODO
ychen644 2:09abe388d23e 252 // make function that handles this
ychen644 2:09abe388d23e 253 string tempStr = v.at(i);
ychen644 2:09abe388d23e 254 int pos = tempStr.find(",");
ychen644 2:09abe388d23e 255 string command = tempStr.substr(0,pos);
ychen644 2:09abe388d23e 256 tempStr.erase(0,pos + 1);
ychen644 2:09abe388d23e 257 pos = tempStr.find(",");
ychen644 2:09abe388d23e 258 string currentName = tempStr.substr(0,pos);
ychen644 2:09abe388d23e 259 if (currentName == name) {
ychen644 2:09abe388d23e 260 v.erase(v.begin() + i);
ychen644 2:09abe388d23e 261 }
ychen644 2:09abe388d23e 262 }
ychen644 2:09abe388d23e 263 waitTime -= 15;
ychen644 2:09abe388d23e 264 }
ychen644 2:09abe388d23e 265 uLCD.cls();
ychen644 2:09abe388d23e 266 }
ychen644 2:09abe388d23e 267 // update patient list on LCD display
ychen644 2:09abe388d23e 268 for (int i = 0; i < v.size(); i++) {
ychen644 2:09abe388d23e 269 // TODO
ychen644 2:09abe388d23e 270 // make function that handles this
ychen644 2:09abe388d23e 271 /*string tempStr = v.at(i);
ychen644 2:09abe388d23e 272 int pos = tempStr.find(",");
ychen644 2:09abe388d23e 273 string command = tempStr.substr(0,pos);
ychen644 2:09abe388d23e 274 tempStr.erase(0,pos + 1);
ychen644 2:09abe388d23e 275 pos = tempStr.find(",");
ychen644 2:09abe388d23e 276 string name = tempStr.substr(0,pos);
ychen644 2:09abe388d23e 277 tempStr.erase(0,pos + 1);
ychen644 2:09abe388d23e 278 string number = tempStr;*/
ychen644 2:09abe388d23e 279
ychen644 2:09abe388d23e 280 uLCD.locate(0,i*2);
ychen644 2:09abe388d23e 281 uLCD.printf("%s", getNumber(i));
ychen644 2:09abe388d23e 282 uLCD.locate(3,i*2);
ychen644 2:09abe388d23e 283 uLCD.printf("%s", getName(i));
ychen644 2:09abe388d23e 284
ychen644 2:09abe388d23e 285 }
ychen644 2:09abe388d23e 286 }
ychen644 2:09abe388d23e 287 }