Skip to main content

Crate ltr_559

Crate ltr_559 

Source
Expand description

This is a platform agnostic Rust driver for the Ltr559 ambient light sensors using the embedded-hal traits.

This driver allows you to:

§The devices

This driver is compatible with the device Ltr-559

Datasheets:

§Usage examples (see also examples folder)

To use this driver, import this crate and an embedded_hal implementation, then instantiate the appropriate device.

In the following examples an instance of the device will be created. Ltr559::new_device(...).

§Create a driver instance for the Ltr559

extern crate linux_embedded_hal as hal;
extern crate ltr_559;
use ltr_559::{Ltr559, SlaveAddr};

let dev = hal::I2cdev::new("/dev/i2c-1").unwrap();
let address = SlaveAddr::default();
let sensor = Ltr559::new_device(dev, address);

§Read lux

extern crate linux_embedded_hal as hal;
#[macro_use]
extern crate nb;
extern crate ltr_559;
use ltr_559::{Ltr559, SlaveAddr, AlsGain, AlsIntTime, AlsMeasRate};

let dev = hal::I2cdev::new("/dev/i2c-1").unwrap();
let address = SlaveAddr::default();
let mut sensor = Ltr559::new_device(dev, address);
sensor
      .set_als_meas_rate(AlsIntTime::_50ms, AlsMeasRate::_50ms)
      .unwrap();
   sensor.set_als_contr(AlsGain::Gain4x, false, true).unwrap();
   loop {
     let status = sensor.get_status().unwrap();
        if status.als_data_valid {
            let (lux_raw_0, lux_raw_1) = sensor.get_als_raw_data().unwrap();
            let lux = sensor.get_lux().unwrap();
            println!(
                "Raw Lux CH1: 0x{:04x}, CH0: 0x{:04x} Lux = {}, Status.als_data_valid = {}",
                lux_raw_0, lux_raw_1, lux, status.als_data_valid
            );
        }
    }

§Set the integration time and manual lux range

extern crate linux_embedded_hal as hal;
extern crate ltr_559;
use ltr_559::{AlsIntTime, AlsMeasRate, AlsGain, Ltr559, SlaveAddr};

let dev = hal::I2cdev::new("/dev/i2c-1").unwrap();
let address = SlaveAddr::default();
let mut sensor = Ltr559::new_device(dev, address);
sensor.set_als_meas_rate(AlsIntTime::_400ms, AlsMeasRate::_1000ms).unwrap();
sensor.set_als_contr(AlsGain::Gain48x, false, true).unwrap();

§Configure interrupts

extern crate linux_embedded_hal as hal;
#[macro_use]
extern crate nb;
extern crate ltr_559;
use ltr_559::{
    InterruptMode, InterruptPinPolarity, Ltr559, SlaveAddr, AlsPersist, PsPersist,
};

let dev = hal::I2cdev::new("/dev/i2c-1").unwrap();
let address = SlaveAddr::default();
let mut sensor = Ltr559::new_device(dev, address);
sensor.set_interrupt(InterruptPinPolarity::High, InterruptMode::Both).unwrap();
sensor.set_interrupt_persist(AlsPersist::_4v, PsPersist::_5v).unwrap();
sensor.set_als_low_limit_raw(1000).unwrap();
sensor.set_als_high_limit_raw(15000).unwrap();
loop {
    let status = sensor.get_status().unwrap();
    println!("status {:?}", status);
}

Re-exports§

pub use crate::types::AlsGain;
pub use crate::types::AlsIntTime;
pub use crate::types::AlsMeasRate;
pub use crate::types::AlsPersist;
pub use crate::types::InterruptMode;
pub use crate::types::LedCurrent;
pub use crate::types::LedDutyCycle;
pub use crate::types::LedPulse;
pub use crate::types::PsMeasRate;
pub use crate::types::PsPersist;

Modules§

types
Types used in LTR

Structs§

Ltr559
Ltr559 device driver
Status
Conversion status

Enums§

Error
Errors in this crate
InterruptPinPolarity
Interrupt pin polarity (active state)
ModeChangeError
Error type for mode changes.
SlaveAddr
Possible slave addresses