indexed_incremental/
indexed_incremental.rs

1use quadrature_decoder::{FullStep, HalfStep, IndexedIncrementalDecoder, QuadStep, StepMode};
2
3fn decode<S, I>(decoder: &mut IndexedIncrementalDecoder<S>, pulse_trains: I)
4where
5    S: StepMode,
6    I: Iterator<Item = ((bool, bool), bool)>,
7{
8    println!("Decoder is at counter: {:?}.", decoder.counter());
9    println!();
10
11    for ((a, b), z) in pulse_trains {
12        println!("Reading pulses: (a: {a:?}, b: {b:?}, z: {z:?})");
13        match decoder.update(a, b, z) {
14            Ok(Some(change)) => println!("Change detected: {:?}.", change),
15            Ok(None) => println!("No change detected."),
16            Err(error) => println!("Error detected: {:?}.", error),
17        }
18        println!("Decoder is at counter: {:?}.", decoder.counter());
19        println!();
20    }
21}
22
23fn main() {
24    let a: Vec<bool> = vec![false, false, true, true, false, false, true, true];
25    let b: Vec<bool> = vec![true, false, false, true, true, false, false, true];
26    let z: Vec<bool> = vec![false, false, false, false, true, false, false, false];
27
28    println!("Full-step decoder:");
29    let mut full_step_decoder = IndexedIncrementalDecoder::<FullStep>::default();
30    decode(
31        &mut full_step_decoder,
32        a.iter()
33            .cloned()
34            .zip(b.iter().cloned())
35            .zip(z.iter().cloned()),
36    );
37    println!();
38
39    println!("Half-step decoder:");
40    let mut half_step_decoder = IndexedIncrementalDecoder::<HalfStep>::default();
41    decode(
42        &mut half_step_decoder,
43        a.iter()
44            .cloned()
45            .zip(b.iter().cloned())
46            .zip(z.iter().cloned()),
47    );
48    println!();
49
50    println!("Quad-step decoder:");
51    let mut quad_step_decoder = IndexedIncrementalDecoder::<QuadStep>::default();
52    decode(
53        &mut quad_step_decoder,
54        a.iter()
55            .cloned()
56            .zip(b.iter().cloned())
57            .zip(z.iter().cloned()),
58    );
59    println!();
60}