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: Terminal TextLCD mbed-rtos mbed
Fork of Heart by
Diff: heart.cpp
- Revision:
- 3:b702a21b2990
- Parent:
- 2:fc2f41386ee4
- Child:
- 4:a64a0fea5266
diff -r fc2f41386ee4 -r b702a21b2990 heart.cpp
--- a/heart.cpp Mon Nov 30 21:00:10 2015 +0000
+++ b/heart.cpp Tue Dec 01 22:57:12 2015 +0000
@@ -20,22 +20,26 @@
const int minwait_A=50;
const int minwait_V=50;
-volatile int time_count=0;
-volatile int time1_count;
+volatile int t=0;
+volatile int k=0;
int m=0;
int s=0;
int ms=0;
int heartInterval;
char key_input;
+int testNumber;
+bool testResult;
int LRI=1500;
int URI=600;
int heartRate;
volatile bool Areceived=false;
volatile bool Vreceived=false;
+bool test=false;
int low[4] = {30,40,100,30};
int high[4] = {60,100,175,175};
int modeset;
+int pulses;
const int sleepModeURI = 1000;
const int sleepModeLRI = 2000;
@@ -67,8 +71,8 @@
Thread *heartkeyboard;
-void resetTimer0();
-void resetTimer1();
+void resett();
+void resetk();
void VPacereceived();
void APacereceived();
void ASignalsend();
@@ -76,96 +80,101 @@
void HeartReceive();
void HeartSend();
void HeartKeyBoardModeSwitch();
+void sound_lowAlarm();
+void sound_highAlarm();
extern "C" void TIMER0_IRQHandler (void)
{
- if((LPC_TIM0->IR & 0x01) == 0x01) { // if interrupt provided, continue to next line
+ if((LPC_TIM0->IR & 0x01) == 0x01) { // if MR0 interrupt, proceed
LPC_TIM0->IR |= 1 << 0; // Clear MR0 interrupt flag
- time_count++; //increment time_count
- }
-}
-
-void timer0_init(void)
-{
- LPC_SC->PCONP |=1<1; //power on the timer
- LPC_TIM0->MR0 = 23980; //10 msec period i.e the timer count will increment every 10ms
- LPC_TIM0->MCR = 3; //reset control
- //3 = Interrupt & reset timer0 on match
- //1 = Interrupt only, no reset
- NVIC_EnableIRQ(TIMER0_IRQn); //enable interrupt
- LPC_TIM0->TCR = 1; //enable the timer
-
-}
-
-extern "C" void TIMER1_IRQHandler (void)
-{
- if((LPC_TIM0->IR & 0x01) == 0x01) { // if interrupt provided, continue to next line
- LPC_TIM0->IR |= 1 << 0; // Clear MR0 interrupt flag
- time1_count++; //increment time_count
+ t++;
+ k++;
}
}
-void timer1_init(void)
+//Initializing the timer 0
+void timer0_init(void)
{
- LPC_SC->PCONP |=1<1; //power on the timer
- LPC_TIM0->MR0 = 23980; //10 msec period i.e the timer count will increment every 10ms
- LPC_TIM0->MCR = 3; //reset control
- //3 = Interrupt & reset timer0 on match
- //1 = Interrupt only, no reset
- NVIC_EnableIRQ(TIMER0_IRQn); //enable interrupt
- LPC_TIM0->TCR = 1; //enable the timer
+ LPC_SC->PCONP |=1<1; //Timer0 Power On
+ LPC_TIM0->MR0 = 23990; //1 msec
+ LPC_TIM0->MCR = 3; //interrupt and reset control
+ NVIC_EnableIRQ(TIMER1_IRQn); //Enable timer0 interrupt
+ LPC_TIM0->TCR = 1; //enable Timer0
+ t = 0;
+ k = 0;
+}
+
+void resett()
+{
+ t=0;
+}
+
+void resetk()
+{
+ k=0;
}
-void resetTimer0()
-{
- m=0;
- s=0;
- ms=0;
- time_count=0;
- LPC_TIM0->TCR = 0;
- lcd.locate(0,0);
- lcd.printf("%02d:%02d:%02d", m,s,ms);
-}
-
-void resetTimer1()
+void sound_lowAlarm(){
+ pc.printf("lowalarm");}
+void sound_highAlarm(){
+ pc.printf("highalarm");}
+void VPacereceived()
{
- m=0;
- s=0;
- ms=0;
- LPC_TIM1->TCR = 0;
- lcd.locate(0,0);
- time1_count=0;
-
-}
-
-void VPacereceived()
-{ pc.printf("VPace aaya");
+ pc.printf("VPace received");
+ VPaceReceive=1;
+ wait(0.002);
+ APaceReceive=0;
+ pulses++;
Vreceived=true;
- VPaceReceive=1;
- APaceReceive=0;
+ Areceived=false;
+ if(mode == Test) {
+ //(*HeartTxPtr).signal_set(0x04);
+ }
+ if(mode == Test && test) {
+ if(testNumber == 2 || testNumber == 0 || testNumber == 3 || testNumber == 1) {
+ testResult = false;
+ } else if(testNumber == 6 || testNumber == 4) {
+ testResult = true;
+ }
+ }
}
void APacereceived()
-{ pc.printf("APace aaya");
+{
+ pc.printf("APace received");
+ APaceReceive=1;
+ wait(0.002);
+ APaceReceive=0;
Areceived=true;
- VPaceReceive=0;
- APaceReceive=1;
+ if(mode == Test && test) {
+ if(testNumber == 0) {
+ testResult = false;
+ } else if(testNumber == 4 || testNumber == 7 || testNumber == 3 || testNumber == 1) {
+ testResult = true;
+ }
+ }
}
void ASignalsend()
{
ASignal=1;
ASignal1=1;
- VSignal1=0;
+ wait(0.02);
+ Thread::wait(1);
+ ASignal1=0;
+ ASignal=0;
}
void VSignalsend()
{
VSignal=1;
VSignal1=1;
- ASignal1=0;
+ wait(0.02);
+ Thread::wait(1);
+ VSignal1=0;
+ VSignal==0;
}
void updateHeart()
@@ -179,10 +188,10 @@
pc.printf("HR");
while(Areceived==false||Vreceived==false);
if(Vreceived==true) {
- resetTimer0();
-
+ resett();
+
} else if(Areceived==true) {
- resetTimer0();
+ resett();
}
}
}
@@ -192,16 +201,16 @@
while(!pc.readable()) {
int r = rand() % 2;
pc.printf("HS");
- while(time_count<minwait_V && mode!=Random && (mode==Test || mode==Manual));
- pc.printf("%u",time_count);
- if(r==0) {
+ while(t<minwait_V && mode!=Random && (mode==Test || mode==Manual));
+ pc.printf("%u",t);
+ if(r==0) {
VSignalsend();
pc.printf("Vsignal");
- resetTimer0();
+ resett();
} else if(r==1) {
ASignalsend();
pc.printf("ASignal");
- resetTimer0();
+ resett();
}
}
}
@@ -224,9 +233,11 @@
pc.printf("Manual");
} else if(mode==Manual&&(key_input=='v'||key_input=='V')) {
mode=Manual;
+ VSignalsend();
pc.printf("Ventricular");
} else if(mode==Manual&&(key_input=='a'||key_input=='A')) {
mode=Manual;
+ ASignalsend();
pc.printf("Atrial");
} else if(key_input=='o'||key_input=='O') {
int a = 10 + rand() % 80;
@@ -234,22 +245,64 @@
pc.printf("Observer and %u",a);
heartInterval =a;
HeartSend("s");
+ } else {
+ pc.printf("Wrong key, sorry");
}
}
}
}
+void display(void const* args)
+{
+ while(1) {
+ Thread::wait(observationInterval/1000);
+// if(mode!=Test) {
+// if(mode!= changeobservationinterval) {
+// avgHeartRate=pulseCount*60000/(obsInterval);
+// pulseCount = 0;
+// updateDisplay();
+//
+// }
+// }
+ if(!Test) {
+ pc.printf("Avg Heart Rate: %02d bpm", heartRate);
+ while(!Vreceived||!VSignal==0) {
+ updateHeart();
+ }
+ while(k<=heartInterval*1000);
+ if(heartRate>high[mode]) {
+ sound_highAlarm();
+ heartRate=0;
+ resetk();
+ } else if(heartRate<low[mode]) {
+ sound_lowAlarm();
+ heartRate=0;
+ resetk();
+ } else if(heartRate >= low[mode] && heartRate <= high[mode]) {
+ heartRate=0;
+ resetk();
+ }
+
+
+ }
+ }
+}
+
- int main()
+void testmode(void const* args){
+ }
+
+
+int main()
{
pc.baud(9600);
VPace.rise(&VPacereceived);
APace.rise(&APacereceived);
timer0_init();
- timer1_init();
- heartreceive=new Thread(HeartReceive);
- heartsend=new Thread(HeartSend);
- heartkeyboard=new Thread(HeartKeyBoardModeSwitch);
+ Thread heartreceive(HeartReceive);
+ Thread heartsend(HeartSend);
+ Thread heartkeyboard(HeartKeyBoardModeSwitch);
+ Thread disPlay(display);
while(1) {
}
