1use servo_libs_simulator::{ServoSystem, ServoChannel, ServoSpec};
2
3fn main() {
4 println!("\n");
5 println!("--- Servo Controller Basic Example ---");
6
7 let spec = ServoSpec::mg996r();
9
10 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 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 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 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 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 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}