deoxy 0.2.1

A programmable, user-friendly buffer exchange system.
use std::error::Error;
use std::time::Duration;

use deoxy::{actix::*, Config, CoordMessage, Coordinator, MotorConfig, Protocol, PumpConfig, Step};

macro_rules! motor {
    ($pin:expr) => {
        MotorConfig {
            label: None,
            period: Duration::from_millis(50),
            pin: $pin,
            range: [Duration::from_millis(1), Duration::from_millis(100)],
        }
    };
}

macro_rules! secs {
    ($s:expr) => {
        Some(Duration::new($s, 0))
    };
}

fn main() -> Result<(), Box<dyn Error>> {
    pretty_env_logger::init();
    let config = Config {
        pump: PumpConfig {
            pins: [24, 25, 5, 6],
            invert: false,
        },
        motors: vec![motor!(4), motor!(27), motor!(21), motor!(13)],
        admins: vec![],
    };
    let proto = Protocol {
        steps: vec![
            Step::Perfuse(0, secs!(5)),
            Step::Perfuse(1, secs!(10)),
            Step::Perfuse(2, secs!(5)),
            Step::Perfuse(3, None),
        ],
    };
    let coord = Coordinator::try_new(config)?;
    let system = System::new("deoxy-protocol-example");
    let addr = coord.start();
    addr.do_send(CoordMessage::Start(proto, None));
    system.run();
    Ok(())
}