use st3215::ST3215;
use std::thread;
use std::time::Duration;
fn main() -> Result<(), String> {
let device = std::env::var("SERVO_PORT").unwrap_or_else(|_| "/dev/ttyUSB0".to_string());
println!("Connexion au port série: {}", device);
let controller = ST3215::new(&device)?;
let servo_id: u8 = 1;
println!("Vérification de la présence du servo {}...", servo_id);
if !controller.ping_servo(servo_id) {
return Err(format!("Servo {} non trouvé!", servo_id));
}
println!("✓ Servo {} trouvé", servo_id);
println!("\n--- Activation du torque ---");
controller.enable_torque(servo_id)?;
println!("✓ Torque activé pour le servo {}", servo_id);
thread::sleep(Duration::from_secs(2));
if let Some(position) = controller.read_position(servo_id) {
println!("Position actuelle: {}", position);
}
println!("\n--- Désactivation du torque ---");
controller.disable_torque(servo_id)?;
println!("✓ Torque désactivé pour le servo {}", servo_id);
println!("Le servo peut maintenant être déplacé manuellement");
thread::sleep(Duration::from_secs(3));
println!("\n--- Réactivation et déplacement ---");
controller.enable_torque(servo_id)?;
println!("✓ Torque réactivé");
let target_position = 2048;
let speed = 1000;
let acceleration = 50;
println!("Déplacement vers la position {}...", target_position);
controller.move_to(servo_id, target_position, speed, acceleration, false);
thread::sleep(Duration::from_secs(2));
if let Some(final_position) = controller.read_position(servo_id) {
println!("Position finale: {}", final_position);
}
println!("\n--- Cycle d'activation/désactivation ---");
for i in 1..=3 {
println!("Cycle {}/3", i);
println!(" Désactivation...");
controller.disable_torque(servo_id)?;
thread::sleep(Duration::from_millis(500));
println!(" Activation...");
controller.enable_torque(servo_id)?;
thread::sleep(Duration::from_millis(500));
}
println!("\n--- Fin du programme ---");
controller.disable_torque(servo_id)?;
println!("✓ Torque désactivé");
Ok(())
}