#encoder #button #嵌入式HAL驱动程序 #去抖动 #嵌入式HAL

无需std embedded-controls

基于允许处理原始控件(按钮、编码器等)的 switch-hal 库

4个版本

0.1.5 2022年12月3日
0.1.4 2022年11月29日
0.1.3 2022年11月25日
0.1.2 2022年11月1日
0.1.1 2022年11月1日

#3#去抖动

每月 22 次下载

MIT/Apache

21KB
249

嵌入式控件

Rust crates.io crates.io docs.rs

嵌入式控件是一个用于处理按钮、编码器等控件的 no_std Rust嵌入式库。

用法

将此内容添加到您的 Cargo.toml

[dependencies]
embedded-controls = "0.1.5"

代码中的用法

use embedded_controls::{
    debounced_input_config,
    encoder_config,
    Control,
    DebouncedInput,
    DebouncedInputEvent,
    Encoder,
    EncoderEvent,
};
use timestamp_source::Timer;

debounced_input_config!(
    MyDebouncedInputConfig,
    debounce_timer: Timer<SomeTimestamp> = Timer::new(30.millis())
);

encoder_config!(
    MyEncoderConfig,
    debounce_timer: Timer<SomeTimestamp> = Timer::new(2.millis())
    counts_div: i8 = 4
);

type MyDebouncedInput<Switch> = DebouncedInput<Switch, MyDebouncedInputConfig>;
type MyEncoder<SwitchA, SwitchB> = Encoder<SwitchA, SwitchB, MyEncoderConfig>;

fn main() {
    let pin_debounced_input; // Some pin for debounced input
    let pin_encoder_a; // Some pin for channel A of encoder
    let pin_encoder_b; // Some pin for channel B of encoder

    let mut my_debounced_input = MyDebouncedInput::new(
        pin_debounced_input.into_active_low_switch()
    );

    let mut my_encoder = MyEncoder::new(
        pin_encoder_a.into_active_low_switch(),
        pin_encoder_b.into_active_low_switch(),
    );

    loop {
        match my_debounced_input.update().unwrap() {
            DebouncedInputEvent::Low => do_something_when_low(),
            DebouncedInputEvent::High => do_something_when_high(),
            DebouncedInputEvent::Rise => do_something_upon_rise(),
            DebouncedInputEvent::Fall => do_something_upon_fall(),
        }

        match encoder.update().unwrap() {
            EncoderEvent::NoTurn => do_something_when_no_turn(),
            EncoderEvent::ClockwiseTurn => do_something_upon_clockwise_turn(),
            EncoderEvent::CounterClockwiseTurn => do_something_upon_counter_clockwise_turn(),
        }
    }
}

文档

https://docs.rs/crate/embedded-controls

或构建本地副本

cargo docs

然后在浏览器中打开 target/doc/embedded_controls/index.html

许可证

许可以下任一

任选其一。

依赖项

~450KB