mirror of
https://github.com/FliegendeWurst/raspi-oled.git
synced 2024-11-22 10:24: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();
|
.unwrap();
|
||||||
while temps.len() < 5 && attempts < 10 {
|
while temps.len() < 5 && attempts < 10 {
|
||||||
if let Ok((rh, temp)) = raspi_oled::am2302_reading(&line) {
|
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 {
|
if rh > 0 && temp < 500 {
|
||||||
rhs.push(rh);
|
rhs.push(rh);
|
||||||
temps.push(temp);
|
temps.push(temp);
|
||||||
@ -43,10 +47,13 @@ fn main() {
|
|||||||
// median = hopefully no faulty readings
|
// median = hopefully no faulty readings
|
||||||
temps.sort();
|
temps.sort();
|
||||||
rhs.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
|
database
|
||||||
.execute(
|
.execute(
|
||||||
"INSERT INTO sensor_readings (time, humidity, celsius) VALUES (?1, ?2, ?3)",
|
"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();
|
.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 {
|
if events.len() < 81 {
|
||||||
|
println!("error: only got {} events", events.len());
|
||||||
return Err(SensorError::Timeout);
|
return Err(SensorError::Timeout);
|
||||||
}
|
}
|
||||||
Ok(events)
|
Ok(events)
|
||||||
@ -162,15 +163,14 @@ impl From<gpio_cdev::Error> for SensorError {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn am2302_reading(line: &Line) -> Result<(u16, u16), 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));
|
sleep(Duration::from_millis(500));
|
||||||
set_max_priority();
|
set_max_priority();
|
||||||
// set low for 20 ms
|
// set low for 20 ms
|
||||||
if let Err(e) = line.request(LineRequestFlags::OUTPUT, 0, "rust-am2302") {
|
out.set_value(0)?;
|
||||||
set_normal_priority();
|
|
||||||
return Err(SensorError::Io(e));
|
|
||||||
}
|
|
||||||
sleep(Duration::from_millis(3));
|
sleep(Duration::from_millis(3));
|
||||||
|
drop(out);
|
||||||
|
|
||||||
let events = read_events(&line, Duration::from_secs(1));
|
let events = read_events(&line, Duration::from_secs(1));
|
||||||
println!("{:?} {:?}", events, events.as_ref().map(|x| x.len()));
|
println!("{:?} {:?}", events, events.as_ref().map(|x| x.len()));
|
||||||
|
Loading…
Reference in New Issue
Block a user