1use embedded_hal::blocking::i2c::{Read, Write, WriteRead};
5
6const LM75_I2CADDR: u8 = 0x48;
7
8pub struct LM75<I> {
9 device: I,
10}
11
12impl<I: Write + WriteRead + Read> LM75<I> {
13 pub fn new(i2c: I) -> Self {
15 LM75 { device: i2c }
16 }
17
18 pub fn measure(&mut self) -> Result<f32, ()> {
19 let raw = self.read_u16(0x00);
20 Ok((raw >> 8) as f32 + (0.5 * ((raw >> 7) & 0b1) as f32))
21 }
22
23 pub fn release(self) -> I {
24 self.device
25 }
26
27 fn read_u16(&mut self, reg: u8) -> u16 {
28 let mut buf = [0u8; 2];
29 let _ = self.device.write_read(LM75_I2CADDR, &[reg], &mut buf[..]);
30 u16::from_be_bytes(buf)
31 }
32}