This program displays heart rate and time between heart beats on LCD, prints it to a USB serial port, print it to a bluetooth serial port and store it on a USB mass storage device. The program has two interrupt routines: 1.Every 1ms a counter is increased with one, 2. On every heart beat the counter is value copied. In the main loop the beats per minute are calculated. Ext.Modules:- Polar RMCM-01 heart rate module connected to pin8. - 2x16 LCD - a RF-BT0417CB bluetooth serial device connected to p27 and p28 - an USB mass storage device

Dependencies:   TextLCD mbed

Revision:
0:939617e180e8
Child:
1:8b001f936bb0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Nov 24 21:31:44 2010 +0000
@@ -0,0 +1,62 @@
+//This program measures heart rate and displays it on the LCD and sends the time between heart beats to the serial port.
+//The program has two interrupt routines: 1.Every 1ms a counter is increased with one, 2. On every heart beat the counter is value copied.
+//In the main loop the beats per minute are calculated.
+//Ext.Modules: -Polar RMCM-01 heart rate module connected to pin8.
+//             -2x16 character.
+
+#include "mbed.h"
+#include "TextLCD.h"
+
+TextLCD lcd(p10, p12, p15, p16, p29, p30); // rs, e, d0-d3
+InterruptIn beat(p8);
+DigitalOut led(LED1);
+Ticker mscnt;
+
+//initialize
+int count, CNT,displayBPMFlag ;
+
+void ms_counter() {     //this interrupt routine starts every ms
+    count++;            //the counter is increased with 1
+    if (count>1999) {   //when no heart beat is detected for >2ms, then display "-" in the main loop
+        CNT=count;          // copy counter value to CNT
+        displayBPMFlag = 1; // set flag that the BPM can be put to LCD in the main loop
+        count=0;            // reset counter value
+    }
+}
+
+void flip() { //this interrupt routine starts on every heart beat
+    CNT = count;        // copy counter value to CNT
+    count = 0 ;         // reset counter value
+    displayBPMFlag = 1; // set flag that the BPM can be put to LCD in the main loop
+    led = !led;         // toggle the led on/off
+}
+
+int main() {
+    int BPM;                            //initialize BPM
+    lcd.cls();                          //clear the lcd display
+    mscnt.attach_us(&ms_counter, 1000); // the address of the function to be attached (ms_counter) and the interval (1ms)
+    beat.rise(&flip);                   // attach the address of the flip function to the rising edge
+    while (1) {
+        if (displayBPMFlag == 1) {  // program loops around in here
+            displayBPMFlag = 0;     // clear displayBPMflag
+            if (CNT>250&CNT<2000) { //when heart rate is within 30-240BPM
+                BPM = 60000/CNT;            //calculate BPM
+                lcd.cls();                  //clear the lcd display
+                lcd.locate(0,0);            //set cursor to first character and first line
+                lcd.printf("%i ms", CNT);   //display the time in ms on the lcd
+                lcd.locate(0,1);            //set cursor to first character and second line
+                lcd.printf("%i BPM",BPM);   //display the beats per minute on the lcd
+                printf("%i\r\n", CNT);      //print the time in ms to the serial port
+            } else {//when heart rate is NOT within 30-240BPM
+                lcd.cls();                  //clear the lcd display
+                lcd.locate(0,0);            //set cursor to first character and first line
+                lcd.printf("- ms");         //display empty time in ms on the lcd
+                lcd.locate(0,1);            //set cursor to first character and second line
+                lcd.printf("- BPM");        //display empty beats per minute on the lcd
+                printf("- \r\n", CNT);      //print the time in ms to the serial port
+            }
+
+        }
+
+    }
+}