Measuring plethysmogram with BH1792GLC (Rohm Semiconductor) and calculating pulse rate

Dependencies:   USBDevice mbed

Committer:
t_tatsuoka
Date:
Mon Feb 05 21:28:19 2018 +0000
Revision:
1:90f70c146a26
Parent:
0:18d735a66926
Ver. 1.0.1 ???beep?????????????????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
t_tatsuoka 0:18d735a66926 1 /**
t_tatsuoka 0:18d735a66926 2 * @file main.cpp
t_tatsuoka 0:18d735a66926 3 * @brief Measuring plethysmogram and pulse rate with BH1792GLC
t_tatsuoka 1:90f70c146a26 4 * @date 2018.02.06
t_tatsuoka 1:90f70c146a26 5 * @version 1.0.1
t_tatsuoka 0:18d735a66926 6 */
t_tatsuoka 0:18d735a66926 7 #include "mbed.h"
t_tatsuoka 0:18d735a66926 8 #include "USBSerial.h"
t_tatsuoka 0:18d735a66926 9 #include "PulseRate.h"
t_tatsuoka 0:18d735a66926 10
t_tatsuoka 0:18d735a66926 11 #define PACKET_HEADER (0xAA)
t_tatsuoka 0:18d735a66926 12 #define PULSE_RATE_ID (0xBB)
t_tatsuoka 0:18d735a66926 13 #define BYTE_MASK (0xFF)
t_tatsuoka 0:18d735a66926 14
t_tatsuoka 0:18d735a66926 15 USBSerial serial;
t_tatsuoka 0:18d735a66926 16 #ifdef _OP_MODE_INT_AD
t_tatsuoka 0:18d735a66926 17 PulseRate pr(p20, LED1, p26); /* Sensor, LED, Beep */
t_tatsuoka 0:18d735a66926 18 #elif defined _OP_MODE_BH1792GLC
t_tatsuoka 0:18d735a66926 19 PulseRate pr(p28, p27, p20, LED1, p26); /* SDA, SCL, INT, LED, Beep */
t_tatsuoka 0:18d735a66926 20 #endif
t_tatsuoka 0:18d735a66926 21
t_tatsuoka 0:18d735a66926 22 /** Send data packet
t_tatsuoka 0:18d735a66926 23 * @param second_val Byte data at packet address 0x01
t_tatsuoka 0:18d735a66926 24 * @param data_val Short data at packet address 0x02, 0x03
t_tatsuoka 0:18d735a66926 25 */
t_tatsuoka 0:18d735a66926 26 bool send_packet(int second_val, int data_val)
t_tatsuoka 0:18d735a66926 27 {
t_tatsuoka 0:18d735a66926 28 if(serial.writeable()) {
t_tatsuoka 0:18d735a66926 29 serial.putc(PACKET_HEADER);
t_tatsuoka 0:18d735a66926 30 serial.putc(second_val & BYTE_MASK);
t_tatsuoka 0:18d735a66926 31 serial.putc((data_val >> 8 ) & BYTE_MASK);
t_tatsuoka 0:18d735a66926 32 serial.putc(data_val & BYTE_MASK);
t_tatsuoka 0:18d735a66926 33 return true;
t_tatsuoka 0:18d735a66926 34 } else {
t_tatsuoka 0:18d735a66926 35 return false;
t_tatsuoka 0:18d735a66926 36 }
t_tatsuoka 0:18d735a66926 37 }
t_tatsuoka 0:18d735a66926 38
t_tatsuoka 0:18d735a66926 39 /** Main function
t_tatsuoka 0:18d735a66926 40 */
t_tatsuoka 0:18d735a66926 41 int main()
t_tatsuoka 0:18d735a66926 42 {
t_tatsuoka 0:18d735a66926 43 uint32_t num;
t_tatsuoka 0:18d735a66926 44 int32_t wave;
t_tatsuoka 0:18d735a66926 45 uint32_t rate;
t_tatsuoka 0:18d735a66926 46
t_tatsuoka 0:18d735a66926 47 pr.start_sampling(); /* start procedure */
t_tatsuoka 0:18d735a66926 48
t_tatsuoka 0:18d735a66926 49 while(1) {
t_tatsuoka 0:18d735a66926 50 /* Pulse waveform */
t_tatsuoka 0:18d735a66926 51 if(pr.get_wave(num, wave)) {
t_tatsuoka 0:18d735a66926 52 send_packet(num, wave);
t_tatsuoka 0:18d735a66926 53 }
t_tatsuoka 0:18d735a66926 54 /* Pulse rate */
t_tatsuoka 0:18d735a66926 55 if(pr.get_pr_val(rate)) {
t_tatsuoka 0:18d735a66926 56 send_packet(PULSE_RATE_ID, rate);
t_tatsuoka 0:18d735a66926 57 }
t_tatsuoka 0:18d735a66926 58 }
t_tatsuoka 0:18d735a66926 59 }