#encoder #rotary #embedded-hal #embedded-hal-driver #driver

no-std rotary-encoder-hal

使用 embedded_hal 的一个简单、平台无关的旋转编码器库

3 个版本 (破坏性)

0.5.0 2022年1月20日
0.3.0 2020年12月11日
0.2.1 2019年10月22日
0.2.0 2019年10月22日
0.1.0 2019年10月22日

#509 in 嵌入式开发


用于 sdvx-controller-firmware

MIT 许可证

10KB
112

rotary-encoder-hal

Crate API

一个简单、平台无关的旋转编码器库。

#![no_std]
#![no_main]

extern crate panic_semihosting;

use cortex_m_rt::entry;
use hal::{delay::Delay, prelude::*, stm32};
use stm32f3xx_hal as hal;

use rotary_encoder_hal::{Direction, Rotary};

#[entry]
fn main() -> ! {
    let cp = cortex_m::Peripherals::take().unwrap();
    let peripherals = stm32::Peripherals::take().unwrap();

    let mut flash = peripherals.FLASH.constrain();
    let mut rcc = peripherals.RCC.constrain();

    let clocks = rcc.cfgr.freeze(&mut flash.acr);

    let mut delay = Delay::new(cp.SYST, clocks);

    let mut gpiob = peripherals.GPIOB.split(&mut rcc.ahb);
    let pin_a = gpiob
        .pb10
        .into_pull_up_input(&mut gpiob.moder, &mut gpiob.pupdr);
    let pin_b = gpiob
        .pb11
        .into_pull_up_input(&mut gpiob.moder, &mut gpiob.pupdr);

    let mut enc = Rotary::new(pin_a, pin_b);
    let mut pos: isize = 0;

    loop {
        match enc.update().unwrap() {
            Direction::Clockwise => {
                pos += 1;
            }
            Direction::CounterClockwise => {
                pos -= 1;
            }
            Direction::None => {}
        }
    }
}

或者,您也可以从中断服务例程 (ISR) 中调用 update

依赖项

~105–500KB
~10K SLoC