mirror of
https://github.com/FliegendeWurst/raspi-oled.git
synced 2024-11-22 02:14:58 +00:00
Fix line requests in take_measurement
This commit is contained in:
parent
5cfe8fe3ec
commit
c17424a686
@ -31,6 +31,10 @@ fn main() {
|
||||
.unwrap();
|
||||
while temps.len() < 5 && attempts < 10 {
|
||||
if let Ok((rh, temp)) = raspi_oled::am2302_reading(&line) {
|
||||
// TODO: try out gpio_am2302_rs!
|
||||
//if let Ok(reading) = gpio_am2302_rs::try_read(26) {
|
||||
//let rh = reading.humidity as i64;
|
||||
//let temp = (reading.temperature * 10.0) as i64;
|
||||
if rh > 0 && temp < 500 {
|
||||
rhs.push(rh);
|
||||
temps.push(temp);
|
||||
@ -43,10 +47,13 @@ fn main() {
|
||||
// median = hopefully no faulty readings
|
||||
temps.sort();
|
||||
rhs.sort();
|
||||
let rh = rhs[rhs.len() / 2];
|
||||
let temp = temps[temps.len() / 2];
|
||||
println!("info: acquired {} readings (temps {:?}, rhs {:?}), using rh {} and temp {}", temps.len(), temps, rhs, rh, temp);
|
||||
database
|
||||
.execute(
|
||||
"INSERT INTO sensor_readings (time, humidity, celsius) VALUES (?1, ?2, ?3)",
|
||||
params![time.as_secs(), rhs[rhs.len() / 2], temps[temps.len() / 2]],
|
||||
params![time.as_secs(), rh, temp],
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
|
10
src/lib.rs
10
src/lib.rs
@ -76,6 +76,7 @@ fn read_events(line: &gpio_cdev::Line, timeout: std::time::Duration) -> Result<V
|
||||
}
|
||||
}
|
||||
if events.len() < 81 {
|
||||
println!("error: only got {} events", events.len());
|
||||
return Err(SensorError::Timeout);
|
||||
}
|
||||
Ok(events)
|
||||
@ -162,15 +163,14 @@ impl From<gpio_cdev::Error> for SensorError {
|
||||
}
|
||||
|
||||
pub fn am2302_reading(line: &Line) -> Result<(u16, u16), SensorError> {
|
||||
line.request(LineRequestFlags::OUTPUT, 1, "rust-am2302").unwrap();
|
||||
let out = line.request(LineRequestFlags::OUTPUT, 1, "rust-am2302").unwrap();
|
||||
out.set_value(1)?;
|
||||
sleep(Duration::from_millis(500));
|
||||
set_max_priority();
|
||||
// set low for 20 ms
|
||||
if let Err(e) = line.request(LineRequestFlags::OUTPUT, 0, "rust-am2302") {
|
||||
set_normal_priority();
|
||||
return Err(SensorError::Io(e));
|
||||
}
|
||||
out.set_value(0)?;
|
||||
sleep(Duration::from_millis(3));
|
||||
drop(out);
|
||||
|
||||
let events = read_events(&line, Duration::from_secs(1));
|
||||
println!("{:?} {:?}", events, events.as_ref().map(|x| x.len()));
|
||||
|
Loading…
Reference in New Issue
Block a user