embedded_stepper/motors/
five_wire.rs1use embedded_hal::digital::OutputPin;
4use crate::driver::StepperMotor;
5
6pub struct StepperMotor5<P1: OutputPin, P2: OutputPin, P3: OutputPin, P4: OutputPin, P5: OutputPin>
8where
9 P1: OutputPin,
10 P2: OutputPin<Error = P1::Error>,
11 P3: OutputPin<Error = P1::Error>,
12 P4: OutputPin<Error = P1::Error>,
13 P5: OutputPin<Error = P1::Error>,
14{
15 pub p1: P1,
16 pub p2: P2,
17 pub p3: P3,
18 pub p4: P4,
19 pub p5: P5,
20}
21
22impl<P1, P2, P3, P4, P5> StepperMotor for StepperMotor5<P1, P2, P3, P4, P5>
23where
24 P1: OutputPin,
25 P2: OutputPin<Error = P1::Error>,
26 P3: OutputPin<Error = P1::Error>,
27 P4: OutputPin<Error = P1::Error>,
28 P5: OutputPin<Error = P1::Error>,
29{
30 type Error = ();
31
32 fn step(&mut self, this_step: u32) -> Result<(), Self::Error> {
34 match this_step % 10 {
35 0 => {
36 let _ = self.p1.set_low();
37 let _ = self.p2.set_high();
38 let _ = self.p3.set_high();
39 let _ = self.p4.set_low();
40 let _ = self.p5.set_high();
41 },
42 1 => {
43 let _ = self.p1.set_low();
44 let _ = self.p2.set_high();
45 let _ = self.p3.set_low();
46 let _ = self.p4.set_low();
47 let _ = self.p5.set_high();
48 },
49 2 => {
50 let _ = self.p1.set_low();
51 let _ = self.p2.set_high();
52 let _ = self.p3.set_low();
53 let _ = self.p4.set_high();
54 let _ = self.p5.set_high();
55 },
56 3 => {
57 let _ = self.p1.set_low();
58 let _ = self.p2.set_high();
59 let _ = self.p3.set_low();
60 let _ = self.p4.set_high();
61 let _ = self.p5.set_low();
62 },
63 4 => {
64 let _ = self.p1.set_high();
65 let _ = self.p2.set_high();
66 let _ = self.p3.set_low();
67 let _ = self.p4.set_high();
68 let _ = self.p5.set_low();
69 },
70 5 => {
71 let _ = self.p1.set_high();
72 let _ = self.p2.set_low();
73 let _ = self.p3.set_low();
74 let _ = self.p4.set_high();
75 let _ = self.p5.set_low();
76 },
77 6 => {
78 let _ = self.p1.set_high();
79 let _ = self.p2.set_low();
80 let _ = self.p3.set_high();
81 let _ = self.p4.set_high();
82 let _ = self.p5.set_low();
83 },
84 7 => {
85 let _ = self.p1.set_high();
86 let _ = self.p2.set_low();
87 let _ = self.p3.set_high();
88 let _ = self.p4.set_low();
89 let _ = self.p5.set_low();
90 },
91 8 => {
92 let _ = self.p1.set_high();
93 let _ = self.p2.set_low();
94 let _ = self.p3.set_high();
95 let _ = self.p4.set_low();
96 let _ = self.p5.set_high();
97 },
98 9 => {
99 let _ = self.p1.set_low();
100 let _ = self.p2.set_low();
101 let _ = self.p3.set_high();
102 let _ = self.p4.set_low();
103 let _ = self.p5.set_high();
104 },
105 _ => unreachable!(),
106 }
107 Ok(())
108 }
109
110 fn clear(&mut self) -> Result<(), Self::Error> {
112 let _ = self.p1.set_low();
113 let _ = self.p2.set_low();
114 let _ = self.p3.set_low();
115 let _ = self.p4.set_low();
116 let _ = self.p5.set_low();
117 Ok(())
118 }
119}