This is a platform agnostic Rust driver for the APDS9960 digital proximity, ambient light, RGB
and gesture sensor, based on the [embedded-hal
] traits.
This driver allows you to:
- Enable/disable the sensor. See: enable()
.
- Enable/disable delay between proximity and / or color / ambient light cycles. See: enable_wait()
.
- Enable/disable long delay between proximity and / or color / ambient light cycles. See: enable_wait_long()
.
- Set the waiting time between proximity and / or color / ambient light cycles. See: set_wait_time()
.
- Force an interrupt. See: force_interrupt()
.
- Clear all non-gesture interrupts. See: clear_interrupts()
.
- Read the device ID. See: read_device_id()
.
- Proximity:
- Enable/disable the proximity sensor. See: enable_proximity()
.
- Enable/disable proximity interrupt generation. See: enable_proximity_interrupts()
.
- Enable/disable proximity saturation interrupt generation. See: enable_proximity_saturation_interrupts()
.
- Read the proximity data. See: read_proximity()
.
- Check whether the proximity data is valid. See: is_proximity_data_valid()
.
- Set the proximity interrupt low/high thresholds. See: set_proximity_low_threshold()
.
- Set the proximity offsets. See: set_proximity_offsets()
.
- Clear proximity interrupt. See: clear_proximity_interrupt()
.
- Color / ambient light:
- Enable/disable the color / ambient light sensor. See: enable_light()
.
- Enable/disable ambient light interrupt generation. See: enable_light_interrupts()
.
- Enable/disable ambient light saturation interrupt generation. See: enable_light_saturation_interrupts()
.
- Check whether the color / ambient light data is valid. See: is_light_data_valid()
.
- Read the color / ambient light data. See: read_light()
.
- Set the color / ambient light integration time. See: set_light_integration_time()
.
- Set the clear light channel interrupt low/high thresholds. See: set_light_low_threshold()
.
- Clear ambient light interrupt. See: clear_light_interrupt()
.
- Gesture detection:
- Enable/disable gesture detection. See: enable_gesture()
.
- Enable/disable gesture mode. See: enable_gesture_mode()
.
- Enable/disable gesture interrupts. See: enable_gesture_interrupts()
.
- Read whether there is valid gesture data available. See: is_gesture_data_valid()
.
- Read the amount of gesture data available. See: read_gesture_data_level()
.
- Set the threshold of amount of available gesture data. See: set_gesture_data_level_threshold()
.
- Read whether the gesture data has overflown. See: has_gesture_data_overflown()
.
- Read the gesture data. See: read_gesture_data()
.
- Set the gesture proximity entry/exit thresholds. See: set_gesture_proximity_entry_threshold()
.
- Set the gesture offsets. See: set_gesture_offsets()
.
The APDS-9960 device features advanced gesture detection, proximity detection, digital ambient light sense (ALS) and color sense (RGBC).
The communication is done through an I2C bidirectional bus.
Datasheet: - APDS9960
Please find additional examples in this repository: [apds9960-examples]
```rust extern crate embeddedhal; extern crate linuxembedded_hal;
extern crate nb; extern crate apds9960;
use apds9960::Apds9960; use linuxembeddedhal::I2cdev;
fn main() { let dev = I2cdev::new("/dev/i2c-1").unwrap(); let mut sensor = Apds9960::new(dev); sensor.enable().unwrap(); sensor.enableproximity().unwrap(); loop { let p = block!(sensor.readproximity()).unwrap(); println!("Proximity: {}", p); } } ```
Licensed under either of
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.