embedded-controls

Crates.ioembedded-controls
lib.rsembedded-controls
version0.1.5
sourcesrc
created_at2022-11-01 21:22:23.619313
updated_at2022-12-03 00:02:19.421485
descriptionBased on switch-hal library that allows to handle primitive controls(buttons, encoders and etc.)
homepage
repositoryhttps://github.com/kusstas/embedded-controls
max_upload_size
id703075
size41,558
Stanislav Kusovskyi (kusstas)

documentation

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

README

embedded-controls

Rust crates.io crates.io docs.rs

Embedded controls is a no_std embedded Rust library for working with controls like buttons, encoders and etc.

Usage

Add this to your Cargo.toml:

[dependencies]
embedded-controls = "0.1.5"

Usage in code:

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(),
        }
    }
}

Documentation

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

or build a local copy

cargo docs

and open target/doc/embedded_controls/index.html in your browser.

License

Licensed under either of

at your option.

Commit count: 15

cargo fmt