use embedded_hal::blocking::spi; use embedded_hal::digital::v2::OutputPin; use rtt_target::rprintln; pub fn read(spi: &mut SPI, nss_pin: &mut NSS) -> Result where SPI: spi::Transfer, 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) } }