CIS541 / Mbed 2 deprecated CIS541PM

Dependencies:   mbed mbed-rtos TextLCD

Committer:
shibulal
Date:
Mon Nov 30 02:22:22 2015 +0000
Revision:
2:b178e27d9f22
Parent:
1:e3a5388e46ab
Child:
3:ac2e5aceb324
b

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shibulal 0:2d6b43fc4625 1 #include "mbed.h"
shibulal 1:e3a5388e46ab 2 #include "rtos.h"
shibulal 1:e3a5388e46ab 3
shibulal 2:b178e27d9f22 4 InterruptIn A(p8);
shibulal 2:b178e27d9f22 5 InterruptIn V(p9);
shibulal 2:b178e27d9f22 6 DigitalOut Apace(p1);
shibulal 2:b178e27d9f22 7 DigitalOut Vpace(p2);
shibulal 1:e3a5388e46ab 8 Serial pc(USBTX, USBRX);
shibulal 1:e3a5388e46ab 9
shibulal 1:e3a5388e46ab 10
shibulal 1:e3a5388e46ab 11 void PacemakerKeyboardInput(void const *args);
shibulal 1:e3a5388e46ab 12 void PacemakerModes(void const *args);
shibulal 2:b178e27d9f22 13 void PacemakerReceive(void const *args);
shibulal 2:b178e27d9f22 14 void PacemakerSend(void const *args);
shibulal 0:2d6b43fc4625 15
shibulal 1:e3a5388e46ab 16 int modeSwitchTimeInterval = 5000;
shibulal 1:e3a5388e46ab 17 int flag=0;
shibulal 1:e3a5388e46ab 18 const int sleepModeURI = 1000;
shibulal 1:e3a5388e46ab 19 const int sleepModeLRI = 2000;
shibulal 1:e3a5388e46ab 20 const int normalModeURI = 600;
shibulal 1:e3a5388e46ab 21 const int normalModeLRI = 1500;
shibulal 1:e3a5388e46ab 22 const int sportsModeURI = 343;
shibulal 1:e3a5388e46ab 23 const int sportsModeLRI = 600;
shibulal 1:e3a5388e46ab 24 const int manualModeURI = 343;
shibulal 1:e3a5388e46ab 25 const int manualModeLRI = 2000;
shibulal 1:e3a5388e46ab 26
shibulal 1:e3a5388e46ab 27 int LRI = normalModeLRI;
shibulal 1:e3a5388e46ab 28 int URI = normalModeURI;
shibulal 1:e3a5388e46ab 29 Timer k;
shibulal 2:b178e27d9f22 30 Timer p;
shibulal 2:b178e27d9f22 31 Timer t_loc
shibulal 2:b178e27d9f22 32 const int PVARP = 150;
shibulal 2:b178e27d9f22 33 const int VRP = PVARP;
shibulal 2:b178e27d9f22 34 const int AVI = 65;
shibulal 1:e3a5388e46ab 35 char mode;
shibulal 1:e3a5388e46ab 36 char manualPace;
shibulal 2:b178e27d9f22 37 char AorV;
shibulal 2:b178e27d9f22 38 char AorVsense;
shibulal 1:e3a5388e46ab 39 Thread Pmki(PacemakerKeyboardInput,(void *) 0);
shibulal 2:b178e27d9f22 40 Thread Pmm(PacemakerModes,(void *) 0);
shibulal 2:b178e27d9f22 41 Thread Pmr (PacemakerReceive, (void *) 0);
shibulal 2:b178e27d9f22 42 Thread Pmr (PacemakerSend, (void *) 0);
shibulal 0:2d6b43fc4625 43
shibulal 1:e3a5388e46ab 44 void PacemakerKeyboardInput(void const *args){
shibulal 1:e3a5388e46ab 45 k.start();
shibulal 1:e3a5388e46ab 46 char input;
shibulal 1:e3a5388e46ab 47 while(true){
shibulal 1:e3a5388e46ab 48 input=pc.getc();
shibulal 1:e3a5388e46ab 49 if (k.read()>=modeSwitchTimeInterval && flag==0){
shibulal 1:e3a5388e46ab 50 if (input=='F'){
shibulal 1:e3a5388e46ab 51 mode='F';
shibulal 1:e3a5388e46ab 52 Pmm.signal_set(0x1);
shibulal 1:e3a5388e46ab 53 Thread::signal_wait(0x1);
shibulal 1:e3a5388e46ab 54 }
shibulal 1:e3a5388e46ab 55 else if (input=='S'){
shibulal 1:e3a5388e46ab 56 mode='S';
shibulal 1:e3a5388e46ab 57 Pmm.signal_set(0x1);
shibulal 1:e3a5388e46ab 58 Thread::signal_wait(0x1);
shibulal 1:e3a5388e46ab 59 }
shibulal 1:e3a5388e46ab 60 else if (input=='N'){
shibulal 1:e3a5388e46ab 61 mode='N';
shibulal 1:e3a5388e46ab 62 Pmm.signal_set(0x1);
shibulal 1:e3a5388e46ab 63 Thread::signal_wait(0x1);
shibulal 1:e3a5388e46ab 64 }
shibulal 1:e3a5388e46ab 65 else if (input=='O'){
shibulal 1:e3a5388e46ab 66 mode='O';
shibulal 1:e3a5388e46ab 67 Pmm.signal_set(0x1);
shibulal 1:e3a5388e46ab 68 Thread::signal_wait(0x1);
shibulal 1:e3a5388e46ab 69 }
shibulal 1:e3a5388e46ab 70 else if (input=='M'){
shibulal 1:e3a5388e46ab 71 mode='M';
shibulal 1:e3a5388e46ab 72 Pmm.signal_set(0x1);
shibulal 1:e3a5388e46ab 73 Thread::signal_wait(0x1);
shibulal 1:e3a5388e46ab 74 }
shibulal 1:e3a5388e46ab 75 else if (input=='A'){
shibulal 1:e3a5388e46ab 76 if (mode=='M')
shibulal 1:e3a5388e46ab 77 manualPace='A';
shibulal 1:e3a5388e46ab 78 Pmm.signal_set(0x1);
shibulal 1:e3a5388e46ab 79 Thread::signal_wait(0x1);
shibulal 1:e3a5388e46ab 80 }
shibulal 1:e3a5388e46ab 81 }
shibulal 1:e3a5388e46ab 82 else if (input=='V'){
shibulal 1:e3a5388e46ab 83 if (mode=='M'){
shibulal 2:b178e27d9f22 84
shibulal 1:e3a5388e46ab 85 manualPace='V';
shibulal 1:e3a5388e46ab 86 Pmm.signal_set(0x1);
shibulal 1:e3a5388e46ab 87 Thread::signal_wait(0x1);
shibulal 1:e3a5388e46ab 88 }
shibulal 1:e3a5388e46ab 89 }
shibulal 1:e3a5388e46ab 90 }
shibulal 1:e3a5388e46ab 91 }
shibulal 2:b178e27d9f22 92
shibulal 1:e3a5388e46ab 93
shibulal 1:e3a5388e46ab 94
shibulal 1:e3a5388e46ab 95 void PacemakerModes(void const *args){
shibulal 1:e3a5388e46ab 96 while(1){
shibulal 1:e3a5388e46ab 97 Thread::signal_wait(0x1);
shibulal 1:e3a5388e46ab 98 if (mode=='F'){
shibulal 1:e3a5388e46ab 99 LRI=sportsModeLRI;
shibulal 1:e3a5388e46ab 100 URI=sportsModeURI;
shibulal 2:b178e27d9f22 101 Pmki.signal_set(0x1);
shibulal 1:e3a5388e46ab 102 }
shibulal 1:e3a5388e46ab 103 else if (mode=='S'){
shibulal 1:e3a5388e46ab 104 LRI=sleepModeLRI;
shibulal 1:e3a5388e46ab 105 URI=sleepModeURI;
shibulal 2:b178e27d9f22 106 Pmki.signal_set(0x1);
shibulal 1:e3a5388e46ab 107 }
shibulal 1:e3a5388e46ab 108 else if (mode=='N'){
shibulal 1:e3a5388e46ab 109 LRI=normalModeLRI;
shibulal 1:e3a5388e46ab 110 URI=normalModeURI;
shibulal 2:b178e27d9f22 111 Pmki.signal_set(0x1);
shibulal 1:e3a5388e46ab 112 }
shibulal 1:e3a5388e46ab 113 else if (mode=='O'){
shibulal 1:e3a5388e46ab 114 //not sure what to do here
shibulal 2:b178e27d9f22 115 Pmki.signal_set(0x1);
shibulal 1:e3a5388e46ab 116 }
shibulal 1:e3a5388e46ab 117 else if (mode=='M'){
shibulal 1:e3a5388e46ab 118 LRI=manualModeLRI;
shibulal 1:e3a5388e46ab 119 URI=manualModeURI;
shibulal 2:b178e27d9f22 120 Pmki.signal_set(0x1);
shibulal 1:e3a5388e46ab 121 while(1){
shibulal 1:e3a5388e46ab 122 Thread::signal_wait(0x1);
shibulal 1:e3a5388e46ab 123 if (mode=='M'){
shibulal 1:e3a5388e46ab 124 if (manualPace=='A'){
shibulal 2:b178e27d9f22 125 Pms.signal_set(0x01);
shibulal 2:b178e27d9f22 126 AorVsense='Am'
shibulal 2:b178e27d9f22 127 manualPace=0;
shibulal 1:e3a5388e46ab 128 }
shibulal 1:e3a5388e46ab 129 else if (manualPace=='V'){
shibulal 2:b178e27d9f22 130 Pms.signal_set(0x01);
shibulal 2:b178e27d9f22 131 AorVsense='Vm'
shibulal 2:b178e27d9f22 132 manualPace=0;
shibulal 1:e3a5388e46ab 133 }
shibulal 1:e3a5388e46ab 134 }
shibulal 1:e3a5388e46ab 135 else {
shibulal 2:b178e27d9f22 136 Pmm.signal_set(0x1);
shibulal 2:b178e27d9f22 137 Pmki.signal_set(0x1);
shibulal 2:b178e27d9f22 138 break;
shibulal 2:b178e27d9f22 139 }
shibulal 2:b178e27d9f22 140 Pmki.signal_set(0x1);
shibulal 2:b178e27d9f22 141 }
shibulal 2:b178e27d9f22 142 }
shibulal 2:b178e27d9f22 143 }
shibulal 2:b178e27d9f22 144 }
shibulal 2:b178e27d9f22 145
shibulal 2:b178e27d9f22 146 void PacemakerSend(void const *args){
shibulal 2:b178e27d9f22 147 while(1){
shibulal 2:b178e27d9f22 148 Thread::signal_wait(0x1);
shibulal 2:b178e27d9f22 149 if (AorVsense=='V'){
shibulal 2:b178e27d9f22 150 p.reset();
shibulal 2:b178e27d9f22 151 }
shibulal 2:b178e27d9f22 152 else if (AorVsense=='A'||p.read()>=LRI-AVI){
shibulal 2:b178e27d9f22 153 p.reset();
shibulal 2:b178e27d9f22 154 flag=1;
shibulal 2:b178e27d9f22 155 while(1){
shibulal 2:b178e27d9f22 156 Thread::signal_wait(0x1);
shibulal 2:b178e27d9f22 157 if (AorVsense=='A'){
shibulal 2:b178e27d9f22 158 while(1){
shibulal 2:b178e27d9f22 159 if (p<=LRI){
shibulal 2:b178e27d9f22 160 flag=0;
shibulal 2:b178e27d9f22 161 break;
shibulal 2:b178e27d9f22 162 }
shibulal 2:b178e27d9f22 163 }
shibulal 2:b178e27d9f22 164 else if (AorVsense=='V'){
shibulal 2:b178e27d9f22 165 p.reset();
shibulal 2:b178e27d9f22 166 flag=0;
shibulal 2:b178e27d9f22 167 while(1){
shibulal 2:b178e27d9f22 168 if (p<=LRI-AVI){
shibulal 2:b178e27d9f22 169 break;
shibulal 2:b178e27d9f22 170 }
shibulal 2:b178e27d9f22 171 }
shibulal 2:b178e27d9f22 172 else if (AorVsense=='Vm'){
shibulal 2:b178e27d9f22 173 flag=0;
shibulal 2:b178e27d9f22 174 p.reset();
shibulal 2:b178e27d9f22 175 Vpace=1;
shibulal 2:b178e27d9f22 176 wait(0.1)
shibulal 2:b178e27d9f22 177 Vpace(0.1)
shibulal 2:b178e27d9f22 178 while(1){
shibulal 2:b178e27d9f22 179 if (p<=LRI-AVI){
shibulal 2:b178e27d9f22 180 break;
shibulal 2:b178e27d9f22 181 }
shibulal 2:b178e27d9f22 182 }
shibulal 2:b178e27d9f22 183 }
shibulal 2:b178e27d9f22 184 else if(p.read()==LRI) {
shibulal 2:b178e27d9f22 185 Vpace=1;
shibulal 2:b178e27d9f22 186 wait(0.1)
shibulal 2:b178e27d9f22 187 Vpace=0;
shibulal 2:b178e27d9f22 188 p.reset();
shibulal 2:b178e27d9f22 189 flag=0;
shibulal 2:b178e27d9f22 190 while(1){
shibulal 2:b178e27d9f22 191 if (p<=LRI-AVI){
shibulal 2:b178e27d9f22 192 break;
shibulal 2:b178e27d9f22 193 }
shibulal 2:b178e27d9f22 194 }
shibulal 2:b178e27d9f22 195 }
shibulal 2:b178e27d9f22 196 }
shibulal 2:b178e27d9f22 197 else if (AorVsense=='Vm'){
shibulal 2:b178e27d9f22 198 p.reset();
shibulal 2:b178e27d9f22 199 Vpace=1;
shibulal 2:b178e27d9f22 200 wait(0.1)
shibulal 2:b178e27d9f22 201 Vpace(0.1)
shibulal 2:b178e27d9f22 202 while(1){
shibulal 2:b178e27d9f22 203 if (p<=LRI-AVI){
shibulal 1:e3a5388e46ab 204 break;
shibulal 1:e3a5388e46ab 205 }
shibulal 2:b178e27d9f22 206 }
shibulal 2:b178e27d9f22 207 }
shibulal 2:b178e27d9f22 208 else if (AorVsense=='Am'){
shibulal 2:b178e27d9f22 209 p.reset();
shibulal 2:b178e27d9f22 210 Apace=1;
shibulal 2:b178e27d9f22 211 wait(0.1)
shibulal 2:b178e27d9f22 212 Apace(0.1)
shibulal 2:b178e27d9f22 213 flag=1;
shibulal 2:b178e27d9f22 214 while(1){
shibulal 2:b178e27d9f22 215 Thread::signal_wait(0x1);
shibulal 2:b178e27d9f22 216 if (AorVsense=='A'){
shibulal 2:b178e27d9f22 217 while(1){
shibulal 2:b178e27d9f22 218 if (p<=LRI){
shibulal 2:b178e27d9f22 219 flag=0;
shibulal 2:b178e27d9f22 220 break;
shibulal 2:b178e27d9f22 221 }
shibulal 2:b178e27d9f22 222 }
shibulal 2:b178e27d9f22 223 else if (AorVsense=='V'){
shibulal 2:b178e27d9f22 224 p.reset();
shibulal 2:b178e27d9f22 225 flag=0;
shibulal 2:b178e27d9f22 226 while(1){
shibulal 2:b178e27d9f22 227 if (p<=LRI-AVI){
shibulal 2:b178e27d9f22 228 break;
shibulal 2:b178e27d9f22 229 }
shibulal 2:b178e27d9f22 230 }
shibulal 2:b178e27d9f22 231 else if (AorVsense=='Vm'){
shibulal 2:b178e27d9f22 232 flag=0;
shibulal 2:b178e27d9f22 233 p.reset();
shibulal 2:b178e27d9f22 234 Vpace=1;
shibulal 2:b178e27d9f22 235 wait(0.1)
shibulal 2:b178e27d9f22 236 Vpace(0.1)
shibulal 2:b178e27d9f22 237 while(1){
shibulal 2:b178e27d9f22 238 if (p<=LRI-AVI){
shibulal 2:b178e27d9f22 239 break;
shibulal 2:b178e27d9f22 240 }
shibulal 1:e3a5388e46ab 241 }
shibulal 2:b178e27d9f22 242 }
shibulal 2:b178e27d9f22 243 else if(p.read()==LRI) {
shibulal 2:b178e27d9f22 244 Vpace=1;
shibulal 2:b178e27d9f22 245 wait(0.1)
shibulal 2:b178e27d9f22 246 Vpace=0;
shibulal 2:b178e27d9f22 247 p.reset();
shibulal 2:b178e27d9f22 248 flag=0;
shibulal 2:b178e27d9f22 249 while(1){
shibulal 2:b178e27d9f22 250 if (p<=LRI-AVI){
shibulal 2:b178e27d9f22 251 break;
shibulal 2:b178e27d9f22 252 }
shibulal 2:b178e27d9f22 253 }
shibulal 2:b178e27d9f22 254 }
shibulal 2:b178e27d9f22 255
shibulal 2:b178e27d9f22 256 }
shibulal 2:b178e27d9f22 257 }
shibulal 2:b178e27d9f22 258
shibulal 2:b178e27d9f22 259 }
shibulal 2:b178e27d9f22 260 }
shibulal 2:b178e27d9f22 261 }
shibulal 2:b178e27d9f22 262 void PacemakerReceive(void const *args){
shibulal 2:b178e27d9f22 263 while(1){
shibulal 2:b178e27d9f22 264 Thread::signal_wait(0x1);
shibulal 2:b178e27d9f22 265 if (AorV=='A' && p.read()<PVARP){
shibulal 2:b178e27d9f22 266
shibulal 2:b178e27d9f22 267 }
shibulal 2:b178e27d9f22 268 else if (AorV=='V' && p.read()<VRP){
shibulal 2:b178e27d9f22 269 }
shibulal 2:b178e27d9f22 270 else if (AorV=='A' && p.read()>=PVARP){
shibulal 2:b178e27d9f22 271 Pms.signal_set(0x01);
shibulal 2:b178e27d9f22 272 AorVsense='A'
shibulal 2:b178e27d9f22 273 t_loc.reset
shibulal 2:b178e27d9f22 274 while(1){
shibulal 2:b178e27d9f22 275 Thread::signal_wait(0x1);
shibulal 2:b178e27d9f22 276 if(AorV=='V'){
shibulal 2:b178e27d9f22 277 break;
shibulal 2:b178e27d9f22 278 }
shibulal 2:b178e27d9f22 279 }
shibulal 2:b178e27d9f22 280 while(1){
shibulal 2:b178e27d9f22 281 if (t_loc>AVI && p>URI){
shibulal 2:b178e27d9f22 282 Pms.signal_set(0x01);
shibulal 2:b178e27d9f22 283 AorVsense='V';
shibulal 2:b178e27d9f22 284 p=0;
shibulal 2:b178e27d9f22 285 t_loc=0;
shibulal 2:b178e27d9f22 286 break;
shibulal 2:b178e27d9f22 287 }
shibulal 2:b178e27d9f22 288 }
shibulal 2:b178e27d9f22 289 }
shibulal 2:b178e27d9f22 290 else if (AorV=='V' && p.read()>=VRP){
shibulal 2:b178e27d9f22 291 while(1){
shibulal 2:b178e27d9f22 292 if ((t_loc>=AVI && p<=URI) || (t_loc<=AVI && p<=URI) ||(t_loc<=AVI && p>=URI)){
shibulal 2:b178e27d9f22 293 break;
shibulal 2:b178e27d9f22 294 }
shibulal 2:b178e27d9f22 295 }
shibulal 2:b178e27d9f22 296 while(1){
shibulal 2:b178e27d9f22 297 Thread::signal_wait(0x1);
shibulal 2:b178e27d9f22 298 if(AorV=='V'){
shibulal 2:b178e27d9f22 299 break;
shibulal 2:b178e27d9f22 300 }
shibulal 2:b178e27d9f22 301 }
shibulal 2:b178e27d9f22 302 while(1){
shibulal 2:b178e27d9f22 303 if (t_loc>AVI && p>URI){
shibulal 2:b178e27d9f22 304 Pms.signal_set(0x01);
shibulal 2:b178e27d9f22 305 AorVsense='V';
shibulal 2:b178e27d9f22 306 p=0;
shibulal 2:b178e27d9f22 307 t_loc=0;
shibulal 2:b178e27d9f22 308 break;
shibulal 2:b178e27d9f22 309 }
shibulal 2:b178e27d9f22 310 }
shibulal 2:b178e27d9f22 311
shibulal 1:e3a5388e46ab 312 }
shibulal 1:e3a5388e46ab 313
shibulal 1:e3a5388e46ab 314
shibulal 2:b178e27d9f22 315
shibulal 2:b178e27d9f22 316
shibulal 2:b178e27d9f22 317 }
shibulal 1:e3a5388e46ab 318
shibulal 1:e3a5388e46ab 319 int main(){
shibulal 2:b178e27d9f22 320 A.mode(PullDown);
shibulal 2:b178e27d9f22 321 A.rise(Asig);
shibulal 2:b178e27d9f22 322 V.mode(PullDown);
shibulal 2:b178e27d9f22 323 V.rise(Vsig);
shibulal 1:e3a5388e46ab 324
shibulal 1:e3a5388e46ab 325 while(1);
shibulal 0:2d6b43fc4625 326 }
shibulal 2:b178e27d9f22 327
shibulal 2:b178e27d9f22 328
shibulal 2:b178e27d9f22 329 void Asig() {
shibulal 2:b178e27d9f22 330 Pmr.signal_set(0x1);
shibulal 2:b178e27d9f22 331 AorV='A';
shibulal 2:b178e27d9f22 332
shibulal 2:b178e27d9f22 333 }
shibulal 2:b178e27d9f22 334 void Vsig() {
shibulal 2:b178e27d9f22 335 Pmr.signal_set(0x1);
shibulal 2:b178e27d9f22 336 AorV='V';
shibulal 2:b178e27d9f22 337
shibulal 2:b178e27d9f22 338 }