From bd78ca0ee3c362add556c9cb4ff3b5256c61d019 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 25 Oct 2017 15:49:34 -0500 Subject: [PATCH] Add M290 Babystepping --- Marlin/src/gcode/gcode.cpp | 4 +++ Marlin/src/gcode/gcode.h | 5 +++ Marlin/src/gcode/motion/M290.cpp | 61 ++++++++++++++++++++++++++++++++ Marlin/src/inc/SanityCheck.h | 4 +-- 4 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 Marlin/src/gcode/motion/M290.cpp diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp index 5c0502772a..0e79f56fef 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -525,6 +525,10 @@ void GcodeSuite::process_next_command() { case 280: M280(); break; // M280: Set servo position absolute #endif + #if ENABLED(BABYSTEPPING) + case 290: M290(); break; // M290: Babystepping + #endif + #if HAS_BUZZER case 300: M300(); break; // M300: Play beep tone #endif diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h index 61415b0761..90d4c7f6ef 100644 --- a/Marlin/src/gcode/gcode.h +++ b/Marlin/src/gcode/gcode.h @@ -169,6 +169,7 @@ * M260 - i2c Send Data (Requires EXPERIMENTAL_I2CBUS) * M261 - i2c Request Data (Requires EXPERIMENTAL_I2CBUS) * M280 - Set servo position absolute: "M280 P S". (Requires servos) + * M290 - Babystepping (Requires BABYSTEPPING) * M300 - Play beep sound S P * M301 - Set PID parameters P I and D. (Requires PIDTEMP) * M302 - Allow cold extrudes, or set the minimum extrude S. (Requires PREVENT_COLD_EXTRUSION) @@ -585,6 +586,10 @@ private: static void M280(); #endif + #if ENABLED(BABYSTEPPING) + static void M290(); + #endif + #if HAS_BUZZER static void M300(); #endif diff --git a/Marlin/src/gcode/motion/M290.cpp b/Marlin/src/gcode/motion/M290.cpp new file mode 100644 index 0000000000..45817f59f5 --- /dev/null +++ b/Marlin/src/gcode/motion/M290.cpp @@ -0,0 +1,61 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include "../../inc/MarlinConfig.h" + +#if ENABLED(BABYSTEPPING) + +#include "../gcode.h" +#include "../../module/probe.h" +#include "../../module/temperature.h" +#include "../../module/planner.h" + +/** + * M290: Babystepping + */ +void GcodeSuite::M290() { + #if ENABLED(BABYSTEP_XY) + for (uint8_t a = X_AXIS; a <= Z_AXIS; a++) + if (parser.seenval(axis_codes[a]) || (a == Z_AXIS && parser.seenval('S'))) { + float offs = constrain(parser.value_axis_units(a), -2, 2); + #if ENABLED(BABYSTEP_ZPROBE_OFFSET) + if (a == Z_AXIS) { + zprobe_zoffset += offs; + refresh_zprobe_zoffset(true); // 'true' to not babystep + } + #endif + thermalManager.babystep_axis(a, offs * planner.axis_steps_per_mm[a]); + } + #else + if (parser.seenval('Z') || parser.seenval('S')) { + float offs = constrain(parser.value_axis_units(Z_AXIS), -2, 2); + #if ENABLED(BABYSTEP_ZPROBE_OFFSET) + zprobe_zoffset += offs; + refresh_zprobe_zoffset(); // This will babystep the axis + #else + thermalManager.babystep_axis(Z_AXIS, offs * planner.axis_steps_per_mm[Z_AXIS]); + #endif + } + #endif +} + +#endif // BABYSTEPPING diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index d83e8d3b61..0da0f42684 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -353,9 +353,7 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE, * Babystepping */ #if ENABLED(BABYSTEPPING) - #if DISABLED(ULTRA_LCD) && DISABLED(I2C_POSITION_ENCODERS) - #error "BABYSTEPPING requires an LCD controller." - #elif ENABLED(SCARA) + #if ENABLED(SCARA) #error "BABYSTEPPING is not implemented for SCARA yet." #elif ENABLED(DELTA) && ENABLED(BABYSTEP_XY) #error "BABYSTEPPING only implemented for Z axis on deltabots."