a
Dependencies: 4DGL-uLCD-SE Queue SDFileSystem mbed wave_player
Fork of WavePlayer_HelloWorld by
main.cpp@2:09abe388d23e, 2017-04-26 (annotated)
- Committer:
- ychen644
- Date:
- Wed Apr 26 14:41:00 2017 +0000
- Revision:
- 2:09abe388d23e
- Parent:
- 1:5b8e223e983d
a
Who changed what in which revision?
User | Revision | Line number | New 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 | } |