Demo PAH8011+ HeartRate on nRF52
Dependencies: mbed pixart_heart_rate_demo pixart_heart_rate_lib_keil_m4
Fork of PixArt_PAH8011_HeartRate_nRF52 by
main.cpp
- Committer:
- pixus_mbed
- Date:
- 2017-10-27
- Revision:
- 0:a6408c845aba
- Child:
- 1:3abb06bb21c5
File content as of revision 0:a6408c845aba:
#include "mbed.h" #include "system_clock.h" #include "pixart_pah8011.h" #include "pixart_heart_rate.h" static Serial pc(USBTX, USBRX); static I2C i2c(I2C_SDA0, I2C_SCL0); static InterruptIn pah8011_interrupt(p13); static volatile bool has_pah8011_interrupt = false; static uint64_t pah8011_interrupt_timestamp = 0; static void error_handler() { pc.printf("error_handler()!\n"); while (true) { } } static void debug_print(const char *fmt, ...) { char msg[128]; va_list marker; va_start(marker, fmt); vsprintf(msg, fmt, marker); va_end(marker); pc.printf(msg); } static void pah8011_interrupt_handle(void) { has_pah8011_interrupt = true; pah8011_interrupt_timestamp = system_clock_get_tick(); } static uint64_t time_to_millisec(uint64_t time) { return system_clock_time_to_milliseconds(time); } int main(void) { // system clock system_clock_init(); // serial port pc.baud(115200); pc.printf("Pixart PAH8011 demo\n"); // interrupt pah8011_interrupt.rise(pah8011_interrupt_handle); // heart_rate pixart::heart_rate heart_rate(time_to_millisec); heart_rate.enable_debug_print(debug_print); if (!heart_rate.init()) { pc.printf("heart_rate.init() failed\n"); error_handler(); } // pah8011 pixart::pah8011 pah8011; pah8011.enable_debug_print(debug_print); if (!pah8011.init(i2c)) { pc.printf("pah8011.init() failed\n"); error_handler(); } if (!pah8011.enable_ppg()) { pc.printf("pah8011.enable_ppg() failed\n"); error_handler(); } while(true) { if (has_pah8011_interrupt) { has_pah8011_interrupt = false; if (!pah8011.task()) { pc.printf("pah8011.task() failed\n"); error_handler(); } pixart::pah8011::task_result result; if (pah8011.get_result(result)) { if (result.ch_num != 2) error_handler(); for (uint32_t i = 0; i < result.num_per_ch; ++i) { pixart::heart_rate::ppg_sample ppg_sample; ppg_sample.ch1 = result.data[i * result.ch_num + 0]; ppg_sample.ch2 = result.data[i * result.ch_num + 1]; ppg_sample.is_touched = result.is_touched; ppg_sample.timestamp = pah8011_interrupt_timestamp; heart_rate.set_ppg_sample(ppg_sample); pixart::heart_rate::accel_sample accel_sample; accel_sample.x = 0.0f; accel_sample.y = 0.0f; accel_sample.z = 0.0f; accel_sample.timestamp = pah8011_interrupt_timestamp; heart_rate.set_accel_sample(accel_sample); } pixart::heart_rate::result hr_result = heart_rate.get_result(); if (hr_result.ret == pixart::heart_rate::ret_success) { pc.printf("time = %llu, hr = %d, hr_trust_level = %d\n", pah8011_interrupt_timestamp, (int)hr_result.hr, hr_result.hr_trust_level); } } } } }