Lucas Tai-MacArthur / Mbed 2 deprecated PMController

Dependencies:   TextLCD mbed-rtos mbed

Fork of PacemakerController by Chad Nachiappan

Files at this revision

API Documentation at this revision

Comitter:
lucastai
Date:
Sat Nov 28 19:34:39 2015 +0000
Parent:
1:979e9e785549
Child:
3:44d132582373
Commit message:
Alarm, Mode working

Changed in this revision

PMTest.cpp Show diff for this revision Revisions of this file
PacemakerController.cpp Show annotated file Show diff for this revision Revisions of this file
TextLCD.lib Show annotated file Show diff for this revision Revisions of this file
mbed-rtos.lib Show annotated file Show diff for this revision Revisions of this file
--- a/PMTest.cpp	Tue Nov 24 23:19:34 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-#include "mbed.h"
-
-// This represents the heart
-DigitalOut myled(LED1);
-int p_clock;
-
-
-
-void timer0_init(void)
-{   
-    LPC_SC->PCONP |=1<1;            //timer0 power on
-    LPC_TIM0->MR0 = 239800;        //10 msec
-    LPC_TIM0->MCR = 3;              //interrupt and reset control
-                                    //3 = Interrupt & reset timer0 on match
-                                    //1 = Interrupt only, no reset of timer0
-    NVIC_EnableIRQ(TIMER0_IRQn);    //enable timer0 interrupt
-    LPC_TIM0->TCR = 1;              //enable Timer0
-}
-
-int main() {
-    while(1) {
-        myled = 1;
-        wait(0.2);
-        myled = 0;
-        wait(0.2);
-    }
-}
--- a/PacemakerController.cpp	Tue Nov 24 23:19:34 2015 +0000
+++ b/PacemakerController.cpp	Sat Nov 28 19:34:39 2015 +0000
@@ -1,34 +1,142 @@
 #include "mbed.h"
+#include "LPC17xx.h"
+#include "TextLCD.h"
+#include "rtos.h"
+#include "Thread.h"
+using namespace rtos;
 
+ 
 // This is for the pacemaker
-TextLCD lcd(p15, p16, p17, p18, p19, p20, TextLCD::LCD16x2);
+volatile unsigned short timer_count;
+Serial pc(USBTX, USBRX);
+TextLCD lcd(p15, p16, p17, p18, p19, p20, TextLCD::LCD20x4); // rs, e, d4-d7
+
 
 int h_clock;
 
-void A_Pace() {
-    
+
+// constants
+int MAX_PM_RT = 180;
+int MIN_PM_RT = 40;
+enum mode {NORMAL, SLEEP, EXERCISE, MANUAL};
+
+// counters
+int beats = 0;
+
+// state variables
+int upper_bound = 100;
+int lower_bound = 40;
+int obs_int = 10;
+mode curr_mode = NORMAL;
+
+
+
+// alarms 
+DigitalOut Apace(LED1);
+DigitalOut Vpace(LED2);
+DigitalOut Asense(LED3);
+DigitalOut Vsense(LED4);
+
+// hardware interrupt handler, adapted from code in piazza post by Dagaen
+extern "C" void TIMER0_IRQHandler (void)
+{
+if((LPC_TIM0->IR & 0x01) == 0x01)   // if MR0 interrupt, proceed
+    {
+    LPC_TIM0->IR |= 1 << 0;         // Clear MR0 interrupt flag
+    timer_count++;                  //increment timer_count
+    }
+}
+ 
+// init the hardware interrupt (timer0), adapted same as above
+void timer0_init(void)
+{
+    LPC_SC->PCONP |=1<1;            //timer0 power on
+    LPC_SC-> PCLKSEL0 |= 1 << 2;    // set timer clock to CCLCK nondivided (1 clock cycle = 1 increment)
+    LPC_TIM0->MR0 = 1000000;          //100mhz clock cycle, 1 cycle = 10ns, 10ms = 10 000 000 ns = 1M cycles
+    LPC_TIM0->MCR = 3;              //interrupt and reset control
+                                    //3 = Interrupt & reset timer0 on match (111) sets all three bits
+    NVIC_EnableIRQ(TIMER0_IRQn);    //enable timer0 interrupt
 }
 
-void A_Pace() {
+
+void PM_ALARM(void const *argument){
+    
+    // min hr alarm
+    if( beats < MIN_PM_RT){
+        lcd.locate(0,1);
+        lcd.printf("!<"); 
+    }
+      
+    // max hr alarm
+    if(beats > MAX_PM_RT){
+        lcd.locate(0,1);
+        lcd.printf("!>"); 
+    }  
     
 }
 
-void timer0_init(void)
-{   
-    LPC_SC->PCONP |=1<1;            //timer0 power on
-    LPC_TIM0->MR0 = 239800;        //10 msec
-    LPC_TIM0->MCR = 3;              //interrupt and reset control
-                                    //3 = Interrupt & reset timer0 on match
-                                    //1 = Interrupt only, no reset of timer0
-    NVIC_EnableIRQ(TIMER0_IRQn);    //enable timer0 interrupt
-    LPC_TIM0->TCR = 1;              //enable Timer0
+// hw interrupt callback, deal with the keyboard input from PC
+void MODE_SWITCH() {
+    
+    // get the char, put it on the PC command line
+    char a = pc.getc();
+
+    // if the char is N, update bounds to normal mode
+    if(a == 'N'){
+        curr_mode = NORMAL;
+        upper_bound = 100;
+        lower_bound = 40;
+        pc.printf("MODE IS N\n");  
+    // if the char is S, set bounds to sleep
+    }else if (a == 'S'){
+        curr_mode = SLEEP;
+        upper_bound = 60;
+        lower_bound = 30;
+        pc.printf("MODE IS S\n");  
+    // if the char is E, set bounds to exercise
+    }else if (a == 'E'){
+        curr_mode = EXERCISE;
+        upper_bound = 175;
+        lower_bound = 100;
+        pc.printf("MODE IS E\n");  
+        beats = 2;
+    // if the char is M, set to manual
+    }else if (a == 'M'){
+        curr_mode = MANUAL;
+        upper_bound = 175;
+        lower_bound = 30;
+        beats = 300;
+        pc.printf("MODE IS MANUAL\n");  
+    // check for A if mode is manual
+    }else if (a == 'A'){
+        if(curr_mode == MANUAL){
+            pc.printf("MODE IS MANUAL GOT APACE\n");  
+        }
+    // check for V is mode is manual  
+    }else if (a == 'V'){
+        if(curr_mode == MANUAL){
+            pc.printf("MODE IS MANUAL GOT VPACE\n");   
+        }  
+    }else{
+        // do nothing for invalid char
+    }
+    
+    
+}
+
+
+
+void apace() {
+    
+}
+
+void vpace() {
+    
 }
 
 int main() {
-    while(1) {
-        myled = 1;
-        wait(0.2);
-        myled = 0;
-        wait(0.2);
-    }
+    // connect the serial device (PC keybd) to the interrupt
+    pc.attach(&MODE_SWITCH);
+    
+    //Thread t3(PM_ALARM);
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TextLCD.lib	Sat Nov 28 19:34:39 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/simon/code/TextLCD/#308d188a2d3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-rtos.lib	Sat Nov 28 19:34:39 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed-rtos/#6c35e082773a