读取具有此Rust功能的DS18B20温度传感器



对不起,我是一个完全的Rust新手。我尝试使用这个网站上提供的代码从树莓派上面提到的传感器读取温度:https://github.com/fuchsnj/ds18b20

实际上,我想调用函数

get_temperature

,但我不知道如何声明参数,特别是延迟和one_wire_bus。我能够解决所有的"名称空间"或名称绑定(对不起,来自c++),但被参数困住了。有人能给我一个例子,如何调用和使用这个函数,像这样:

use ds18b20::{Resolution, Ds18b20};
use embedded_hal::blocking::delay::{DelayUs, DelayMs};
use embedded_hal::digital::v2::{OutputPin, InputPin};
use one_wire_bus::{self, OneWire, OneWireResult};
use core::fmt::Debug;
use std::io::Write;
fn main() {

let mut delay = ?????;
let mut one_wire_bus = ?????;
let mut tx = ?????;  //&mut Vec::new();

let temp = get_temperature(delay, tx, one_wire_bus);
...
//do something whit the temp
...
}

这是从网站

实现的功能
fn get_temperature<P, E>(
delay: &mut (impl DelayUs<u16> + DelayMs<u16>),
tx: &mut impl Write,
one_wire_bus: &mut OneWire<P>,
) -> OneWireResult<(), E>
where
P: OutputPin<Error=E> + InputPin<Error=E>,
E: Debug
{
// initiate a temperature measurement for all connected devices
ds18b20::start_simultaneous_temp_measurement(one_wire_bus, delay)?;
// wait until the measurement is done. This depends on the resolution you specified
// If you don't know the resolution, you can obtain it from reading the sensor data,
// or just wait the longest time, which is the 12-bit resolution (750ms)
Resolution::Bits12.delay_for_measurement_time(delay);
// iterate over all the devices, and report their temperature
let mut search_state = None;
loop {
if let Some((device_address, state)) = one_wire_bus.device_search(search_state.as_ref(), false, delay)? {
search_state = Some(state);
if device_address.family_code() != ds18b20::FAMILY_CODE {
// skip other devices
continue;
}
// You will generally create the sensor once, and save it for later
let sensor = Ds18b20::new(device_address)?;
// contains the read temperature, as well as config info such as the resolution used
let sensor_data = sensor.read_data(one_wire_bus, delay)?;
writeln!(tx, "Device at {:?} is {}°C", device_address, sensor_data.temperature);
} else {
break;
}
}
Ok(())
}

这里有一个例子。https://github.com/awendland/rpi-ds18b20-rust

这是一个用Rust编写的玩具程序,用于从DS18B20传感器中检索温度数据,该传感器通过单线接口连接到树莓派上。

最新更新