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}
Source

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

Vérifier la présence d’un servo

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 stop_servo(&self, sts_id: u8) -> Option<bool>

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

Source

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

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

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}
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}
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.