Quellcode durchsuchen

:sparkles: temperature sensore is now read every 5 seconds

Felix Bytow vor 2 Monaten
Ursprung
Commit
135db183b7
1 geänderte Dateien mit 18 neuen und 7 gelöschten Zeilen
  1. 18 7
      src/main.rs

+ 18 - 7
src/main.rs

@@ -9,11 +9,12 @@ use crate::button::Button;
 use crate::buzzer::Buzzer;
 use crate::temperature::TemperatureSensor;
 use embassy_executor::Spawner;
-use embassy_futures::select::{select3, Either3};
+use embassy_futures::select::{select4, Either4};
 use embassy_rp::bind_interrupts;
 use embassy_rp::gpio::Pull;
 use embassy_rp::i2c::{Config, I2c, InterruptHandler};
 use embassy_rp::peripherals::I2C1;
+use embassy_time::{Instant, Timer};
 use {defmt_rtt as _, panic_probe as _};
 
 struct SideButtons<'a> {
@@ -46,22 +47,32 @@ async fn main(_spawner: Spawner) -> ! {
     let mut temp_sensor = TemperatureSensor::new(i2c);
     let _ = temp_sensor.update_async().await;
     defmt::info!("Temperature: {}", temp_sensor.get_value());
+    let mut next_temp_update: u64 = 5;
 
     loop {
         defmt::info!("Set-Function: {}", side_buttons.set_function.get_level());
         defmt::info!("Up: {}", side_buttons.up.get_level());
         defmt::info!("Down: {}", side_buttons.down.get_level());
-        let which = select3(
+        let which = select4(
             side_buttons.set_function.wait_for_any_edge(),
             side_buttons.up.wait_for_any_edge(),
             side_buttons.down.wait_for_any_edge(),
+            Timer::at(Instant::from_secs(next_temp_update)),
         )
         .await;
 
-        if let Either3::First(_) = which
-            && side_buttons.set_function.is_low()
-        {
-            buzzer.toggle();
-        }
+        match which {
+            Either4::First(_) => {
+                if side_buttons.set_function.is_low() {
+                    buzzer.toggle();
+                }
+            }
+            Either4::Fourth(_) => {
+                let _ = temp_sensor.update_async().await;
+                defmt::info!("Temperature: {}", temp_sensor.get_value());
+                next_temp_update = next_temp_update.wrapping_add(5);
+            }
+            _ => {}
+        };
     }
 }