1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#![deny(missing_docs)]
#![deny(warnings)]
#![no_std]
#[cfg(feature = "angular-velocity")]
pub mod angular_velocity;
#[cfg(feature = "standard")]
pub mod standard;
use embedded_hal::digital::v2::InputPin;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum Direction {
None,
Clockwise,
Anticlockwise,
}
pub struct RotaryEncoder<MODE, DT, CLK> {
pin_dt: DT,
pin_clk: CLK,
direction: Direction,
mode: MODE,
}
impl<DT, CLK, MODE> RotaryEncoder<MODE, DT, CLK>
where
DT: InputPin,
CLK: InputPin,
{
pub fn pins_mut(&mut self) -> (&mut DT, &mut CLK) {
(&mut self.pin_dt, &mut self.pin_clk)
}
pub fn release(self) -> (DT, CLK) {
(self.pin_dt, self.pin_clk)
}
pub fn direction(&self) -> Direction {
self.direction
}
}
pub struct InitalizeMode {}
impl<DT, CLK> RotaryEncoder<InitalizeMode, DT, CLK>
where
DT: InputPin,
CLK: InputPin,
{
pub fn new(pin_dt: DT, pin_clk: CLK) -> Self {
RotaryEncoder {
pin_dt,
pin_clk,
direction: Direction::None,
mode: InitalizeMode {},
}
}
}