pub struct ServoSystem {
pub channels: Vec<ServoChannel>,
}
Expand description
System of multiple servo channels
Fields§
§channels: Vec<ServoChannel>
Implementations§
Source§impl ServoSystem
impl ServoSystem
Sourcepub fn new() -> Self
pub fn new() -> Self
Examples found in repository?
More examples
examples/basic.rs (line 128)
3fn main() {
4 println!("\n");
5 println!("--- Servo Controller Basic Example ---");
6
7 // MG996R spec create
8 let spec = ServoSpec::mg996r();
9
10 // MG996R 6 channels robot arms example
11 let mut servo0 = ServoChannel::new(0, "base", spec.clone());
12 let mut servo1 = ServoChannel::new(1, "shoulder", spec.clone());
13 let mut servo2 = ServoChannel::new(2, "elbow", spec.clone());
14 let mut servo3 = ServoChannel::new(3, "wrist_pitch", spec.clone());
15 let mut servo4 = ServoChannel::new(4, "wrist_roll", spec.clone());
16 let mut servo5 = ServoChannel::new(5, "gripper", spec.clone());
17
18 // angle init
19 servo0.set_angle(90.0);
20 servo1.set_angle(90.0);
21 servo2.set_angle(90.0);
22 servo3.set_angle(90.0);
23 servo4.set_angle(90.0);
24 servo5.set_angle(90.0);
25
26 println!(
27 "{}: angle {:.1}° → pulse {}",
28 servo0.name,
29 servo0.angle,
30 servo0.get_pulse()
31 );
32 println!(
33 "{}: angle {:.1}° → pulse {}",
34 servo1.name,
35 servo1.angle,
36 servo1.get_pulse()
37 );
38 println!(
39 "{}: angle {:.1}° → pulse {}",
40 servo2.name,
41 servo2.angle,
42 servo2.get_pulse()
43 );
44 println!(
45 "{}: angle {:.1}° → pulse {}",
46 servo3.name,
47 servo3.angle,
48 servo3.get_pulse()
49 );
50 println!(
51 "{}: angle {:.1}° → pulse {}",
52 servo4.name,
53 servo4.angle,
54 servo4.get_pulse()
55 );
56 println!(
57 "{}: angle {:.1}° → pulse {}",
58 servo5.name,
59 servo5.angle,
60 servo5.get_pulse()
61 );
62
63 // pulse -> angle convert test
64 servo0.set_pulse(350);
65 println!(
66 "{}: pulse {} → angle {:.1}°",
67 servo0.name,
68 servo0.get_pulse(),
69 servo0.angle
70 );
71 servo1.set_pulse(400);
72 println!(
73 "{}: pulse {} → angle {:.1}°",
74 servo1.name,
75 servo1.get_pulse(),
76 servo1.angle
77 );
78 servo2.set_pulse(450);
79 println!(
80 "{}: pulse {} → angle {:.1}°",
81 servo2.name,
82 servo2.get_pulse(),
83 servo2.angle
84 );
85 servo3.set_pulse(500);
86 println!(
87 "{}: pulse {} → angle {:.1}°",
88 servo3.name,
89 servo3.get_pulse(),
90 servo3.angle
91 );
92 servo4.set_pulse(550);
93 println!(
94 "{}: pulse {} → angle {:.1}°",
95 servo4.name,
96 servo4.get_pulse(),
97 servo4.angle
98 );
99 servo5.set_pulse(600);
100 println!(
101 "{}: pulse {} → angle {:.1}°",
102 servo5.name,
103 servo5.get_pulse(),
104 servo5.angle
105 );
106
107 println!("\n");
108 // increment / decrement
109 servo0.increment(10.0);
110 println!("{} incremented → {:.1}°", servo1.name, servo1.angle);
111
112 servo1.decrement(30.0);
113 println!("{} decremented → {:.1}°", servo1.name, servo1.angle);
114
115 servo2.increment(20.0);
116 println!("{} incremented → {:.1}°", servo2.name, servo2.angle);
117
118 servo3.decrement(40.0);
119 println!("{} decremented → {:.1}°", servo2.name, servo2.angle);
120
121 servo4.increment(20.0);
122 println!("{} incremented → {:.1}°", servo4.name, servo4.angle);
123
124 servo5.decrement(15.0);
125 println!("{} decremented → {:.1}°", servo5.name, servo5.angle);
126
127 // ServoSystem Add channels
128 let mut system = ServoSystem::new();
129 system.add_channel(servo0);
130 system.add_channel(servo1);
131
132 println!("\n--- ServoSystem status ---");
133 for servo in &system.channels {
134 println!(
135 "Channel {} ({}): angle {:.1}° → pulse {}",
136 servo.id,
137 servo.name,
138 servo.angle,
139 servo.get_pulse()
140 );
141 }
142
143 // get_channel_mut 예제
144 if let Some(shoulder) = system.get_channel_mut(1) {
145 shoulder.set_angle(120.0);
146 println!(
147 "\nafter update {}: angle {:.1}° → pulse {}",
148 shoulder.name,
149 shoulder.angle,
150 shoulder.get_pulse()
151 );
152 }
153}
Sourcepub fn add_channel(&mut self, channel: ServoChannel)
pub fn add_channel(&mut self, channel: ServoChannel)
Examples found in repository?
More examples
examples/basic.rs (line 129)
3fn main() {
4 println!("\n");
5 println!("--- Servo Controller Basic Example ---");
6
7 // MG996R spec create
8 let spec = ServoSpec::mg996r();
9
10 // MG996R 6 channels robot arms example
11 let mut servo0 = ServoChannel::new(0, "base", spec.clone());
12 let mut servo1 = ServoChannel::new(1, "shoulder", spec.clone());
13 let mut servo2 = ServoChannel::new(2, "elbow", spec.clone());
14 let mut servo3 = ServoChannel::new(3, "wrist_pitch", spec.clone());
15 let mut servo4 = ServoChannel::new(4, "wrist_roll", spec.clone());
16 let mut servo5 = ServoChannel::new(5, "gripper", spec.clone());
17
18 // angle init
19 servo0.set_angle(90.0);
20 servo1.set_angle(90.0);
21 servo2.set_angle(90.0);
22 servo3.set_angle(90.0);
23 servo4.set_angle(90.0);
24 servo5.set_angle(90.0);
25
26 println!(
27 "{}: angle {:.1}° → pulse {}",
28 servo0.name,
29 servo0.angle,
30 servo0.get_pulse()
31 );
32 println!(
33 "{}: angle {:.1}° → pulse {}",
34 servo1.name,
35 servo1.angle,
36 servo1.get_pulse()
37 );
38 println!(
39 "{}: angle {:.1}° → pulse {}",
40 servo2.name,
41 servo2.angle,
42 servo2.get_pulse()
43 );
44 println!(
45 "{}: angle {:.1}° → pulse {}",
46 servo3.name,
47 servo3.angle,
48 servo3.get_pulse()
49 );
50 println!(
51 "{}: angle {:.1}° → pulse {}",
52 servo4.name,
53 servo4.angle,
54 servo4.get_pulse()
55 );
56 println!(
57 "{}: angle {:.1}° → pulse {}",
58 servo5.name,
59 servo5.angle,
60 servo5.get_pulse()
61 );
62
63 // pulse -> angle convert test
64 servo0.set_pulse(350);
65 println!(
66 "{}: pulse {} → angle {:.1}°",
67 servo0.name,
68 servo0.get_pulse(),
69 servo0.angle
70 );
71 servo1.set_pulse(400);
72 println!(
73 "{}: pulse {} → angle {:.1}°",
74 servo1.name,
75 servo1.get_pulse(),
76 servo1.angle
77 );
78 servo2.set_pulse(450);
79 println!(
80 "{}: pulse {} → angle {:.1}°",
81 servo2.name,
82 servo2.get_pulse(),
83 servo2.angle
84 );
85 servo3.set_pulse(500);
86 println!(
87 "{}: pulse {} → angle {:.1}°",
88 servo3.name,
89 servo3.get_pulse(),
90 servo3.angle
91 );
92 servo4.set_pulse(550);
93 println!(
94 "{}: pulse {} → angle {:.1}°",
95 servo4.name,
96 servo4.get_pulse(),
97 servo4.angle
98 );
99 servo5.set_pulse(600);
100 println!(
101 "{}: pulse {} → angle {:.1}°",
102 servo5.name,
103 servo5.get_pulse(),
104 servo5.angle
105 );
106
107 println!("\n");
108 // increment / decrement
109 servo0.increment(10.0);
110 println!("{} incremented → {:.1}°", servo1.name, servo1.angle);
111
112 servo1.decrement(30.0);
113 println!("{} decremented → {:.1}°", servo1.name, servo1.angle);
114
115 servo2.increment(20.0);
116 println!("{} incremented → {:.1}°", servo2.name, servo2.angle);
117
118 servo3.decrement(40.0);
119 println!("{} decremented → {:.1}°", servo2.name, servo2.angle);
120
121 servo4.increment(20.0);
122 println!("{} incremented → {:.1}°", servo4.name, servo4.angle);
123
124 servo5.decrement(15.0);
125 println!("{} decremented → {:.1}°", servo5.name, servo5.angle);
126
127 // ServoSystem Add channels
128 let mut system = ServoSystem::new();
129 system.add_channel(servo0);
130 system.add_channel(servo1);
131
132 println!("\n--- ServoSystem status ---");
133 for servo in &system.channels {
134 println!(
135 "Channel {} ({}): angle {:.1}° → pulse {}",
136 servo.id,
137 servo.name,
138 servo.angle,
139 servo.get_pulse()
140 );
141 }
142
143 // get_channel_mut 예제
144 if let Some(shoulder) = system.get_channel_mut(1) {
145 shoulder.set_angle(120.0);
146 println!(
147 "\nafter update {}: angle {:.1}° → pulse {}",
148 shoulder.name,
149 shoulder.angle,
150 shoulder.get_pulse()
151 );
152 }
153}
Sourcepub fn get_channel_mut(&mut self, id: usize) -> Option<&mut ServoChannel>
pub fn get_channel_mut(&mut self, id: usize) -> Option<&mut ServoChannel>
Examples found in repository?
examples/basic.rs (line 144)
3fn main() {
4 println!("\n");
5 println!("--- Servo Controller Basic Example ---");
6
7 // MG996R spec create
8 let spec = ServoSpec::mg996r();
9
10 // MG996R 6 channels robot arms example
11 let mut servo0 = ServoChannel::new(0, "base", spec.clone());
12 let mut servo1 = ServoChannel::new(1, "shoulder", spec.clone());
13 let mut servo2 = ServoChannel::new(2, "elbow", spec.clone());
14 let mut servo3 = ServoChannel::new(3, "wrist_pitch", spec.clone());
15 let mut servo4 = ServoChannel::new(4, "wrist_roll", spec.clone());
16 let mut servo5 = ServoChannel::new(5, "gripper", spec.clone());
17
18 // angle init
19 servo0.set_angle(90.0);
20 servo1.set_angle(90.0);
21 servo2.set_angle(90.0);
22 servo3.set_angle(90.0);
23 servo4.set_angle(90.0);
24 servo5.set_angle(90.0);
25
26 println!(
27 "{}: angle {:.1}° → pulse {}",
28 servo0.name,
29 servo0.angle,
30 servo0.get_pulse()
31 );
32 println!(
33 "{}: angle {:.1}° → pulse {}",
34 servo1.name,
35 servo1.angle,
36 servo1.get_pulse()
37 );
38 println!(
39 "{}: angle {:.1}° → pulse {}",
40 servo2.name,
41 servo2.angle,
42 servo2.get_pulse()
43 );
44 println!(
45 "{}: angle {:.1}° → pulse {}",
46 servo3.name,
47 servo3.angle,
48 servo3.get_pulse()
49 );
50 println!(
51 "{}: angle {:.1}° → pulse {}",
52 servo4.name,
53 servo4.angle,
54 servo4.get_pulse()
55 );
56 println!(
57 "{}: angle {:.1}° → pulse {}",
58 servo5.name,
59 servo5.angle,
60 servo5.get_pulse()
61 );
62
63 // pulse -> angle convert test
64 servo0.set_pulse(350);
65 println!(
66 "{}: pulse {} → angle {:.1}°",
67 servo0.name,
68 servo0.get_pulse(),
69 servo0.angle
70 );
71 servo1.set_pulse(400);
72 println!(
73 "{}: pulse {} → angle {:.1}°",
74 servo1.name,
75 servo1.get_pulse(),
76 servo1.angle
77 );
78 servo2.set_pulse(450);
79 println!(
80 "{}: pulse {} → angle {:.1}°",
81 servo2.name,
82 servo2.get_pulse(),
83 servo2.angle
84 );
85 servo3.set_pulse(500);
86 println!(
87 "{}: pulse {} → angle {:.1}°",
88 servo3.name,
89 servo3.get_pulse(),
90 servo3.angle
91 );
92 servo4.set_pulse(550);
93 println!(
94 "{}: pulse {} → angle {:.1}°",
95 servo4.name,
96 servo4.get_pulse(),
97 servo4.angle
98 );
99 servo5.set_pulse(600);
100 println!(
101 "{}: pulse {} → angle {:.1}°",
102 servo5.name,
103 servo5.get_pulse(),
104 servo5.angle
105 );
106
107 println!("\n");
108 // increment / decrement
109 servo0.increment(10.0);
110 println!("{} incremented → {:.1}°", servo1.name, servo1.angle);
111
112 servo1.decrement(30.0);
113 println!("{} decremented → {:.1}°", servo1.name, servo1.angle);
114
115 servo2.increment(20.0);
116 println!("{} incremented → {:.1}°", servo2.name, servo2.angle);
117
118 servo3.decrement(40.0);
119 println!("{} decremented → {:.1}°", servo2.name, servo2.angle);
120
121 servo4.increment(20.0);
122 println!("{} incremented → {:.1}°", servo4.name, servo4.angle);
123
124 servo5.decrement(15.0);
125 println!("{} decremented → {:.1}°", servo5.name, servo5.angle);
126
127 // ServoSystem Add channels
128 let mut system = ServoSystem::new();
129 system.add_channel(servo0);
130 system.add_channel(servo1);
131
132 println!("\n--- ServoSystem status ---");
133 for servo in &system.channels {
134 println!(
135 "Channel {} ({}): angle {:.1}° → pulse {}",
136 servo.id,
137 servo.name,
138 servo.angle,
139 servo.get_pulse()
140 );
141 }
142
143 // get_channel_mut 예제
144 if let Some(shoulder) = system.get_channel_mut(1) {
145 shoulder.set_angle(120.0);
146 println!(
147 "\nafter update {}: angle {:.1}° → pulse {}",
148 shoulder.name,
149 shoulder.angle,
150 shoulder.get_pulse()
151 );
152 }
153}
Trait Implementations§
Source§impl Clone for ServoSystem
impl Clone for ServoSystem
Source§fn clone(&self) -> ServoSystem
fn clone(&self) -> ServoSystem
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl Debug for ServoSystem
impl Debug for ServoSystem
Source§impl<'de> Deserialize<'de> for ServoSystem
impl<'de> Deserialize<'de> for ServoSystem
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Auto Trait Implementations§
impl Freeze for ServoSystem
impl RefUnwindSafe for ServoSystem
impl Send for ServoSystem
impl Sync for ServoSystem
impl Unpin for ServoSystem
impl UnwindSafe for ServoSystem
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more