torque_control/
torque_control.rs

1/// Exemple d'utilisation du contrôle du torque des servos ST3215
2/// 
3/// Cet exemple montre comment activer et désactiver le torque d'un servo
4
5use st3215::ST3215;
6use std::thread;
7use std::time::Duration;
8
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}