ionpak-thermostat/firmware/src/steinhart_hart.rs

29 lines
648 B
Rust

use libm::F32Ext;
/// Steinhart-Hart equation parameters
#[derive(Clone, Debug)]
pub struct Parameters {
pub a: f32,
pub b: f32,
pub c: f32,
/// Parallel resistance
///
/// Not truly part of the equation but required to calculate
/// resistance from voltage.
pub parallel_r: f32,
}
impl Parameters {
/// input: Voltage
///
/// Result unit: Kelvin
pub fn get_temperature(&self, input: f32) -> f32 {
let r = self.parallel_r * input;
let ln_r = r.ln();
let inv_temp = self.a +
self.b * ln_r +
self.c * ln_r * ln_r * ln_r;
1.0 / inv_temp
}
}