CIS541 / Mbed 2 deprecated CIS541PM

Dependencies:   mbed mbed-rtos TextLCD

Revision:
2:b178e27d9f22
Parent:
1:e3a5388e46ab
Child:
3:ac2e5aceb324
--- a/main.cpp	Thu Nov 26 23:54:30 2015 +0000
+++ b/main.cpp	Mon Nov 30 02:22:22 2015 +0000
@@ -1,11 +1,17 @@
 #include "mbed.h"
 #include "rtos.h"
 
+InterruptIn A(p8);
+InterruptIn V(p9);
+DigitalOut Apace(p1);
+DigitalOut Vpace(p2);
 Serial pc(USBTX, USBRX);
 
 
 void PacemakerKeyboardInput(void const *args);
 void PacemakerModes(void const *args);
+void PacemakerReceive(void const *args);
+void PacemakerSend(void const *args);
 
 int modeSwitchTimeInterval = 5000;
 int flag=0;
@@ -21,10 +27,19 @@
 int LRI = normalModeLRI;
 int URI = normalModeURI;
 Timer k;
+Timer p;
+Timer t_loc
+const int PVARP = 150; 
+const int VRP = PVARP; 
+const int AVI = 65;
 char mode;
 char manualPace;
+char AorV;
+char AorVsense;
 Thread Pmki(PacemakerKeyboardInput,(void *) 0); 
-Thread Pmm(PacemakerModes,(void *) 0); 
+Thread Pmm(PacemakerModes,(void *) 0);
+Thread Pmr (PacemakerReceive, (void *) 0);
+Thread Pmr (PacemakerSend, (void *) 0);
 
 void PacemakerKeyboardInput(void const *args){
     k.start();
@@ -66,7 +81,7 @@
                 }
             else if (input=='V'){
                 if (mode=='M'){
-                    manualControl.lock();
+
                     manualPace='V';
                     Pmm.signal_set(0x1);
                     Thread::signal_wait(0x1);
@@ -74,7 +89,7 @@
                 }
             }
         }
-    }
+    
     
     
 void PacemakerModes(void const *args){
@@ -83,53 +98,241 @@
         if (mode=='F'){
             LRI=sportsModeLRI;
             URI=sportsModeURI;
-            pmki.signal_set(0x1);
+            Pmki.signal_set(0x1);
             }
         else if (mode=='S'){
             LRI=sleepModeLRI;
             URI=sleepModeURI;
-            pmki.signal_set(0x1);
+            Pmki.signal_set(0x1);
             }
         else if (mode=='N'){
             LRI=normalModeLRI;
             URI=normalModeURI;
-            pmki.signal_set(0x1);
+            Pmki.signal_set(0x1);
             }
         else if (mode=='O'){
             //not sure what to do here
-            pmki.signal_set(0x1);
+            Pmki.signal_set(0x1);
             }
         else if (mode=='M'){
             LRI=manualModeLRI;
             URI=manualModeURI;
-            pmki.signal_set(0x1);
+            Pmki.signal_set(0x1);
             while(1){
                 Thread::signal_wait(0x1);
                 if (mode=='M'){
                     if (manualPace=='A'){
-                        // do stuff
-                        manualPace='';
+                        Pms.signal_set(0x01);
+                        AorVsense='Am'
+                        manualPace=0;
                         }
                     else if (manualPace=='V'){
-                        //do stuff
-                        manualPace='';
+                        Pms.signal_set(0x01);
+                        AorVsense='Vm'
+                        manualPace=0;
                         }
                     }
                 else {
-                    pmm.signal_set(0x1);
-                    pmki.signal_wait(0x1);
+                    Pmm.signal_set(0x1);
+                    Pmki.signal_set(0x1);
+                    break;
+                    }
+                Pmki.signal_set(0x1);
+                }
+            }
+        }
+    } 
+    
+void PacemakerSend(void const *args){
+    while(1){
+        Thread::signal_wait(0x1);
+        if (AorVsense=='V'){
+            p.reset();
+            }
+        else if (AorVsense=='A'||p.read()>=LRI-AVI){
+            p.reset();
+            flag=1;
+            while(1){
+                Thread::signal_wait(0x1);
+                if (AorVsense=='A'){
+                    while(1){     
+                        if (p<=LRI){
+                        flag=0;
+                        break;     
+                    }
+                }
+                else if (AorVsense=='V'){
+                   p.reset();
+                   flag=0;
+                   while(1){
+                        if (p<=LRI-AVI){
+                            break;
+                    }
+                }
+                else if (AorVsense=='Vm'){
+                   flag=0;
+                    p.reset();
+                  Vpace=1;
+                 wait(0.1)
+                    Vpace(0.1)
+                while(1){
+                if (p<=LRI-AVI){
+                    break;
+                    }
+                }
+                   }
+                else if(p.read()==LRI) {
+                   Vpace=1;
+                 wait(0.1)
+                    Vpace=0;
+                    p.reset();
+                    flag=0;
+                    while(1){
+                if (p<=LRI-AVI){
+                    break;
+                    }
+                   }
+                   }
+            }
+       else  if (AorVsense=='Vm'){
+            p.reset();
+            Vpace=1;
+            wait(0.1)
+            Vpace(0.1)
+            while(1){
+                if (p<=LRI-AVI){
                     break;
                     }
-                pmki.signal_wait(0x1);
+                }
+            }
+        else if (AorVsense=='Am'){
+            p.reset();
+            Apace=1;
+            wait(0.1)
+            Apace(0.1)
+            flag=1;
+            while(1){
+                Thread::signal_wait(0x1);
+                if (AorVsense=='A'){
+                    while(1){     
+                        if (p<=LRI){
+                        flag=0;
+                        break;     
+                    }
+                }
+                else if (AorVsense=='V'){
+                   p.reset();
+                   flag=0;
+                   while(1){
+                        if (p<=LRI-AVI){
+                            break;
+                    }
+                }
+                else if (AorVsense=='Vm'){
+                   flag=0;
+                    p.reset();
+                  Vpace=1;
+                 wait(0.1)
+                    Vpace(0.1)
+                while(1){
+                if (p<=LRI-AVI){
+                    break;
+                    }
                 }
+                   }
+                else if(p.read()==LRI) {
+                   Vpace=1;
+                 wait(0.1)
+                    Vpace=0;
+                    p.reset();
+                    flag=0;
+                    while(1){
+                if (p<=LRI-AVI){
+                    break;
+                    }
+                   }
+                   }
+                   
+                    }
+            }
+
+            }
+        }
+    }
+void PacemakerReceive(void const *args){
+    while(1){
+        Thread::signal_wait(0x1);
+        if (AorV=='A' && p.read()<PVARP){
+            
+        }
+        else if (AorV=='V' && p.read()<VRP){
+            }
+        else if (AorV=='A' && p.read()>=PVARP){
+            Pms.signal_set(0x01);
+            AorVsense='A'
+            t_loc.reset
+            while(1){
+                Thread::signal_wait(0x1);
+                if(AorV=='V'){
+                    break;
+                    }
+                }
+            while(1){
+                if (t_loc>AVI && p>URI){
+                    Pms.signal_set(0x01);
+                    AorVsense='V';
+                    p=0;
+                    t_loc=0;
+                    break;
+                    }
+            }
+            }
+            else if (AorV=='V' && p.read()>=VRP){
+                while(1){
+                    if ((t_loc>=AVI && p<=URI) || (t_loc<=AVI && p<=URI) ||(t_loc<=AVI && p>=URI)){
+                        break;
+                    }
+                }
+                while(1){
+                Thread::signal_wait(0x1);
+                if(AorV=='V'){
+                    break;
+                    }
+                }
+            while(1){
+                if (t_loc>AVI && p>URI){
+                    Pms.signal_set(0x01);
+                    AorVsense='V';
+                    p=0;
+                    t_loc=0;
+                    break;
+                    }
+            }
+                
             }
             
         
-        
-        }
-    } 
+            
+    
+    }
 
 int main(){
+    A.mode(PullDown);              
+    A.rise(Asig);               
+    V.mode(PullDown);              
+    V.rise(Vsig);               
     
     while(1);
 }
+
+
+void Asig() {
+    Pmr.signal_set(0x1);  
+    AorV='A'; 
+                             
+}
+void Vsig() {
+       Pmr.signal_set(0x1);
+       AorV='V';
+                             
+}