#![no_std]
#![no_main]
use async_button::{Button, ButtonConfig, ButtonEvent};
use embassy_executor::Spawner;
use esp_hal::gpio::{Input, InputConfig, Level, Output, OutputConfig, Pull};
#[panic_handler]
fn panic(_: &core::panic::PanicInfo) -> ! {
loop {}
}
#[embassy_executor::task]
async fn relay_task(mut relay_btn: Button<Input<'static>>, mut relay_pin: Output<'static>) {
loop {
match relay_btn.update().await {
ButtonEvent::ShortPress { count: _ } => {
esp_println::println!("Short Press");
relay_pin.toggle();
}
ButtonEvent::LongPress => {
esp_println::println!("Long press");
}
}
}
}
#[esp_hal_embassy::main]
async fn main(spawner: Spawner) {
let config = esp_hal::Config::default();
let peripherals = esp_hal::init(config);
let relay_button_pin = Input::new(
peripherals.GPIO6,
InputConfig::default().with_pull(Pull::Up),
);
let relay_btn = Button::new(relay_button_pin, ButtonConfig::default());
let relay_pin = Output::new(peripherals.GPIO4, Level::Low, OutputConfig::default());
spawner.spawn(relay_task(relay_btn, relay_pin)).unwrap();
}