23 lines
682 B
Rust
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)
|
|
}
|
|
}
|