[][src]Crate ltr_559

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