[−][src]Crate max3010x
This is a platform agnostic Rust driver for the MAX3010x high-sensitivity
pulse oximeter and heart-rate sensor for wearable health, based on the
embedded-hal
traits.
This driver allows you to:
- Get the number of samples available on the FIFO. See
get_available_sample_count()
. - Get the number of samples lost from the FIFO. See
get_overflow_sample_count()
. - Read samples from the FIFO. See
read_fifo()
. - Perform a temperature measurement. See
read_temperature()
. - Change into heart-rate, oximeter or multi-LED modes. See
into_multi_led()
. - Set the sample averaging. See
set_sample_averaging()
. - Set the LED pulse amplitude. See
set_pulse_amplitude()
. - Set the LED pulse width. See
set_pulse_width()
. - Set the sampling rate. See
set_sampling_rate()
. - Set the ADC range. See
set_adc_range()
. - Set the LED time slots in multi-LED mode.
set_led_time_slots()
. - Enable/disable the FIFO rollover. See
enable_fifo_rollover()
. - Clear the FIFO. See
clear_fifo()
. - Wake-up and shutdown the device. See
shutdown()
. - Perform a software reset. See
reset()
. - Get the device part and revision id. See
get_part_id()
. - Interrupts:
- Read the status of all interrupts. See
read_interrupt_status()
. - Set FIFO-almost-full level interrupt. See
set_fifo_almost_full_level_interrupt()
. - Enable/disable the FIFO-almost-full interrupt. See
enable_fifo_almost_full_interrupt()
. - Enable/disable the ambient-light-cancellation overflow interrupt. See
enable_alc_overflow_interrupt()
. - Enable/disable the temperature-ready interrupt. See
enable_temperature_ready_interrupt()
. - Enable/disable the new-FIFO-data-ready interrupt. See
enable_new_fifo_data_ready_interrupt()
.
- Read the status of all interrupts. See
The device
The MAX30102
is an integrated pulse oximetry and heart-rate monitor module.
It includes internal LEDs, photodetectors, optical elements, and low-noise
electronics with ambient light rejection. The MAX30102
provides a complete
system solution to ease the design-in process for mobile and
wearable devices.
The MAX30102
operates on a single 1.8V power supply and a separate 3.3V
power supply for the internal LEDs. Communication is through a standard
I2C-compatible interface. The module can be shut down through software
with zero standby current, allowing the power rails to remain
powered at all times.
Datasheet:
Usage examples (see also examples folder)
To use this driver, import this crate and an embedded_hal
implementation,
then instantiate the device.
Please find additional examples using hardware in this repository: driver-examples
Read samples in heart-rate mode
extern crate linux_embedded_hal as hal; extern crate max3010x; use max3010x::{Max3010x, Led, SampleAveraging}; let dev = hal::I2cdev::new("/dev/i2c-1").unwrap(); let mut sensor = Max3010x::new_max30102(dev); let mut sensor = sensor.into_heart_rate().unwrap(); sensor.set_sample_averaging(SampleAveraging::Sa4).unwrap(); sensor.set_pulse_amplitude(Led::All, 15).unwrap(); sensor.enable_fifo_rollover().unwrap(); let mut data = [0; 3]; let samples_read = sensor.read_fifo(&mut data).unwrap(); // get the I2C device back let dev = sensor.destroy();
Set led slots in multi-led mode
extern crate linux_embedded_hal as hal; extern crate max3010x; use max3010x::{ Max3010x, Led, TimeSlot }; let dev = hal::I2cdev::new("/dev/i2c-1").unwrap(); let mut max30102 = Max3010x::new_max30102(dev); let mut max30102 = max30102.into_multi_led().unwrap(); max30102.set_pulse_amplitude(Led::All, 15).unwrap(); max30102.set_led_time_slots([ TimeSlot::Led1, TimeSlot::Led2, TimeSlot::Led1, TimeSlot::Disabled ]).unwrap(); max30102.enable_fifo_rollover().unwrap(); let mut data = [0; 2]; let samples_read = max30102.read_fifo(&mut data).unwrap(); // get the I2C device back let dev = max30102.destroy();
Structs
InterruptStatus | Interrupt status flags |
Max3010x | MAX3010x device driver. |
Enums
AdcRange | ADC range |
Error | All possible errors in this crate |
FifoAlmostFullLevelInterrupt | Number of empty data samples when the FIFO almost full interrupt is issued. |
Led | LEDs |
LedPulseWidth | LED pulse width (determines ADC resolution) |
SampleAveraging | Sample averaging |
SamplingRate | Sampling rate |
TimeSlot | Multi-LED mode sample time slot configuration |