embedded_stepper/motors/
two_wire.rs1use embedded_hal::digital::OutputPin;
4use crate::driver::StepperMotor;
5
6pub struct StepperMotor2<P1: OutputPin, P2: OutputPin<Error = P1::Error>> {
8 pub(crate) p1: P1,
9 pub(crate) p2: P2,
10}
11
12impl<P1, P2> StepperMotor for StepperMotor2<P1, P2>
13where
14 P1: OutputPin,
15 P2: OutputPin<Error = P1::Error>,
16{
17 type Error = ();
18
19 fn step(&mut self, this_step: u32) -> Result<(), Self::Error> {
21 match this_step % 4 {
22 0 => {
23 let _ = self.p1.set_low();
24 let _ = self.p2.set_high();
25 }
26 1 => {
27 let _ = self.p1.set_high();
28 let _ = self.p2.set_high();
29 }
30 2 => {
31 let _ = self.p1.set_high();
32 let _ = self.p2.set_low();
33 }
34 3 => {
35 let _ = self.p1.set_low();
36 let _ = self.p2.set_low();
37 }
38 _ => unreachable!(),
39 }
40 Ok(())
41 }
42
43 fn clear(&mut self) -> Result<(), Self::Error> {
45 let _ = self.p1.set_low();
46 let _ = self.p2.set_low();
47 Ok(())
48 }
49}