Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed mbed-rtos TextLCD
Diff: main.cpp
- Revision:
- 2:b178e27d9f22
- Parent:
- 1:e3a5388e46ab
- Child:
- 3:ac2e5aceb324
diff -r e3a5388e46ab -r b178e27d9f22 main.cpp
--- 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';
+
+}