arduino_serial/
arduino_serial.rs1use 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
10const 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 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}