3 releases
0.1.2 | Nov 5, 2020 |
---|---|
0.1.1 | Dec 21, 2019 |
0.1.0 | Dec 20, 2019 |
#2284 in Embedded development
24 downloads per month
38KB
465 lines
Rust VEML6030/VEML7700 High Accuracy Ambient Light Sensor Driver
This is a platform agnostic Rust driver for the VEML6030 and VEML7700 high accuracy ambient
light sensors 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()
.
The devices
Vishay's VEML6030 and VEML7700 are high accuracy ambient light digital 16-bit resolution sensors in a miniature transparent package. They include a high sensitive photodiode, a low noise amplifier, a 16-bit A/D converter and support an easy to use I2C bus communication interface and additional interrupt feature. The ambient light result is as digital value available.
Datasheets: VEML6030 - VEML7700
Application Notes:
Usage
To use this driver, import this crate and an embedded_hal
implementation,
then instantiate the device.
VEML6030 and VEML7700 expose the same interface over I2C. To communicate with a VEML7700 simply use this driver as if communicating with a VEML6030.
Please find additional examples using hardware in this repository: driver-examples
use linux_embedded_hal::I2cdev;
use veml6030::{SlaveAddr, Veml6030};
fn main() {
let dev = 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
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
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.
Dependencies
~505KB