You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
16 lines
631 B
16 lines
631 B
7 months ago
|
use crate::{config::*, io::get_input_voltage, GenericResult};
|
||
|
|
||
|
pub fn get_temperature() -> GenericResult<f32> {
|
||
|
const THERMISTOR_NOMINAL_RESISTANCE: f32 = 10_000.;
|
||
|
const THERMISTOR_NOMINAL_TEMPERATURE: f32 = 298.15;
|
||
|
const THERMISTOR_CONSTANT: f32 = 3950.;
|
||
|
|
||
|
let voltage = get_input_voltage(THERMISTOR_ANALOG_PIN)?;
|
||
|
let resistance = (LOGIC_LEVEL / voltage - 1.) * THERMISTOR_VOLTAGE_DIVIDER_RESISTANCE;
|
||
|
let temperature = 1.
|
||
|
/ ((1. / THERMISTOR_NOMINAL_TEMPERATURE)
|
||
|
+ (1. / THERMISTOR_CONSTANT * f32::ln(resistance / THERMISTOR_NOMINAL_RESISTANCE)))
|
||
|
- 273.15;
|
||
|
Ok(temperature)
|
||
|
}
|