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 Pacemaker by
Diff: heart.cpp
- Revision:
- 1:c340c31174a5
- Parent:
- 0:a307f0abfd4d
- Child:
- 2:fc2f41386ee4
diff -r a307f0abfd4d -r c340c31174a5 heart.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/heart.cpp Sun Nov 29 01:17:40 2015 +0000
@@ -0,0 +1,230 @@
+#include "mbed.h"
+#include "TextLCD.h"
+#include "rtos.h"
+
+TextLCD lcd(p15, p16, p17, p18, p19, p20);
+Serial pc(USBTX, USBRX);
+
+InterruptIn APace(p23);
+InterruptIn VPace(p24);
+
+DigitalOut ASignal(p25);
+DigitalOut VSignal(p26);
+
+DigitalOut ASignal1(LED2);
+DigitalOut VSignal1(LED3);
+
+const int minwait_A=50;
+const int minwait_V=50;
+
+volatile int time_count=0;
+volatile int time1_count;
+int m=0;
+int s=0;
+int ms=0;
+
+char key_input;
+
+int LRI=1500;
+int URI=600;
+
+volatile bool Areceived=false;
+volatile bool Vreceived=false;
+
+const int sleepModeURI = 1000;
+const int sleepModeLRI = 2000;
+
+const int normalModeURI = 600;
+const int normalModeLRI = 1500;
+
+const int sportsModeURI = 343;
+const int sportsModeLRI = 600;
+
+const int manualModeURI = 343;
+const int manualModeLRI = 2000;
+
+typedef enum Modes {
+ Test,
+ Normal,
+ Sleep,
+ Random,
+ Sports,
+ Manual,
+ AtrialMode,
+ VentricularMode
+};
+Modes mode;
+
+Mutex HeartMutex;
+
+void resetTimer0();
+void resetTimer1();
+void VCheck();
+void ACheck();
+void ASignalsend();
+void VSignalsend();
+void HeartReceive();
+void HeartSend();
+void HeartKeyBoardModeSwitch();
+
+
+extern "C" void TIMER0_IRQHandler (void)
+{
+ if((LPC_TIM0->IR & 0x01) == 0x01) { // if interrupt provided, continue to next line
+ 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
+ }
+}
+
+void timer1_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
+
+}
+
+void resetTimer0()
+{
+ m=0;
+ s=0;
+ ms=0;
+ LPC_TIM0->TCR = 0;
+ lcd.locate(0,0);
+ lcd.printf("%02d:%02d:%02d", m,s,ms);
+}
+
+void resetTimer1()
+{
+ m=0;
+ s=0;
+ ms=0;
+ LPC_TIM1->TCR = 0;
+ lcd.locate(0,0);
+ time_count=0;
+}
+
+void VCheck()
+{
+ Vreceived=true;
+}
+
+void ACheck()
+{
+ Areceived=true;
+}
+
+void ASignalsend()
+{
+ ASignal=1;
+ ASignal1=1;
+ VSignal1=0;
+}
+
+void VSignalsend()
+{
+ VSignal=1;
+ VSignal1=1;
+ ASignal1=0;
+}
+void HeartReceive(void const* args)
+{
+ while(1) {
+ pc.printf("HR");
+ while(Areceived==false||Vreceived==false);
+ if(Vreceived==true) {
+ resetTimer0();
+ pc.printf("VPace aaya");
+ } else if(Areceived==true) {
+ resetTimer0();
+ pc.printf("APace aaya");
+ }
+ }
+}
+
+void HeartSend(void const* args)
+{
+ 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) { //(time_count<minwait_V && mode!=Random && mode==Test && mode==Manual && r==0) {
+ VSignalsend();
+ pc.printf("Vsignal");
+ resetTimer0();
+ } else if(r==1) {
+ ASignalsend();
+ pc.printf("ASignal");
+ resetTimer0();
+ }
+ }
+}
+void HeartKeyBoardModeSwitch(void const* args)
+{
+ while(1) {
+ if(pc.readable()) {
+
+ key_input = pc.getc();
+
+ if(key_input=='r'||key_input=='R') {
+ mode=Random;
+ pc.printf("Random");
+ HeartSend("s");
+ } else if(key_input=='t'||key_input=='T') {
+ mode=Test;
+ pc.printf("Test");
+ } else if(key_input=='m'||key_input=='M') {
+ mode=Manual;
+ pc.printf("Manual");
+ key_input = pc.getc();
+ } else if(mode==Manual&&(key_input=='v'||key_input=='V')) {
+ mode=Manual;
+ pc.printf("Ventricular");
+ } else if(mode==Manual&&(key_input=='a'||key_input=='A')) {
+ mode=Manual;
+ pc.printf("Atrial");
+
+
+ }
+ }
+ }
+}
+int main()
+{
+ pc.baud(9600);
+ VPace.rise(&VCheck);
+ APace.rise(&ACheck);
+ timer0_init();
+ timer1_init();
+ Thread heartreceive(HeartReceive);
+ Thread heartsend(HeartSend);
+ Thread heartkeyboard(HeartKeyBoardModeSwitch);
+
+ while(1) {
+ }
+}
\ No newline at end of file
