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
Diff: main.cpp
- 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