#![no_std] #![no_main] pub mod button; pub mod buzzer; use crate::button::Button; use crate::buzzer::Buzzer; use embassy_executor::Spawner; use embassy_futures::select::{select3, Either3}; use embassy_rp::gpio::Pull; use {defmt_rtt as _, panic_probe as _}; struct SideButtons<'a> { pub set_function: Button<'a>, pub up: Button<'a>, pub down: Button<'a>, } #[embassy_executor::main] async fn main(_spawner: Spawner) -> ! { let peripherals = embassy_rp::init(Default::default()); let mut buzzer = Buzzer::new(peripherals.PIN_14); let mut side_buttons = SideButtons { set_function: Button::new(peripherals.PIN_2, Pull::Up), up: Button::new(peripherals.PIN_17, Pull::Up), down: Button::new(peripherals.PIN_15, Pull::Up), }; 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( side_buttons.set_function.wait_for_any_edge(), side_buttons.up.wait_for_any_edge(), side_buttons.down.wait_for_any_edge(), ) .await; if let Either3::First(_) = which && side_buttons.set_function.is_low() { buzzer.toggle(); } } }