rustypot 1.4.2

Package to communicate with Dynamixel motors.
Documentation
use std::{error::Error, thread, time::Duration};

use rustypot::{servo::feetech::sts3215, DynamixelProtocolHandler};
fn main() -> Result<(), Box<dyn Error>> {
    let serialportname: String = "/dev/tty.usbmodem58FA0822621".to_string();
    let baudrate: u32 = 1_000_000;
    let ids = vec![1, 2];

    let mut serial_port = serialport::new(serialportname, baudrate)
        .timeout(Duration::from_millis(1000))
        .open()?;
    println!("serial port opened");

    let io = DynamixelProtocolHandler::v1();

    let mut times: Vec<f64> = Vec::new();
    let duration = Duration::new(5, 0);
    let start_overall = std::time::Instant::now();

    while start_overall.elapsed() < duration {
        let start_time = std::time::Instant::now();

        let _x: i16 = sts3215::read_raw_present_position(&io, serial_port.as_mut(), ids[0])?;
        let x = sts3215::sync_read_present_position(&io, serial_port.as_mut(), &ids)?;
        println!("present pos: {:?}", x);

        let elapsed_time = start_time.elapsed();
        let elapsed_secs = elapsed_time.as_secs_f64();
        println!("Time taken to read position: {:?}", elapsed_secs);

        times.push(elapsed_secs);
        thread::sleep(Duration::from_millis(10));
    }

    let mean = times.iter().sum::<f64>() / times.len() as f64;
    let std_dev =
        (times.iter().map(|&t| (t - mean).powf(2.0)).sum::<f64>() / times.len() as f64).sqrt();

    println!("Mean time: {}", mean);
    println!("Standard deviation time: {}", std_dev);

    Ok(())
}