embedded_stepper/motors/
four_wire.rs1use embedded_hal::digital::OutputPin;
4use crate::driver::StepperMotor;
5
6pub struct StepperMotor4<P1: OutputPin, P2: OutputPin, P3: OutputPin, P4: OutputPin>
8where
9 P1: OutputPin,
10 P2: OutputPin<Error = P1::Error>,
11 P3: OutputPin<Error = P1::Error>,
12 P4: OutputPin<Error = P1::Error>,
13{
14 pub p1: P1,
15 pub p2: P2,
16 pub p3: P3,
17 pub p4: P4,
18}
19
20impl<P1, P2, P3, P4> StepperMotor for StepperMotor4<P1, P2, P3, P4>
21where
22 P1: OutputPin,
23 P2: OutputPin<Error = P1::Error>,
24 P3: OutputPin<Error = P1::Error>,
25 P4: OutputPin<Error = P1::Error>,
26{
27 type Error = ();
28
29 fn step(&mut self, this_step: u32) -> Result<(), Self::Error> {
31 match this_step % 4 {
32 0 => {
33 let _ = self.p1.set_high();
34 let _ = self.p2.set_low();
35 let _ = self.p3.set_high();
36 let _ = self.p4.set_low();
37 }
38 1 => {
39 let _ = self.p1.set_low();
40 let _ = self.p2.set_high();
41 let _ = self.p3.set_high();
42 let _ = self.p4.set_low();
43 }
44 2 => {
45 let _ = self.p1.set_low();
46 let _ = self.p2.set_high();
47 let _ = self.p3.set_low();
48 let _ = self.p4.set_high();
49 }
50 3 => {
51 let _ = self.p1.set_high();
52 let _ = self.p2.set_low();
53 let _ = self.p3.set_low();
54 let _ = self.p4.set_high();
55 }
56 _ => unreachable!(),
57 }
58 Ok(())
59 }
60
61 fn clear(&mut self) -> Result<(), Self::Error> {
63 let _ = self.p1.set_low();
64 let _ = self.p2.set_low();
65 let _ = self.p3.set_low();
66 let _ = self.p4.set_low();
67 Ok(())
68 }
69}