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