6 个版本
0.2.1 | 2024年6月9日 |
---|---|
0.2.0 | 2024年5月26日 |
0.1.4 | 2024年3月28日 |
0.1.3 | 2023年11月26日 |
0.1.1 | 2023年6月4日 |
#251 在 嵌入式开发
每月464 次下载
26KB
548 代码行
按钮驱动程序
该库是嵌入式 Rust 项目的按钮驱动程序。它提供各种使用场景,支持 ESP、embedded_hal
、embassy
和 no_std
目标。
该库旨在尽可能灵活,以支持各种 HAL 和用例。
示例
更多示例请参考 示例文件夹。您可以使用 cargo run
命令轻松烧录它们!
针对带有 std 的 ESP32C3
所需特性:std
、esp
use std::time::Instant;
use button_driver::{Button, ButtonConfig};
use esp_idf_hal::{gpio::PinDriver, prelude::Peripherals};
use esp_idf_sys::EspError;
use log::info;
fn main() -> Result<(), EspError> {
esp_idf_svc::log::EspLogger::initialize_default();
let peripherals = Peripherals::take().unwrap();
let pin = PinDriver::input(peripherals.pins.gpio9)?;
let mut button = Button::<_, Instant>::new(pin, ButtonConfig::default());
loop {
button.tick();
if let Some(dur) = button.held_time() {
info!("Total holding time {:?}", dur);
if button.is_clicked() {
info!("Clicked + held");
} else if button.is_double_clicked() {
info!("Double clicked + held");
} else if button.holds() == 2 && button.clicks() > 0 {
info!("Held twice with {} clicks", button.clicks());
} else if button.holds() == 2 {
info!("Held twice");
}
} else {
if button.is_clicked() {
info!("Click");
} else if button.is_double_clicked() {
info!("Double click");
} else if button.is_triple_clicked() {
info!("Triple click");
} else if let Some(dur) = button.current_holding_time() {
info!("Held for {:?}", dur);
}
}
button.reset();
}
}
待办事项
算法
高级状态机图
依赖项
~0–6.5MB
~30K SLoC