veml6030 0.1.0

Platform-agnostic Rust driver for the VEML6030 high-accuracy ambient light sensor.
Documentation

Rust VEML6030 High Accuracy Ambient Light Sensor Driver

crates.io Docs Build Status Coverage Status

This is a platform agnostic Rust driver for the VEML6030 high accuracy ambient light sensor using the embedded-hal traits.

This driver allows you to:

  • Enable/disable the device. See: enable().
  • Read the measured lux value. See: read_lux().
  • Read the white channel measurement. See: read_white().
  • Read the measured ALS value in raw format. See: read_raw().
  • Calculate the compensated lux for a raw ALS value. See: convert_raw_als_to_lux().
  • Set the gain. See: set_gain().
  • Set the integration time. See: set_integration_time().
  • Set the fault count. See: set_fault_count().
  • Enable/disable and configure power saving mode. See: enable_power_saving().
  • Enable/disable interrupts. See: enable_interrupts().
  • Read the interrupt status. See: read_interrupt_status().
  • Set the high/low thresholds in lux or raw. See: set_high_threshold_lux().
  • Calculate the compensated raw threshold value ahead of time. See: calculate_raw_threshold_value().

Introductory blog post

The device

Vishay's VEML6030 is a high accuracy ambient light digital 16-bit resolution sensor in a miniature transparent 2mm x 2mm package. It includes a high sensitive photodiode, a low noise amplifier, a 16-bit A/D converter and supports an easy to use I2C bus communication interface and additional interrupt feature. The ambient light result is as digital value available.

Datasheet:

Application Note:

Usage

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

extern crate linux_embedded_hal as hal;
extern crate veml6030;
use veml6030::{SlaveAddr, Veml6030};

fn main() {
    let dev = hal::I2cdev::new("/dev/i2c-1").unwrap();
    let address = SlaveAddr::default();
    let mut sensor = Veml6030::new(dev, address);
    sensor.enable().unwrap();
    loop {
        let lux = sensor.read_lux().unwrap();
        println!("lux: {:2}", lux);
    }
}

Support

For questions, issues, feature requests, and other changes, please file an issue in the github project.

License

Licensed under either of

at your option.

Contributing

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.