person-sensor 0.2.1

An embedded-hal driver for the Useful Things Person Sensor
Documentation
# Useful Things Person Sensor

A small driver for the Useful Things Person Sensor.

Original [developer guide](https://usfl.ink/ps_dev)

This driver has been tested with v1.1 of the sensor, but should also work with v1 and v2.
If you're able to validate the other board revisions, please open a pr to update this message :)

## Usage

The sensor offers two modes: continuous and single shot.
It can be converted between the two modes, and the compiler will prevent you from misusing
functionality that is only available in a specific mode, or when an interrupt pin is provided.

```rust
use person_sensor::PersonSensor;

let i2c = /* ... */;
let interrupt_pin = /* ... */;

// The driver can be initialized with or without the interrupt pin using the builder
let mut person_sensor = PersonSensorBuilder::new_standby(i2c)
    .with_interrupt(interrupt_pin) // optional
    .build()
    .await
    .unwrap();

let detections = person_sensor.capture_once().await.unwrap();

// ERROR: an interrupt pin was provided, but person_sensor is in standby mode
// person_sensor.wait_for_person().await.unwrap();

// To use the functionality in continuous mode, convert the sensor like below,
// or use the builder with new_continuous(...)
let mut person_sensor = sensor.into_continuous_mode();

person_sensor.get_detections().await.unwrap();

// Now we meet all the requirements to wait for the next detection using the interrupt
_ = person_sensor.wait_for_person().await.unwrap();
// Read the latest detections.
// Note wait_for_person() does not automatically read the detections
let detections = person_sensor.get_detections().await.unwrap();
```

## Examples

To run the examples on a pi pico, it should be sufficient to enter bootloader mode and run:

```bash
cd examples
cargo run --bin <example_name> --release
```

## 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.

## Contribution

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.