main.rs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #![no_std]
  2. #![no_main]
  3. pub mod button;
  4. pub mod buzzer;
  5. use crate::button::Button;
  6. use crate::buzzer::Buzzer;
  7. use embassy_executor::Spawner;
  8. use embassy_futures::select::{select3, Either3};
  9. use embassy_rp::gpio::Pull;
  10. use {defmt_rtt as _, panic_probe as _};
  11. struct SideButtons<'a> {
  12. pub set_function: Button<'a>,
  13. pub up: Button<'a>,
  14. pub down: Button<'a>,
  15. }
  16. #[embassy_executor::main]
  17. async fn main(_spawner: Spawner) -> ! {
  18. let peripherals = embassy_rp::init(Default::default());
  19. let mut buzzer = Buzzer::new(peripherals.PIN_14);
  20. let mut side_buttons = SideButtons {
  21. set_function: Button::new(peripherals.PIN_2, Pull::Up),
  22. up: Button::new(peripherals.PIN_17, Pull::Up),
  23. down: Button::new(peripherals.PIN_15, Pull::Up),
  24. };
  25. loop {
  26. defmt::info!("Set-Function: {}", side_buttons.set_function.get_level());
  27. defmt::info!("Up: {}", side_buttons.up.get_level());
  28. defmt::info!("Down: {}", side_buttons.down.get_level());
  29. let which = select3(
  30. side_buttons.set_function.wait_for_any_edge(),
  31. side_buttons.up.wait_for_any_edge(),
  32. side_buttons.down.wait_for_any_edge(),
  33. )
  34. .await;
  35. if let Either3::First(_) = which
  36. && side_buttons.set_function.is_low()
  37. {
  38. buzzer.toggle();
  39. }
  40. }
  41. }