pub struct ST3215 { /* private fields */ }Implementations§
Source§impl ST3215
impl ST3215
Sourcepub fn new(device: &str) -> Result<Self, String>
pub fn new(device: &str) -> Result<Self, String>
Créer une nouvelle instance ST3215
Examples found in repository?
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 // Créer une instance ST3215 connectée au port COM3
6 let servo = ST3215::new("COM3")?;
7
8 // Lister tous les servos disponibles
9 let ids = servo.list_servos();
10 println!("Servos trouvés: {:?}", ids);
11
12 // Pour chaque servo trouvé
13 for id in ids {
14 println!("\n=== Servo {} ===", id);
15
16 // Lire et afficher les informations du servo
17 if let Some(position) = servo.read_position(id) {
18 println!("Position actuelle: {}", position);
19 }
20
21 if let Some(voltage) = servo.read_voltage(id) {
22 println!("Tension: {:.1} V", voltage);
23 }
24
25 if let Some(temp) = servo.read_temperature(id) {
26 println!("Température: {} °C", temp);
27 }
28
29 if let Some(current) = servo.read_current(id) {
30 println!("Courant: {:.1} mA", current);
31 }
32
33 // Déplacer le servo vers la position
34 let deg: u16 = 65;
35 let pos: u16 = deg * (4096.0 / 360.0) as u16;
36
37 println!("Déplacement vers la position {}...", deg);
38
39 servo.move_to(id, pos, 2400, 50, true);
40
41 println!("Mouvement terminé!");
42 }
43
44 Ok(())
45}More examples
9fn main() -> Result<(), String> {
10 // Remplacer "/dev/ttyUSB0" par le port série approprié
11 let device = std::env::var("SERVO_PORT").unwrap_or_else(|_| "/dev/ttyUSB0".to_string());
12
13 println!("Connexion au port série: {}", device);
14 let controller = ST3215::new(&device)?;
15
16 // ID du servo à contrôler (modifier selon votre configuration)
17 let servo_id: u8 = 1;
18
19 // Vérifier que le servo est présent
20 println!("Vérification de la présence du servo {}...", servo_id);
21 if !controller.ping_servo(servo_id) {
22 return Err(format!("Servo {} non trouvé!", servo_id));
23 }
24 println!("✓ Servo {} trouvé", servo_id);
25
26 // Exemple 1: Activer le torque
27 println!("\n--- Activation du torque ---");
28 controller.enable_torque(servo_id)?;
29 println!("✓ Torque activé pour le servo {}", servo_id);
30
31 // Le servo maintient maintenant sa position
32 thread::sleep(Duration::from_secs(2));
33
34 // Lire la position actuelle
35 if let Some(position) = controller.read_position(servo_id) {
36 println!("Position actuelle: {}", position);
37 }
38
39 // Exemple 2: Désactiver le torque
40 println!("\n--- Désactivation du torque ---");
41 controller.disable_torque(servo_id)?;
42 println!("✓ Torque désactivé pour le servo {}", servo_id);
43 println!("Le servo peut maintenant être déplacé manuellement");
44
45 // Attendre quelques secondes
46 thread::sleep(Duration::from_secs(3));
47
48 // Exemple 3: Réactiver le torque et déplacer le servo
49 println!("\n--- Réactivation et déplacement ---");
50 controller.enable_torque(servo_id)?;
51 println!("✓ Torque réactivé");
52
53 // Déplacer vers la position 2048 (milieu de la course)
54 let target_position = 2048;
55 let speed = 1000;
56 let acceleration = 50;
57 println!("Déplacement vers la position {}...", target_position);
58 controller.move_to(servo_id, target_position, speed, acceleration, false);
59
60 // Attendre que le mouvement soit terminé
61 thread::sleep(Duration::from_secs(2));
62
63 // Vérifier la position finale
64 if let Some(final_position) = controller.read_position(servo_id) {
65 println!("Position finale: {}", final_position);
66 }
67
68 // Exemple 4: Cycle d'activation/désactivation
69 println!("\n--- Cycle d'activation/désactivation ---");
70 for i in 1..=3 {
71 println!("Cycle {}/3", i);
72
73 println!(" Désactivation...");
74 controller.disable_torque(servo_id)?;
75 thread::sleep(Duration::from_millis(500));
76
77 println!(" Activation...");
78 controller.enable_torque(servo_id)?;
79 thread::sleep(Duration::from_millis(500));
80 }
81
82 // Désactiver le torque à la fin
83 println!("\n--- Fin du programme ---");
84 controller.disable_torque(servo_id)?;
85 println!("✓ Torque désactivé");
86
87 Ok(())
88}Sourcepub fn ping_servo(&self, sts_id: u8) -> bool
pub fn ping_servo(&self, sts_id: u8) -> bool
Vérifier la présence d’un servo
Examples found in repository?
9fn main() -> Result<(), String> {
10 // Remplacer "/dev/ttyUSB0" par le port série approprié
11 let device = std::env::var("SERVO_PORT").unwrap_or_else(|_| "/dev/ttyUSB0".to_string());
12
13 println!("Connexion au port série: {}", device);
14 let controller = ST3215::new(&device)?;
15
16 // ID du servo à contrôler (modifier selon votre configuration)
17 let servo_id: u8 = 1;
18
19 // Vérifier que le servo est présent
20 println!("Vérification de la présence du servo {}...", servo_id);
21 if !controller.ping_servo(servo_id) {
22 return Err(format!("Servo {} non trouvé!", servo_id));
23 }
24 println!("✓ Servo {} trouvé", servo_id);
25
26 // Exemple 1: Activer le torque
27 println!("\n--- Activation du torque ---");
28 controller.enable_torque(servo_id)?;
29 println!("✓ Torque activé pour le servo {}", servo_id);
30
31 // Le servo maintient maintenant sa position
32 thread::sleep(Duration::from_secs(2));
33
34 // Lire la position actuelle
35 if let Some(position) = controller.read_position(servo_id) {
36 println!("Position actuelle: {}", position);
37 }
38
39 // Exemple 2: Désactiver le torque
40 println!("\n--- Désactivation du torque ---");
41 controller.disable_torque(servo_id)?;
42 println!("✓ Torque désactivé pour le servo {}", servo_id);
43 println!("Le servo peut maintenant être déplacé manuellement");
44
45 // Attendre quelques secondes
46 thread::sleep(Duration::from_secs(3));
47
48 // Exemple 3: Réactiver le torque et déplacer le servo
49 println!("\n--- Réactivation et déplacement ---");
50 controller.enable_torque(servo_id)?;
51 println!("✓ Torque réactivé");
52
53 // Déplacer vers la position 2048 (milieu de la course)
54 let target_position = 2048;
55 let speed = 1000;
56 let acceleration = 50;
57 println!("Déplacement vers la position {}...", target_position);
58 controller.move_to(servo_id, target_position, speed, acceleration, false);
59
60 // Attendre que le mouvement soit terminé
61 thread::sleep(Duration::from_secs(2));
62
63 // Vérifier la position finale
64 if let Some(final_position) = controller.read_position(servo_id) {
65 println!("Position finale: {}", final_position);
66 }
67
68 // Exemple 4: Cycle d'activation/désactivation
69 println!("\n--- Cycle d'activation/désactivation ---");
70 for i in 1..=3 {
71 println!("Cycle {}/3", i);
72
73 println!(" Désactivation...");
74 controller.disable_torque(servo_id)?;
75 thread::sleep(Duration::from_millis(500));
76
77 println!(" Activation...");
78 controller.enable_torque(servo_id)?;
79 thread::sleep(Duration::from_millis(500));
80 }
81
82 // Désactiver le torque à la fin
83 println!("\n--- Fin du programme ---");
84 controller.disable_torque(servo_id)?;
85 println!("✓ Torque désactivé");
86
87 Ok(())
88}Sourcepub fn list_servos(&self) -> Vec<u8> ⓘ
pub fn list_servos(&self) -> Vec<u8> ⓘ
Scanner le bus pour déterminer tous les servos présents
Examples found in repository?
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 // Créer une instance ST3215 connectée au port COM3
6 let servo = ST3215::new("COM3")?;
7
8 // Lister tous les servos disponibles
9 let ids = servo.list_servos();
10 println!("Servos trouvés: {:?}", ids);
11
12 // Pour chaque servo trouvé
13 for id in ids {
14 println!("\n=== Servo {} ===", id);
15
16 // Lire et afficher les informations du servo
17 if let Some(position) = servo.read_position(id) {
18 println!("Position actuelle: {}", position);
19 }
20
21 if let Some(voltage) = servo.read_voltage(id) {
22 println!("Tension: {:.1} V", voltage);
23 }
24
25 if let Some(temp) = servo.read_temperature(id) {
26 println!("Température: {} °C", temp);
27 }
28
29 if let Some(current) = servo.read_current(id) {
30 println!("Courant: {:.1} mA", current);
31 }
32
33 // Déplacer le servo vers la position
34 let deg: u16 = 65;
35 let pos: u16 = deg * (4096.0 / 360.0) as u16;
36
37 println!("Déplacement vers la position {}...", deg);
38
39 servo.move_to(id, pos, 2400, 50, true);
40
41 println!("Mouvement terminé!");
42 }
43
44 Ok(())
45}Sourcepub fn read_voltage(&self, sts_id: u8) -> Option<f32>
pub fn read_voltage(&self, sts_id: u8) -> Option<f32>
Lire la tension actuelle du servo (en V)
Examples found in repository?
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 // Créer une instance ST3215 connectée au port COM3
6 let servo = ST3215::new("COM3")?;
7
8 // Lister tous les servos disponibles
9 let ids = servo.list_servos();
10 println!("Servos trouvés: {:?}", ids);
11
12 // Pour chaque servo trouvé
13 for id in ids {
14 println!("\n=== Servo {} ===", id);
15
16 // Lire et afficher les informations du servo
17 if let Some(position) = servo.read_position(id) {
18 println!("Position actuelle: {}", position);
19 }
20
21 if let Some(voltage) = servo.read_voltage(id) {
22 println!("Tension: {:.1} V", voltage);
23 }
24
25 if let Some(temp) = servo.read_temperature(id) {
26 println!("Température: {} °C", temp);
27 }
28
29 if let Some(current) = servo.read_current(id) {
30 println!("Courant: {:.1} mA", current);
31 }
32
33 // Déplacer le servo vers la position
34 let deg: u16 = 65;
35 let pos: u16 = deg * (4096.0 / 360.0) as u16;
36
37 println!("Déplacement vers la position {}...", deg);
38
39 servo.move_to(id, pos, 2400, 50, true);
40
41 println!("Mouvement terminé!");
42 }
43
44 Ok(())
45}Sourcepub fn read_current(&self, sts_id: u8) -> Option<f32>
pub fn read_current(&self, sts_id: u8) -> Option<f32>
Lire le courant actuel du servo (en mA)
Examples found in repository?
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 // Créer une instance ST3215 connectée au port COM3
6 let servo = ST3215::new("COM3")?;
7
8 // Lister tous les servos disponibles
9 let ids = servo.list_servos();
10 println!("Servos trouvés: {:?}", ids);
11
12 // Pour chaque servo trouvé
13 for id in ids {
14 println!("\n=== Servo {} ===", id);
15
16 // Lire et afficher les informations du servo
17 if let Some(position) = servo.read_position(id) {
18 println!("Position actuelle: {}", position);
19 }
20
21 if let Some(voltage) = servo.read_voltage(id) {
22 println!("Tension: {:.1} V", voltage);
23 }
24
25 if let Some(temp) = servo.read_temperature(id) {
26 println!("Température: {} °C", temp);
27 }
28
29 if let Some(current) = servo.read_current(id) {
30 println!("Courant: {:.1} mA", current);
31 }
32
33 // Déplacer le servo vers la position
34 let deg: u16 = 65;
35 let pos: u16 = deg * (4096.0 / 360.0) as u16;
36
37 println!("Déplacement vers la position {}...", deg);
38
39 servo.move_to(id, pos, 2400, 50, true);
40
41 println!("Mouvement terminé!");
42 }
43
44 Ok(())
45}Sourcepub fn read_temperature(&self, sts_id: u8) -> Option<u8>
pub fn read_temperature(&self, sts_id: u8) -> Option<u8>
Lire la température actuelle du servo (en °C)
Examples found in repository?
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 // Créer une instance ST3215 connectée au port COM3
6 let servo = ST3215::new("COM3")?;
7
8 // Lister tous les servos disponibles
9 let ids = servo.list_servos();
10 println!("Servos trouvés: {:?}", ids);
11
12 // Pour chaque servo trouvé
13 for id in ids {
14 println!("\n=== Servo {} ===", id);
15
16 // Lire et afficher les informations du servo
17 if let Some(position) = servo.read_position(id) {
18 println!("Position actuelle: {}", position);
19 }
20
21 if let Some(voltage) = servo.read_voltage(id) {
22 println!("Tension: {:.1} V", voltage);
23 }
24
25 if let Some(temp) = servo.read_temperature(id) {
26 println!("Température: {} °C", temp);
27 }
28
29 if let Some(current) = servo.read_current(id) {
30 println!("Courant: {:.1} mA", current);
31 }
32
33 // Déplacer le servo vers la position
34 let deg: u16 = 65;
35 let pos: u16 = deg * (4096.0 / 360.0) as u16;
36
37 println!("Déplacement vers la position {}...", deg);
38
39 servo.move_to(id, pos, 2400, 50, true);
40
41 println!("Mouvement terminé!");
42 }
43
44 Ok(())
45}Sourcepub fn read_acceleration(&self, sts_id: u8) -> Option<u8>
pub fn read_acceleration(&self, sts_id: u8) -> Option<u8>
Lire la valeur d’accélération actuelle du servo
Sourcepub fn read_mode(&self, sts_id: u8) -> Option<u8>
pub fn read_mode(&self, sts_id: u8) -> Option<u8>
Lire le mode actuel du servo
- 0: Mode position
- 1: Mode vitesse constante
- 2: Mode PWM
- 3: Mode servo pas à pas
Sourcepub fn read_correction(&self, sts_id: u8) -> Option<i16>
pub fn read_correction(&self, sts_id: u8) -> Option<i16>
Lire la correction de position actuelle du servo
Sourcepub fn set_acceleration(&self, sts_id: u8, acc: u8) -> Option<bool>
pub fn set_acceleration(&self, sts_id: u8, acc: u8) -> Option<bool>
Configurer la valeur d’accélération pour le servo acc: Valeur d’accélération (0-254). Unité: 100 step/s²
Sourcepub fn set_speed(&self, sts_id: u8, speed: u16) -> Option<bool>
pub fn set_speed(&self, sts_id: u8, speed: u16) -> Option<bool>
Configurer la valeur de vitesse pour le servo speed: Valeur de vitesse (0-3400). Unité: Step/s
Sourcepub fn disable_torque(&self, sts_id: u8) -> Result<(), String>
pub fn disable_torque(&self, sts_id: u8) -> Result<(), String>
Désactiver le torque du servo (Mettre le couple à 0)
Examples found in repository?
9fn main() -> Result<(), String> {
10 // Remplacer "/dev/ttyUSB0" par le port série approprié
11 let device = std::env::var("SERVO_PORT").unwrap_or_else(|_| "/dev/ttyUSB0".to_string());
12
13 println!("Connexion au port série: {}", device);
14 let controller = ST3215::new(&device)?;
15
16 // ID du servo à contrôler (modifier selon votre configuration)
17 let servo_id: u8 = 1;
18
19 // Vérifier que le servo est présent
20 println!("Vérification de la présence du servo {}...", servo_id);
21 if !controller.ping_servo(servo_id) {
22 return Err(format!("Servo {} non trouvé!", servo_id));
23 }
24 println!("✓ Servo {} trouvé", servo_id);
25
26 // Exemple 1: Activer le torque
27 println!("\n--- Activation du torque ---");
28 controller.enable_torque(servo_id)?;
29 println!("✓ Torque activé pour le servo {}", servo_id);
30
31 // Le servo maintient maintenant sa position
32 thread::sleep(Duration::from_secs(2));
33
34 // Lire la position actuelle
35 if let Some(position) = controller.read_position(servo_id) {
36 println!("Position actuelle: {}", position);
37 }
38
39 // Exemple 2: Désactiver le torque
40 println!("\n--- Désactivation du torque ---");
41 controller.disable_torque(servo_id)?;
42 println!("✓ Torque désactivé pour le servo {}", servo_id);
43 println!("Le servo peut maintenant être déplacé manuellement");
44
45 // Attendre quelques secondes
46 thread::sleep(Duration::from_secs(3));
47
48 // Exemple 3: Réactiver le torque et déplacer le servo
49 println!("\n--- Réactivation et déplacement ---");
50 controller.enable_torque(servo_id)?;
51 println!("✓ Torque réactivé");
52
53 // Déplacer vers la position 2048 (milieu de la course)
54 let target_position = 2048;
55 let speed = 1000;
56 let acceleration = 50;
57 println!("Déplacement vers la position {}...", target_position);
58 controller.move_to(servo_id, target_position, speed, acceleration, false);
59
60 // Attendre que le mouvement soit terminé
61 thread::sleep(Duration::from_secs(2));
62
63 // Vérifier la position finale
64 if let Some(final_position) = controller.read_position(servo_id) {
65 println!("Position finale: {}", final_position);
66 }
67
68 // Exemple 4: Cycle d'activation/désactivation
69 println!("\n--- Cycle d'activation/désactivation ---");
70 for i in 1..=3 {
71 println!("Cycle {}/3", i);
72
73 println!(" Désactivation...");
74 controller.disable_torque(servo_id)?;
75 thread::sleep(Duration::from_millis(500));
76
77 println!(" Activation...");
78 controller.enable_torque(servo_id)?;
79 thread::sleep(Duration::from_millis(500));
80 }
81
82 // Désactiver le torque à la fin
83 println!("\n--- Fin du programme ---");
84 controller.disable_torque(servo_id)?;
85 println!("✓ Torque désactivé");
86
87 Ok(())
88}Sourcepub fn enable_torque(&self, sts_id: u8) -> Result<(), String>
pub fn enable_torque(&self, sts_id: u8) -> Result<(), String>
Activer le torque du servo (Mettre le couple à 1)
Examples found in repository?
9fn main() -> Result<(), String> {
10 // Remplacer "/dev/ttyUSB0" par le port série approprié
11 let device = std::env::var("SERVO_PORT").unwrap_or_else(|_| "/dev/ttyUSB0".to_string());
12
13 println!("Connexion au port série: {}", device);
14 let controller = ST3215::new(&device)?;
15
16 // ID du servo à contrôler (modifier selon votre configuration)
17 let servo_id: u8 = 1;
18
19 // Vérifier que le servo est présent
20 println!("Vérification de la présence du servo {}...", servo_id);
21 if !controller.ping_servo(servo_id) {
22 return Err(format!("Servo {} non trouvé!", servo_id));
23 }
24 println!("✓ Servo {} trouvé", servo_id);
25
26 // Exemple 1: Activer le torque
27 println!("\n--- Activation du torque ---");
28 controller.enable_torque(servo_id)?;
29 println!("✓ Torque activé pour le servo {}", servo_id);
30
31 // Le servo maintient maintenant sa position
32 thread::sleep(Duration::from_secs(2));
33
34 // Lire la position actuelle
35 if let Some(position) = controller.read_position(servo_id) {
36 println!("Position actuelle: {}", position);
37 }
38
39 // Exemple 2: Désactiver le torque
40 println!("\n--- Désactivation du torque ---");
41 controller.disable_torque(servo_id)?;
42 println!("✓ Torque désactivé pour le servo {}", servo_id);
43 println!("Le servo peut maintenant être déplacé manuellement");
44
45 // Attendre quelques secondes
46 thread::sleep(Duration::from_secs(3));
47
48 // Exemple 3: Réactiver le torque et déplacer le servo
49 println!("\n--- Réactivation et déplacement ---");
50 controller.enable_torque(servo_id)?;
51 println!("✓ Torque réactivé");
52
53 // Déplacer vers la position 2048 (milieu de la course)
54 let target_position = 2048;
55 let speed = 1000;
56 let acceleration = 50;
57 println!("Déplacement vers la position {}...", target_position);
58 controller.move_to(servo_id, target_position, speed, acceleration, false);
59
60 // Attendre que le mouvement soit terminé
61 thread::sleep(Duration::from_secs(2));
62
63 // Vérifier la position finale
64 if let Some(final_position) = controller.read_position(servo_id) {
65 println!("Position finale: {}", final_position);
66 }
67
68 // Exemple 4: Cycle d'activation/désactivation
69 println!("\n--- Cycle d'activation/désactivation ---");
70 for i in 1..=3 {
71 println!("Cycle {}/3", i);
72
73 println!(" Désactivation...");
74 controller.disable_torque(servo_id)?;
75 thread::sleep(Duration::from_millis(500));
76
77 println!(" Activation...");
78 controller.enable_torque(servo_id)?;
79 thread::sleep(Duration::from_millis(500));
80 }
81
82 // Désactiver le torque à la fin
83 println!("\n--- Fin du programme ---");
84 controller.disable_torque(servo_id)?;
85 println!("✓ Torque désactivé");
86
87 Ok(())
88}Sourcepub fn stop_servo(&self, sts_id: u8) -> Option<bool>
👎Deprecated since 0.1.0: Utilisez disable_torque à la place
pub fn stop_servo(&self, sts_id: u8) -> Option<bool>
Arrêter le servo (Mettre le couple à 0)
Deprecated: Utilisez disable_torque à la place
Sourcepub fn start_servo(&self, sts_id: u8) -> Result<(), String>
👎Deprecated since 0.1.0: Utilisez enable_torque à la place
pub fn start_servo(&self, sts_id: u8) -> Result<(), String>
Démarrer le servo (Mettre le couple à 1)
Deprecated: Utilisez enable_torque à la place
Sourcepub fn set_mode(&self, sts_id: u8, mode: u8) -> Result<(), String>
pub fn set_mode(&self, sts_id: u8, mode: u8) -> Result<(), String>
Configurer le mode opérationnel du servo mode: ID du mode (0, 1, 2 ou 3)
Sourcepub fn correct_position(
&self,
sts_id: u8,
correction: i16,
) -> Result<(), String>
pub fn correct_position( &self, sts_id: u8, correction: i16, ) -> Result<(), String>
Ajouter une correction de position correction: correction (en steps, peut être négatif)
Sourcepub fn rotate(&self, sts_id: u8, speed: i16) -> Result<(), String>
pub fn rotate(&self, sts_id: u8, speed: i16) -> Result<(), String>
Commencer la rotation speed: vitesse du servo (peut être négatif, si oui rotation dans le sens inverse)
Sourcepub fn define_middle(&self, sts_id: u8) -> Option<bool>
pub fn define_middle(&self, sts_id: u8) -> Option<bool>
Définir la position 2048 (Mettre le couple à 128)
Sourcepub fn tare_servo(&self, sts_id: u8) -> (Option<u16>, Option<u16>)
pub fn tare_servo(&self, sts_id: u8) -> (Option<u16>, Option<u16>)
Étalonner un servo: Trouver ses positions min et max, puis configurer la nouvelle position 0 ATTENTION: Ne doit être utilisé que pour un servo ayant au moins une position bloquante
Sourcepub fn move_to(
&self,
sts_id: u8,
position: u16,
speed: u16,
acc: u8,
wait: bool,
) -> Option<bool>
pub fn move_to( &self, sts_id: u8, position: u16, speed: u16, acc: u8, wait: bool, ) -> Option<bool>
Déplacer le servo vers une position prédéfinie position: Nouvelle position du servo speed: Vitesse de déplacement en step/s (facultatif, 2400 par défaut) acc: Vitesse d’accélération en step/s² (facultatif, 50 par défaut) wait: Attendre que la position soit atteinte avant le retour de la fonction
Examples found in repository?
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 // Créer une instance ST3215 connectée au port COM3
6 let servo = ST3215::new("COM3")?;
7
8 // Lister tous les servos disponibles
9 let ids = servo.list_servos();
10 println!("Servos trouvés: {:?}", ids);
11
12 // Pour chaque servo trouvé
13 for id in ids {
14 println!("\n=== Servo {} ===", id);
15
16 // Lire et afficher les informations du servo
17 if let Some(position) = servo.read_position(id) {
18 println!("Position actuelle: {}", position);
19 }
20
21 if let Some(voltage) = servo.read_voltage(id) {
22 println!("Tension: {:.1} V", voltage);
23 }
24
25 if let Some(temp) = servo.read_temperature(id) {
26 println!("Température: {} °C", temp);
27 }
28
29 if let Some(current) = servo.read_current(id) {
30 println!("Courant: {:.1} mA", current);
31 }
32
33 // Déplacer le servo vers la position
34 let deg: u16 = 65;
35 let pos: u16 = deg * (4096.0 / 360.0) as u16;
36
37 println!("Déplacement vers la position {}...", deg);
38
39 servo.move_to(id, pos, 2400, 50, true);
40
41 println!("Mouvement terminé!");
42 }
43
44 Ok(())
45}More examples
9fn main() -> Result<(), String> {
10 // Remplacer "/dev/ttyUSB0" par le port série approprié
11 let device = std::env::var("SERVO_PORT").unwrap_or_else(|_| "/dev/ttyUSB0".to_string());
12
13 println!("Connexion au port série: {}", device);
14 let controller = ST3215::new(&device)?;
15
16 // ID du servo à contrôler (modifier selon votre configuration)
17 let servo_id: u8 = 1;
18
19 // Vérifier que le servo est présent
20 println!("Vérification de la présence du servo {}...", servo_id);
21 if !controller.ping_servo(servo_id) {
22 return Err(format!("Servo {} non trouvé!", servo_id));
23 }
24 println!("✓ Servo {} trouvé", servo_id);
25
26 // Exemple 1: Activer le torque
27 println!("\n--- Activation du torque ---");
28 controller.enable_torque(servo_id)?;
29 println!("✓ Torque activé pour le servo {}", servo_id);
30
31 // Le servo maintient maintenant sa position
32 thread::sleep(Duration::from_secs(2));
33
34 // Lire la position actuelle
35 if let Some(position) = controller.read_position(servo_id) {
36 println!("Position actuelle: {}", position);
37 }
38
39 // Exemple 2: Désactiver le torque
40 println!("\n--- Désactivation du torque ---");
41 controller.disable_torque(servo_id)?;
42 println!("✓ Torque désactivé pour le servo {}", servo_id);
43 println!("Le servo peut maintenant être déplacé manuellement");
44
45 // Attendre quelques secondes
46 thread::sleep(Duration::from_secs(3));
47
48 // Exemple 3: Réactiver le torque et déplacer le servo
49 println!("\n--- Réactivation et déplacement ---");
50 controller.enable_torque(servo_id)?;
51 println!("✓ Torque réactivé");
52
53 // Déplacer vers la position 2048 (milieu de la course)
54 let target_position = 2048;
55 let speed = 1000;
56 let acceleration = 50;
57 println!("Déplacement vers la position {}...", target_position);
58 controller.move_to(servo_id, target_position, speed, acceleration, false);
59
60 // Attendre que le mouvement soit terminé
61 thread::sleep(Duration::from_secs(2));
62
63 // Vérifier la position finale
64 if let Some(final_position) = controller.read_position(servo_id) {
65 println!("Position finale: {}", final_position);
66 }
67
68 // Exemple 4: Cycle d'activation/désactivation
69 println!("\n--- Cycle d'activation/désactivation ---");
70 for i in 1..=3 {
71 println!("Cycle {}/3", i);
72
73 println!(" Désactivation...");
74 controller.disable_torque(servo_id)?;
75 thread::sleep(Duration::from_millis(500));
76
77 println!(" Activation...");
78 controller.enable_torque(servo_id)?;
79 thread::sleep(Duration::from_millis(500));
80 }
81
82 // Désactiver le torque à la fin
83 println!("\n--- Fin du programme ---");
84 controller.disable_torque(servo_id)?;
85 println!("✓ Torque désactivé");
86
87 Ok(())
88}Sourcepub fn read_status(&self, sts_id: u8) -> Option<HashMap<String, bool>>
pub fn read_status(&self, sts_id: u8) -> Option<HashMap<String, bool>>
Obtenir le statut des capteurs
Sourcepub fn read_position(&self, sts_id: u8) -> Option<u16>
pub fn read_position(&self, sts_id: u8) -> Option<u16>
Obtenir la position actuelle
Examples found in repository?
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 // Créer une instance ST3215 connectée au port COM3
6 let servo = ST3215::new("COM3")?;
7
8 // Lister tous les servos disponibles
9 let ids = servo.list_servos();
10 println!("Servos trouvés: {:?}", ids);
11
12 // Pour chaque servo trouvé
13 for id in ids {
14 println!("\n=== Servo {} ===", id);
15
16 // Lire et afficher les informations du servo
17 if let Some(position) = servo.read_position(id) {
18 println!("Position actuelle: {}", position);
19 }
20
21 if let Some(voltage) = servo.read_voltage(id) {
22 println!("Tension: {:.1} V", voltage);
23 }
24
25 if let Some(temp) = servo.read_temperature(id) {
26 println!("Température: {} °C", temp);
27 }
28
29 if let Some(current) = servo.read_current(id) {
30 println!("Courant: {:.1} mA", current);
31 }
32
33 // Déplacer le servo vers la position
34 let deg: u16 = 65;
35 let pos: u16 = deg * (4096.0 / 360.0) as u16;
36
37 println!("Déplacement vers la position {}...", deg);
38
39 servo.move_to(id, pos, 2400, 50, true);
40
41 println!("Mouvement terminé!");
42 }
43
44 Ok(())
45}More examples
9fn main() -> Result<(), String> {
10 // Remplacer "/dev/ttyUSB0" par le port série approprié
11 let device = std::env::var("SERVO_PORT").unwrap_or_else(|_| "/dev/ttyUSB0".to_string());
12
13 println!("Connexion au port série: {}", device);
14 let controller = ST3215::new(&device)?;
15
16 // ID du servo à contrôler (modifier selon votre configuration)
17 let servo_id: u8 = 1;
18
19 // Vérifier que le servo est présent
20 println!("Vérification de la présence du servo {}...", servo_id);
21 if !controller.ping_servo(servo_id) {
22 return Err(format!("Servo {} non trouvé!", servo_id));
23 }
24 println!("✓ Servo {} trouvé", servo_id);
25
26 // Exemple 1: Activer le torque
27 println!("\n--- Activation du torque ---");
28 controller.enable_torque(servo_id)?;
29 println!("✓ Torque activé pour le servo {}", servo_id);
30
31 // Le servo maintient maintenant sa position
32 thread::sleep(Duration::from_secs(2));
33
34 // Lire la position actuelle
35 if let Some(position) = controller.read_position(servo_id) {
36 println!("Position actuelle: {}", position);
37 }
38
39 // Exemple 2: Désactiver le torque
40 println!("\n--- Désactivation du torque ---");
41 controller.disable_torque(servo_id)?;
42 println!("✓ Torque désactivé pour le servo {}", servo_id);
43 println!("Le servo peut maintenant être déplacé manuellement");
44
45 // Attendre quelques secondes
46 thread::sleep(Duration::from_secs(3));
47
48 // Exemple 3: Réactiver le torque et déplacer le servo
49 println!("\n--- Réactivation et déplacement ---");
50 controller.enable_torque(servo_id)?;
51 println!("✓ Torque réactivé");
52
53 // Déplacer vers la position 2048 (milieu de la course)
54 let target_position = 2048;
55 let speed = 1000;
56 let acceleration = 50;
57 println!("Déplacement vers la position {}...", target_position);
58 controller.move_to(servo_id, target_position, speed, acceleration, false);
59
60 // Attendre que le mouvement soit terminé
61 thread::sleep(Duration::from_secs(2));
62
63 // Vérifier la position finale
64 if let Some(final_position) = controller.read_position(servo_id) {
65 println!("Position finale: {}", final_position);
66 }
67
68 // Exemple 4: Cycle d'activation/désactivation
69 println!("\n--- Cycle d'activation/désactivation ---");
70 for i in 1..=3 {
71 println!("Cycle {}/3", i);
72
73 println!(" Désactivation...");
74 controller.disable_torque(servo_id)?;
75 thread::sleep(Duration::from_millis(500));
76
77 println!(" Activation...");
78 controller.enable_torque(servo_id)?;
79 thread::sleep(Duration::from_millis(500));
80 }
81
82 // Désactiver le torque à la fin
83 println!("\n--- Fin du programme ---");
84 controller.disable_torque(servo_id)?;
85 println!("✓ Torque désactivé");
86
87 Ok(())
88}Sourcepub fn read_speed(&self, sts_id: u8) -> Option<i16>
pub fn read_speed(&self, sts_id: u8) -> Option<i16>
Obtenir la vitesse actuelle
Sourcepub fn lock_eprom(&self, sts_id: u8) -> CommResult
pub fn lock_eprom(&self, sts_id: u8) -> CommResult
Verrouiller l’EEPROM du servo
Sourcepub fn unlock_eprom(&self, sts_id: u8) -> CommResult
pub fn unlock_eprom(&self, sts_id: u8) -> CommResult
Déverrouiller l’EEPROM du servo