首页下载资源硬件开发MAX30102脉搏血氧仪和心率传感器库(Arduino)

ZIPMAX30102脉搏血氧仪和心率传感器库(Arduino)

weixin_624251994.06KB需要积分:1

资源文件列表:

MAX30102_on_ESP8266_with_Arduino_.zip 大约有3个文件
  1. arduino_code.ino 2.47KB
  2. MAX30102.cpp 4.31KB
  3. MAX30102.h 5.61KB

资源介绍:

使用Arduino编写了MAX30102的库函数。
#include "MAX30102.h" #include bool MAX30102::init(int max30102_addr){ this->addr = max30102_addr; Wire.begin(); Wire.setClock(400000); // 检查从设备是否为MAX30102 if (this->read_reg(MAX30102_REGADDR_PARTID) != MAX30102_CONST_PART_ID) { return false; } this->shutdown(); return true; } int MAX30102::read_reg(int reg_addr) const { Wire.beginTransmission(this->addr); Wire.write(reg_addr); Wire.endTransmission(); Wire.requestFrom(this->addr, (uint8_t)1); if (Wire.available()) { return Wire.read(); } return -1; } int MAX30102::read_reg(int reg_addr, uint8_t count, uint8_t* buffer) const { Wire.beginTransmission(this->addr); Wire.write(reg_addr); Wire.endTransmission(); Wire.requestFrom(this->addr, count); int i = 0; if (Wire.available()) { for (; iaddr); Wire.write(reg_addr); Wire.write(data); Wire.endTransmission(); } void MAX30102::clear_interrupt_bits() const { this->read_reg(MAX30102_REGADDR_INT_STATUS_1); this->read_reg(MAX30102_REGADDR_INT_STATUS_2); } bool MAX30102::set_interrupt_1(uint8_t mode, bool enable) const { return this->set_interrupt(MAX30102_REGADDR_INT_EN_1, mode, enable); } bool MAX30102::set_interrupt_2(uint8_t mode, bool enable) const { return this->set_interrupt(MAX30102_REGADDR_INT_EN_2, mode, enable); } bool MAX30102::set_interrupt(uint8_t regaddr, uint8_t mode, bool enable) const { int config = this->read_reg(MAX30102_REGADDR_INT_EN_1); if (config == -1) { return false; } if (enable) { this->write_reg(MAX30102_REGADDR_INT_EN_1, ((uint8_t)config)|mode); } else { this->write_reg(MAX30102_REGADDR_INT_EN_1, (uint8_t)config|(~mode)); } return true; } void MAX30102::clear_fifo() const { this->write_reg(MAX30102_REGADDR_FIFO_WRITE_PTR, 0); this->write_reg(MAX30102_REGADDR_OVERFLOW_COUNTER, 0); this->write_reg(MAX30102_REGADDR_FIFO_READ_PTR, 0); } void MAX30102::set_spO2(uint8_t sample_rate, uint8_t led_pulse_width) const { uint8_t config = 0b00100000|sample_rate|led_pulse_width; this->write_reg(MAX30102_REGADDR_SPO2_CONFIG, config); } bool MAX30102::set_mode(uint8_t mode) const { int config = this->read_reg(MAX30102_REGADDR_MODE_CONFIG); if (config == -1) { return false; } this->write_reg(MAX30102_REGADDR_MODE_CONFIG, (((uint8_t)config)&0b11111000)|mode); return true; } void MAX30102::reset() const { this->write_reg(MAX30102_REGADDR_MODE_CONFIG, 0b01000000); } bool MAX30102::shutdown() const { int config = this->read_reg(MAX30102_REGADDR_MODE_CONFIG); if (config == -1) { return false; } this->write_reg(MAX30102_REGADDR_MODE_CONFIG, ((uint8_t)config)|0b10000000); return true; } bool MAX30102::enable() const { int config = this->read_reg(MAX30102_REGADDR_MODE_CONFIG); if (config == -1) { return false; } this->write_reg(MAX30102_REGADDR_MODE_CONFIG, (uint8_t)config&0b00000111); return true; } void MAX30102::set_led_pulse_amp(uint8_t led1_pa, uint8_t led2_pa) const { this->write_reg(MAX30102_REGADDR_LED_PULSE_AMP_1, led1_pa); this->write_reg(MAX30102_REGADDR_LED_PULSE_AMP_2, led2_pa); } void MAX30102::set_fifo(uint8_t num_sample_avg, bool roll_on_full, uint8_t num_almost_full) const { num_sample_avg = constrain(num_sample_avg, 1, 32); num_almost_full = constrain(num_almost_full, 0, 15); uint8_t config = 0; while ((num_sample_avg>>=1) != 0) { ++config; } config <<= 5; config |= (roll_on_full?0b00010000:0); config |= num_almost_full; this->write_reg(MAX30102_REGADDR_FIFO_CONFIG, config); } void MAX30102::begin_default() const { this->shutdown(); // FIFO this->clear_fifo(); this->set_fifo(1, true, 0); // spO2 mode this->set_spO2(MAX30102_400_SAMPLES_PER_SECOND, MAX30102_LED_PULSE_WIDTH_411_US); this->set_led_pulse_amp(0x1F, 0x1F); this->set_mode(MAX30102_MODE_SPO2); this->enable(); }
100+评论
captcha