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:
1:8b001f936bb0
Parent:
0:939617e180e8
Child:
2:e660e68a91fa
--- a/main.cpp	Wed Nov 24 21:31:44 2010 +0000
+++ b/main.cpp	Sat Nov 27 11:13:20 2010 +0000
@@ -1,23 +1,27 @@
-//This program measures heart rate and displays it on the LCD and sends the time between heart beats to the serial port.
+//This program displays heart rate and time between heart beats on LCD, serial port and 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 character.
+//             -2x16 LCD
 
 #include "mbed.h"
 #include "TextLCD.h"
+#include "MSCFileSystem.h"
+#define FSNAME "msc"
+MSCFileSystem msc(FSNAME);
 
+Timer t;                // counts the time from beginning of main loop
 TextLCD lcd(p10, p12, p15, p16, p29, p30); // rs, e, d0-d3
-InterruptIn beat(p8);
-DigitalOut led(LED1);
-Ticker mscnt;
+InterruptIn beat(p8);   // beat is the name for a inteerupt on pin 8 
+DigitalOut led(LED1);   // this led is toggled on every heart beat
+Ticker mscnt;           // this is used to create a ms counter
 
 //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
+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
@@ -32,6 +36,7 @@
 }
 
 int main() {
+    t.start();                          // The ti
     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)
@@ -46,7 +51,11 @@
                 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
+                printf("%i\r\n",CNT);       //print time between heart beats to the serial port
+                FILE *fp = fopen( "/msc/HR.txt", "a+");//Open file on USB Mass Storage device, 8.3 filesystem, open for write and append 
+                if ( fp == NULL )error("Could not open file for write\n"); // error code
+                fprintf(fp, "%f %i\r\n",t.read(),BPM);//write time-since-start-main-loop and BPM to file
+                fclose(fp);     // close file
             } 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
@@ -59,4 +68,5 @@
         }
 
     }
-}
+    
+}
\ No newline at end of file