Files
physical/src/transducer/part/lm35.rs
2024-02-23 10:23:18 -08:00

23 lines
682 B
Rust

use crate::transducer::InvalidValue;
use uom::si::electric_potential::volt;
use uom::si::quantities::{ElectricPotential, ThermodynamicTemperature};
use uom::si::thermodynamic_temperature::degree_celsius;
#[inline]
pub fn convert(
voltage: ElectricPotential<f32>,
) -> Result<ThermodynamicTemperature<f32>, InvalidValue> {
const MIN_VOLTS: f32 = -0.55;
const MAX_VOLTS: f32 = 1.50;
const SCALE_FACTOR: f32 = 100.0;
let volts = voltage.get::<volt>();
if volts >= MIN_VOLTS && volts <= MAX_VOLTS {
let celsius = volts * SCALE_FACTOR;
Ok(ThermodynamicTemperature::new::<degree_celsius>(celsius))
} else {
Err(InvalidValue)
}
}