ST3215

Struct ST3215 

Source
pub struct ST3215 { /* private fields */ }

Implementations§

Source§

impl ST3215

Source

pub fn new(device: &str) -> Result<Self, String>

Créer une nouvelle instance ST3215

Examples found in repository?
examples/basic.rs (line 6)
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
Hide additional examples
examples/torque_control.rs (line 14)
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}
Source

pub fn ping_servo(&self, sts_id: u8) -> bool

Vérifier la présence d’un servo

Examples found in repository?
examples/torque_control.rs (line 21)
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}
Source

pub fn list_servos(&self) -> Vec<u8>

Scanner le bus pour déterminer tous les servos présents

Examples found in repository?
examples/basic.rs (line 9)
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}
Source

pub fn read_load(&self, sts_id: u8) -> Option<f32>

Lire la charge du servo (en pourcentage)

Source

pub fn read_voltage(&self, sts_id: u8) -> Option<f32>

Lire la tension actuelle du servo (en V)

Examples found in repository?
examples/basic.rs (line 21)
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}
Source

pub fn read_current(&self, sts_id: u8) -> Option<f32>

Lire le courant actuel du servo (en mA)

Examples found in repository?
examples/basic.rs (line 29)
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}
Source

pub fn read_temperature(&self, sts_id: u8) -> Option<u8>

Lire la température actuelle du servo (en °C)

Examples found in repository?
examples/basic.rs (line 25)
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}
Source

pub fn read_acceleration(&self, sts_id: u8) -> Option<u8>

Lire la valeur d’accélération actuelle du servo

Source

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
Source

pub fn read_correction(&self, sts_id: u8) -> Option<i16>

Lire la correction de position actuelle du servo

Source

pub fn is_moving(&self, sts_id: u8) -> Option<bool>

Le servo est-il en mouvement ?

Source

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²

Source

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

Source

pub fn disable_torque(&self, sts_id: u8) -> Result<(), String>

Désactiver le torque du servo (Mettre le couple à 0)

Examples found in repository?
examples/torque_control.rs (line 41)
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}
Source

pub fn enable_torque(&self, sts_id: u8) -> Result<(), String>

Activer le torque du servo (Mettre le couple à 1)

Examples found in repository?
examples/torque_control.rs (line 28)
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}
Source

pub fn stop_servo(&self, sts_id: u8) -> Option<bool>

👎Deprecated since 0.1.0: Utilisez disable_torque à la place

Arrêter le servo (Mettre le couple à 0)

Deprecated: Utilisez disable_torque à la place

Source

pub fn start_servo(&self, sts_id: u8) -> Result<(), String>

👎Deprecated since 0.1.0: Utilisez enable_torque à la place

Démarrer le servo (Mettre le couple à 1)

Deprecated: Utilisez enable_torque à la place

Source

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)

Source

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)

Source

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)

Source

pub fn define_middle(&self, sts_id: u8) -> Option<bool>

Définir la position 2048 (Mettre le couple à 128)

Source

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

Source

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?
examples/basic.rs (line 39)
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
Hide additional examples
examples/torque_control.rs (line 58)
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}
Source

pub fn write_position(&self, sts_id: u8, position: u16) -> Option<bool>

Écrire la position

Source

pub fn read_status(&self, sts_id: u8) -> Option<HashMap<String, bool>>

Obtenir le statut des capteurs

Source

pub fn read_position(&self, sts_id: u8) -> Option<u16>

Obtenir la position actuelle

Examples found in repository?
examples/basic.rs (line 17)
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
Hide additional examples
examples/torque_control.rs (line 35)
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}
Source

pub fn read_speed(&self, sts_id: u8) -> Option<i16>

Obtenir la vitesse actuelle

Source

pub fn lock_eprom(&self, sts_id: u8) -> CommResult

Verrouiller l’EEPROM du servo

Source

pub fn unlock_eprom(&self, sts_id: u8) -> CommResult

Déverrouiller l’EEPROM du servo

Source

pub fn change_id(&self, sts_id: u8, new_id: u8) -> Result<(), String>

Changer l’ID d’un servo sts_id: ID actuel du servo (1 pour un servo neuf) new_id: Nouvel ID pour le servo (0-253)

Auto Trait Implementations§

§

impl Freeze for ST3215

§

impl RefUnwindSafe for ST3215

§

impl Send for ST3215

§

impl Sync for ST3215

§

impl Unpin for ST3215

§

impl UnwindSafe for ST3215

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.