#[cfg(all(not(feature = "async"), feature = "embedded-sensors-hal"))]
fn main() -> anyhow::Result<()> {
use anyhow::anyhow;
use embedded_sensors_hal::temperature::{DegreesCelsius, TemperatureSensor};
use pico_de_gallo_hal::Hal;
use tmp108::Tmp108;
fn read_any_sensor<S: TemperatureSensor>(sensor: &mut S) -> Result<DegreesCelsius, S::Error> {
sensor.temperature()
}
let hal = Hal::new();
let i2c = hal.i2c();
let mut tmp = Tmp108::new_with_a0_gnd(i2c);
let temperature = read_any_sensor(&mut tmp).map_err(|_| anyhow!("read failed"))?;
println!("Temperature (via trait): {temperature:.2} C");
Ok(())
}
#[cfg(all(feature = "async", feature = "embedded-sensors-hal-async"))]
#[tokio::main]
async fn main() -> anyhow::Result<()> {
use anyhow::anyhow;
use embedded_sensors_hal_async::temperature::{DegreesCelsius, TemperatureSensor};
use pico_de_gallo_hal::Hal;
use tmp108::Tmp108;
async fn read_any_sensor<S: TemperatureSensor>(sensor: &mut S) -> Result<DegreesCelsius, S::Error> {
sensor.temperature().await
}
let hal = Hal::new();
let i2c = hal.i2c();
let mut tmp = Tmp108::new_with_a0_gnd(i2c);
let temperature = read_any_sensor(&mut tmp).await.map_err(|_| anyhow!("read failed"))?;
println!("Temperature (via trait): {temperature:.2} C");
Ok(())
}
#[cfg(not(any(
all(not(feature = "async"), feature = "embedded-sensors-hal"),
all(feature = "async", feature = "embedded-sensors-hal-async"),
)))]
fn main() {
eprintln!(
"examples/sensor_trait.rs requires either --features embedded-sensors-hal \
or --features async,embedded-sensors-hal-async"
);
}