reflow-firmware3.0/src/max6675.rs

28 lines
784 B
Rust

use embedded_hal::blocking::spi;
use embedded_hal::digital::v2::OutputPin;
use rtt_target::rprintln;
pub fn read<SPI, NSS>(spi: &mut SPI, nss_pin: &mut NSS) -> Result<f32, &'static str>
where
SPI: spi::Transfer<u8>,
NSS: OutputPin,
{
let mut buffer = [0u8, 0u8];
nss_pin.set_low().map_err(|_| "Unable to set pin low")?;
let res = spi.transfer(&mut buffer);
nss_pin.set_high().map_err(|_| "Unable to set pin high")?;
let raw_result = match res {
Ok(value) => (value[0] as u16) << 8 | (value[1] as u16),
Err(_) => return Err("SPI transfer failed"),
};
if raw_result & (1 << 2) != 0 {
Err("MAX6675: Termocouple measures open")
} else {
let result = ((raw_result >> 3) as f32) * 0.25;
Ok(result)
}
}