28 lines
784 B
Rust
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)
|
|
}
|
|
}
|