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}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
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 stop_servo(&self, sts_id: u8) -> Option<bool>
pub fn stop_servo(&self, sts_id: u8) -> Option<bool>
Arrêter le servo (Mettre le couple à 0)
Sourcepub fn start_servo(&self, sts_id: u8) -> Result<(), String>
pub fn start_servo(&self, sts_id: u8) -> Result<(), String>
Démarrer le servo (Mettre le couple à 1)
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}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}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