arduino_serial/
arduino_serial.rs

1use std::env;
2
3extern crate serial;
4extern crate robust_arduino_serial;
5use std::time::Duration;
6use std::thread;
7use serial::prelude::*;
8use robust_arduino_serial::*;
9
10// Default settings of Arduino
11// see: https://www.arduino.cc/en/Serial/Begin
12const SETTINGS: serial::PortSettings = serial::PortSettings {
13    baud_rate:    serial::Baud115200,
14    char_size:    serial::Bits8,
15    parity:       serial::ParityNone,
16    stop_bits:    serial::Stop1,
17    flow_control: serial::FlowNone,
18};
19
20
21fn main() {
22
23    let args: Vec<String> = env::args().skip(1).collect();
24
25    if args.len() < 1
26    {
27        panic!("Please provide a serial port as argument (ex: /dev/ttyACM0)");
28    }
29    let serial_port = &args[0];
30
31    println!("Opening port: {:?}", serial_port);
32    let mut port = serial::open(&serial_port).unwrap();
33    port.configure(&SETTINGS).unwrap();
34    // timeout of 30s
35    port.set_timeout(Duration::from_secs(30)).unwrap();
36
37    loop
38    {
39        println!("Waiting for Arduino...");
40        let order = Order::HELLO as i8;
41        write_i8(&mut port, order).unwrap();
42        let received_order = Order::from_i8(read_i8(&mut port).unwrap()).unwrap();
43        if received_order == Order::ALREADY_CONNECTED
44        {
45            break;
46        }
47        thread::sleep(Duration::from_secs(1));
48    }
49
50    println!("Connected to Arduino");
51
52    let motor_order = Order::MOTOR as i8;
53    let motor_speed: i8 = -56;
54    write_i8(&mut port, motor_order).unwrap();
55    write_i8(&mut port, motor_speed).unwrap();
56
57    write_i8(&mut port, Order::SERVO as i8).unwrap();
58    write_i16(&mut port, 120_i16).unwrap();
59
60    for _ in 0..10 {
61        let order = read_i8(&mut port).unwrap();
62        println!("Order received: {:?}", order);
63
64        if let Some(received_order) = Order::from_i8(order)
65        {
66            println!("Known order: {:?}", received_order);
67        }
68        else
69        {
70            println!("Unknown order: {:?}", order);
71        }
72    }
73}