Jog using absolute movements

This commit is contained in:
Frederik Menke 2024-01-01 13:05:11 +01:00
parent 3b5892e7e0
commit b47a27cb86
3 changed files with 24 additions and 22 deletions

View file

@ -33,8 +33,8 @@ pub type PrinterVec = Vector3D<f64, PrinterUnits>;
/// Jog the gantry by pumping loads of gcode into the printer board /// Jog the gantry by pumping loads of gcode into the printer board
pub async fn jog(gamepad: Arc<Gamepad>, mut printer: Printer) -> Never { pub async fn jog(gamepad: Arc<Gamepad>, mut printer: Printer) -> Never {
printer.use_relative_movements().await.unwrap(); printer.use_absolute_movements().await.unwrap();
println!("Using relative movements"); println!("Using absolute movements");
loop { loop {
let (setpoint_x, setpoint_y, setpoint_z) = gamepad.speed_setpoint(); let (setpoint_x, setpoint_y, setpoint_z) = gamepad.speed_setpoint();
@ -48,11 +48,21 @@ pub async fn jog(gamepad: Arc<Gamepad>, mut printer: Printer) -> Never {
continue; continue;
} }
let velocity = distance.length() / (TIME_PER_MOVEMENT.as_secs_f64() / 60.0); let velocity = distance.length() / (TIME_PER_MOVEMENT.as_secs_f64() / 60.0);
let old_postion = printer.state.position;
printer printer
.move_relative(distance.x, distance.y, distance.z, velocity.into()) .move_absolute(
old_postion.x + distance.x,
old_postion.y + distance.y,
old_postion.z + distance.z,
velocity.into(),
)
.await .await
.expect("Failed to send movement command!"); .expect("Failed to send movement command!");
println!(
"New position {pos:?}",
pos = printer.printer_state().position
);
// Wait for one command time if buffer is overfull, wait for half that time if buffer is // Wait for one command time if buffer is overfull, wait for half that time if buffer is
// filled *just* right. // filled *just* right.
let fill_level = printer.maximum_capacity() - printer.remaining_capacity(); let fill_level = printer.maximum_capacity() - printer.remaining_capacity();

View file

@ -81,15 +81,3 @@ async fn write_to_printer() -> Never {
printer.move_relative(25.0, 25.0, 5.0, None).await.unwrap(); printer.move_relative(25.0, 25.0, 5.0, None).await.unwrap();
} }
} }
async fn jog() -> Never {
let jogger = gamepad::Gamepad::new().await.unwrap();
loop {
tokio::time::sleep(Duration::from_secs(2)).await;
let setpoint = jogger.speed_setpoint();
println!(
"speed setpoint: {} {} {}",
setpoint.0, setpoint.1, setpoint.2
);
}
}

View file

@ -39,9 +39,9 @@ pub enum PrinterError {
#[derive(Debug, Clone, Copy)] #[derive(Debug, Clone, Copy)]
pub struct PrinterPosition { pub struct PrinterPosition {
x: f64, pub x: f64,
y: f64, pub y: f64,
z: f64, pub z: f64,
} }
pub enum MovementMode { pub enum MovementMode {
@ -50,8 +50,8 @@ pub enum MovementMode {
} }
pub struct State { pub struct State {
position: PrinterPosition, pub position: PrinterPosition,
movement_mode: MovementMode, pub movement_mode: MovementMode,
} }
pub struct Printer { pub struct Printer {
@ -163,6 +163,10 @@ impl Printer {
Ok(res) Ok(res)
} }
pub fn printer_state(&self) -> &State {
&self.state
}
/// The maximum capacity of the machines GCODE buffer. /// The maximum capacity of the machines GCODE buffer.
pub fn maximum_capacity(&self) -> usize { pub fn maximum_capacity(&self) -> usize {
self.maximum_buffer_capacity self.maximum_buffer_capacity
@ -289,14 +293,14 @@ impl Printer {
x: f64, x: f64,
y: f64, y: f64,
z: f64, z: f64,
velocity: f64, velocity: Option<f64>,
) -> Result<(), PrinterError> { ) -> Result<(), PrinterError> {
let command = G0Command { let command = G0Command {
x: Some(x), x: Some(x),
y: Some(y), y: Some(y),
z: Some(z), z: Some(z),
e: None, // Machine has no e e: None, // Machine has no e
velocity: Some(velocity), velocity: velocity,
}; };
if let MovementMode::RelativeMovements = self.state.movement_mode { if let MovementMode::RelativeMovements = self.state.movement_mode {
self.use_absolute_movements().await?; self.use_absolute_movements().await?;