This commit is contained in:
Frederik Menke 2022-10-27 00:02:06 +02:00
parent 826c9183e4
commit 797dd215d2
4 changed files with 66 additions and 3 deletions

View file

@ -19,7 +19,30 @@ async fn main() -> tokio_serial::Result<()> {
.await .await
.unwrap(); .unwrap();
loop { loop {
tokio::time::sleep(std::time::Duration::from_secs(2)).await; tokio::time::sleep(std::time::Duration::from_secs(5)).await;
printer
.printer_in
.send(Box::new(G0Command {
x: Some(50.0),
y: Some(50.0),
z: Some(5.0),
e: None,
velocity: None,
}))
.await
.unwrap();
tokio::time::sleep(std::time::Duration::from_secs(5)).await;
printer
.printer_in
.send(Box::new(G0Command {
x: Some(25.0),
y: Some(25.0),
z: Some(5.0),
e: None,
velocity: None,
}))
.await
.unwrap();
} }
Ok(()) Ok(())
} }

View file

@ -0,0 +1,38 @@
use super::*;
#[derive(Debug)]
pub struct G0Command {
pub x: Option<f64>,
pub y: Option<f64>,
pub z: Option<f64>,
pub e: Option<f64>,
pub velocity: Option<f64>,
}
impl GcodeCommand for G0Command {
fn command(&self) -> String {
fn unpack(letter: &str, o: Option<f64>) -> String {
o.map(|x| format!("{}{:.3}", letter, x)).unwrap_or_default()
}
format!(
"G0 {} {} {} {} {}",
unpack("X", self.x),
unpack("Y", self.y),
unpack("Z", self.z),
unpack("E", self.e),
unpack("F", self.velocity)
)
}
fn parse_reply(&self, reply: &str) -> Result<GcodeReply> {
if reply.is_empty() {
Ok(GcodeReply::NoReply)
} else {
Err(GcodeReplyError {
sent_command: self.command(),
parsed_input: reply.to_string(),
problem: "Expected empty reply".to_string(),
})
}
}
}

View file

@ -33,7 +33,7 @@ impl GcodeCommand for G28Command {
problem: "Expected no reply".to_string(), problem: "Expected no reply".to_string(),
}) })
} else { } else {
Ok(GcodeReply::G28Reply) Ok(GcodeReply::NoReply)
} }
} }
} }

View file

@ -1,5 +1,7 @@
mod g0;
mod g28; mod g28;
mod m114; mod m114;
pub use g0::G0Command;
pub use g28::G28Command; pub use g28::G28Command;
pub use m114::M114Command; pub use m114::M114Command;
use std::fmt::Debug; use std::fmt::Debug;
@ -9,7 +11,7 @@ type Result<T> = std::result::Result<T, GcodeReplyError>;
#[derive(Debug)] #[derive(Debug)]
pub enum GcodeReply { pub enum GcodeReply {
M114Reply { x: f64, y: f64, z: f64, e: f64 }, M114Reply { x: f64, y: f64, z: f64, e: f64 },
G28Reply, NoReply,
} }
#[derive(Debug, Clone)] #[derive(Debug, Clone)]