MK.ino 12.2 KB
Newer Older
MagoKimbra's avatar
MagoKimbra committed
1
/**
MagoKimbra's avatar
MagoKimbra committed
2
 * MK 3D Printer Firmware
MagoKimbra's avatar
MagoKimbra committed
3
 *
MagoKimbra's avatar
MagoKimbra committed
4
 * Based on Marlin, Sprinter and grbl
MagoKimbra's avatar
MagoKimbra committed
5
 * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
MagoKimbra's avatar
MagoKimbra committed
6
 * Copyright (C) 2013 - 2016 Alberto Cotronei @MagoKimbra
MagoKimbra's avatar
MagoKimbra committed
7 8 9 10 11 12 13 14
 *
 * 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
MagoKimbra's avatar
MagoKimbra committed
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
MagoKimbra's avatar
MagoKimbra committed
16 17 18
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
MagoKimbra's avatar
MagoKimbra committed
19
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
MagoKimbra's avatar
MagoKimbra committed
20 21
 */

MagoKimbra's avatar
MagoKimbra committed
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
/**
 * Look here for descriptions of G-codes:
 *  - http://linuxcnc.org/handbook/gcode/g-code.html
 *  - http://objects.reprap.org/wiki/Mendel_User_Manual:_RepRapGCodes
 *
 * Help us document these G-codes online:
 *  - http://reprap.org/wiki/G-code
 *  - https://github.com/MagoKimbra/MarlinKimbra/blob/master/Documentation/GCodes.md
 *
 * -----------------
 * Implemented Codes
 * -----------------
 *
 * "G" Codes
 *
37 38
 * G0  -> G1 except for laser where G0 is "move without firing"
 * G1  - Coordinated Movement X Y Z E, for laser move by firing
MagoKimbra's avatar
MagoKimbra committed
39 40
 * G2  - CW ARC
 * G3  - CCW ARC
MagoKimbra's avatar
MagoKimbra committed
41
 * G4  - Dwell S[seconds] or P[milliseconds], delay in Second or Millisecond
42
 * G5  - Bezier curve - from http://forums.reprap.org/read.php?147,93577
MagoKimbra's avatar
MagoKimbra committed
43
 * G7  - Laser raster base64
MagoKimbra's avatar
MagoKimbra committed
44 45
 * G10 - retract filament according to settings of M207
 * G11 - retract recover filament according to settings of M208
MagoKimbra's avatar
MagoKimbra committed
46
 * G28 - X Y Z Home all Axis. M for bed manual setting with LCD. B return to back point
MagoKimbra's avatar
MagoKimbra committed
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
 * G29 - Detailed Z-Probe, probes the bed at 3 or more points.  Will fail if you haven't homed yet.
 * G30 - Single Z Probe, probes bed at current XY location. - Bed Probe and Delta geometry Autocalibration
 * G31 - Dock sled (Z_PROBE_SLED only)
 * G32 - Undock sled (Z_PROBE_SLED only)
 * G60 - Save current position coordinates (all axes, for active extruder).
 *        S<SLOT> - specifies memory slot # (0-based) to save into (default 0).
 * G61 - Apply/restore saved coordinates to the active extruder.
 *        X Y Z E - Value to add at stored coordinates.
 *        F<speed> - Set Feedrate.
 *        S<SLOT> - specifies memory slot # (0-based) to restore from (default 0).
 * G90 - Use Absolute Coordinates
 * G91 - Use Relative Coordinates
 * G92 - Set current position to coordinates given
 *
 * "M" Codes
 *
 * M0   - Unconditional stop - Wait for user to press a button on the LCD (Only if ULTRA_LCD is enabled)
 * M1   - Same as M0
 * M3   - Put S<value> in laser beam control
 * M4   - Turn on laser beam
 * M5   - Turn off laser beam
 * M11  - Start/Stop printing serial mode
 * M17  - Enable/Power all stepper motors
 * M18  - Disable all stepper motors; same as M84
 * M20  - List SD card
 * M21  - Init SD card
 * M22  - Release SD card
 * M23  - Select SD file (M23 filename.g)
 * M24  - Start/resume SD print
 * M25  - Pause SD print
 * M26  - Set SD position in bytes (M26 S12345)
 * M27  - Report SD print status
 * M28  - Start SD write (M28 filename.g)
 * M29  - Stop SD write
 * M30  - Delete file from SD (M30 filename.g)
 * M31  - Output time since last M109 or SD card start to serial
MagoKimbra's avatar
MagoKimbra committed
83
 * M32  - Make directory
MagoKimbra's avatar
MagoKimbra committed
84
 * M35  - Upload Firmware to Nextion from SD
MagoKimbra's avatar
MagoKimbra committed
85 86 87 88 89 90 91 92 93 94 95
 * M42  - Change pin status via gcode Use M42 Px Sy to set pin x to value y, when omitting Px the onboard led will be used.
 * M48  - Measure Z_Probe repeatability. M48 [P # of points] [X position] [Y position] [V_erboseness #] [E_ngage Probe] [L # of legs of travel]
 * M70  - Power consumption sensor calibration
 * M80  - Turn on Power Supply
 * M81  - Turn off Power Supply
 * M82  - Set E codes absolute (default)
 * M83  - Set E codes relative while in Absolute Coordinates (G90) mode
 * M84  - Disable steppers until next move,
 *        or use S<seconds> to specify an inactivity timeout, after which the steppers will be disabled.  S0 to disable the timeout.
 * M85  - Set inactivity shutdown timer with parameter S<seconds>. To disable set zero (default)
 * M92  - Set axis_steps_per_unit - same syntax as G92
MagoKimbra's avatar
MagoKimbra committed
96 97 98 99
 * M96  - Print ZWobble value
 * M97  - Set ZWobble parameter M97 A<Amplitude_in_mm> W<period_in_mm> P<phase_in_degrees>
 * M98  - Print Hysteresis value
 * M99  - Set Hysteresis parameter M99 X<in mm> Y<in mm> Z<in mm> E<in mm>
MagoKimbra's avatar
MagoKimbra committed
100
 * M100 - Watch Free Memory (For Debugging Only)
MagoKimbra's avatar
MagoKimbra committed
101
 * M104 - Set hotend target temp
MagoKimbra's avatar
MagoKimbra committed
102 103 104
 * M105 - Read current temp
 * M106 - Fan on
 * M107 - Fan off
MagoKimbra's avatar
MagoKimbra committed
105 106
 * M109 - Sxxx Wait for hotend current temp to reach target temp. Waits only when heating
 *        Rxxx Wait for hotend current temp to reach target temp. Waits when heating and cooling
MagoKimbra's avatar
MagoKimbra committed
107 108
 *        IF AUTOTEMP is enabled, S<mintemp> B<maxtemp> F<factor>. Exit autotemp by any M109 without F
 * M110 - Set the current line number
MagoKimbra's avatar
MagoKimbra committed
109
 * M111 - Set debug flags with S<mask>.
MagoKimbra's avatar
MagoKimbra committed
110
 * M112 - Emergency stop
MagoKimbra's avatar
MagoKimbra committed
111
 * M114 - Output current position to serial port
MagoKimbra's avatar
MagoKimbra committed
112 113 114 115 116 117 118 119 120 121
 * M115 - Capabilities string
 * M117 - Display a message on the controller screen
 * M119 - Output Endstop status to serial port
 * M120 - Enable endstop detection
 * M121 - Disable endstop detection
 * M122 - S<1=true/0=false> Enable or disable check software endstop
 * M126 - Solenoid Air Valve Open (BariCUDA support by jmil)
 * M127 - Solenoid Air Valve Closed (BariCUDA vent to atmospheric pressure by jmil)
 * M128 - EtoP Open (BariCUDA EtoP = electricity to air pressure transducer by jmil)
 * M129 - EtoP Closed (BariCUDA EtoP = electricity to air pressure transducer by jmil)
MagoKimbra's avatar
MagoKimbra committed
122 123 124
 * M140 - Set hot bed target temp
 * M141 - Set hot chamber target temp
 * M142 - Set cooler target temp
MagoKimbra's avatar
MagoKimbra committed
125 126
 * M145 - Set the heatup state H<hotend> B<bed> F<fan speed> for S<material> (0=PLA, 1=ABS)
 * M150 - Set BlinkM Color Output R: Red<0-255> U(!): Green<0-255> B: Blue<0-255> over i2c, G for green does not work.
MagoKimbra's avatar
MagoKimbra committed
127 128 129
 * M163 - Set a single proportion for a mixing extruder. Requires COLOR_MIXING_EXTRUDER.
 * M164 - Save the mix as a virtual extruder. Requires COLOR_MIXING_EXTRUDER and MIXING_VIRTUAL_TOOLS.
 * M165 - Set the proportions for a mixing extruder. Use parameters ABCDHI to set the mixing factors. Requires COLOR_MIXING_EXTRUDER.
MagoKimbra's avatar
MagoKimbra committed
130 131
 * M190 - Sxxx Wait for bed current temp to reach target temp. Waits only when heating
 *        Rxxx Wait for bed current temp to reach target temp. Waits when heating and cooling
MagoKimbra's avatar
MagoKimbra committed
132 133 134 135
 * M191 - Sxxx Wait for chamber current temp to reach target temp. Waits only when heating
 *        Rxxx Wait for chamber current temp to reach target temp. Waits when heating and cooling
 * M192 - Sxxx Wait for cooler current temp to reach target temp. Waits only when heating
 *        Rxxx Wait for cooler current temp to reach target temp. Waits when heating and cooling
MagoKimbra's avatar
MagoKimbra committed
136 137 138 139 140 141 142 143 144 145 146 147
 * M200 - set filament diameter and set E axis units to cubic millimeters (use S0 to set back to millimeters).:D<millimeters>- 
 * M201 - Set max acceleration in units/s^2 for print moves (M201 X1000 Y1000)
 * M202 - Set max acceleration in units/s^2 for travel moves (M202 X1000 Y1000) Unused in Marlin!!
 * M203 - Set maximum feedrate that your machine can sustain (M203 X200 Y200 Z300 E10000) in mm/sec
 * M204 - Set default acceleration: P for Printing moves, R for Retract only (no X, Y, Z) moves and T for Travel (non printing) moves (ex. M204 P800 T3000 R9000) in mm/sec^2
 * M205 -  advanced settings:  minimum travel speed S=while printing T=travel only,  B=minimum segment time X= maximum xy jerk, Z=maximum Z jerk, E=maximum E jerk
 * M206 - Set additional homing offset
 * M207 - Set retract length S[positive mm] F[feedrate mm/min] Z[additional zlift/hop], stays in mm regardless of M200 setting
 * M208 - Set recover=unretract length S[positive mm surplus to the M207 S*] F[feedrate mm/min]
 * M209 - S<1=true/0=false> enable automatic retract detect if the slicer did not support G10/11: every normal extrude-only move will be classified as retract depending on the direction.
 * M218 - Set hotend offset (in mm): T<extruder_number> X<offset_on_X> Y<offset_on_Y>
 * M220 - Set speed factor override percentage: S<factor in percent>
MagoKimbra's avatar
MagoKimbra committed
148 149
 * M221 - T<extruder> S<factor in percent> - set extrude factor override percentage
 * M222 - T<extruder> S<factor in percent> - set density extrude factor percentage for purge
MagoKimbra's avatar
MagoKimbra committed
150 151 152 153 154 155 156
 * M226 - Wait until the specified pin reaches the state required: P<pin number> S<pin state>
 * M240 - Trigger a camera to take a photograph
 * M250 - Set LCD contrast C<contrast value> (value 0..63)
 * M280 - Set servo position absolute. P: servo index, S: angle or microseconds
 * M300 - Play beep sound S<frequency Hz> P<duration ms>
 * M301 - Set PID parameters P I D and C
 * M302 - Allow cold extrudes, or set the minimum extrude S<temperature>.
MagoKimbra's avatar
MagoKimbra committed
157
 * M303 - PID relay autotune S<temperature> sets the target temperature (default target temperature = 150C). H<hotend> C<cycles> U<Apply result>
MagoKimbra's avatar
MagoKimbra committed
158 159 160
 * M304 - Set hot bed PID parameters P I and D
 * M305 - Set hot chamber PID parameters P I and D
 * M306 - Set cooler PID parameters P I and D
MagoKimbra's avatar
MagoKimbra committed
161 162 163 164 165 166 167 168 169 170 171
 * M350 - Set microstepping mode.
 * M351 - Toggle MS1 MS2 pins directly.
 * M380 - Activate solenoid on active extruder
 * M381 - Disable all solenoids
 * M400 - Finish all moves
 * M401 - Lower z-probe if present
 * M402 - Raise z-probe if present
 * M404 - N<dia in mm> Enter the nominal filament width (3mm, 1.75mm ) or will display nominal filament width without parameters
 * M405 - Turn on Filament Sensor extrusion control.  Optional D<delay in cm> to set delay in centimeters between sensor and extruder
 * M406 - Turn off Filament Sensor extrusion control
 * M407 - Display measured filament diameter
MagoKimbra's avatar
MagoKimbra committed
172
 * M408 - Report JSON-style response
MagoKimbra's avatar
MagoKimbra committed
173 174 175 176 177 178 179 180 181 182 183
 * M410 - Quickstop. Abort all the planned moves
 * M428 - Set the home_offset logically based on the current_position
 * M500 - Store parameters in EEPROM
 * M501 - Read parameters from EEPROM (if you need reset them after you changed them temporarily).
 * M502 - Revert to the default "factory settings". You still need to store them in EEPROM afterwards if you want to.
 * M503 - Print the current settings (from memory not from EEPROM). Use S0 to leave off headings.
 * M522 - Read or Write on card. M522 T<extruders> R<read> or W<write> L<list>
 * M540 - Use S[0|1] to enable or disable the stop print on endstop hit (requires ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED)
 * M595 - Set hotend AD595 O<offset> and S<gain>
 * M600 - Pause for filament change X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal]
 * M605 - Set dual x-carriage movement mode: S<mode> [ X<duplication x-offset> R<duplication temp offset> ]
184
 * M649 - laser set options
MagoKimbra's avatar
MagoKimbra committed
185
 * M666 - Set z probe offset or Endstop and delta geometry adjustment
MagoKimbra's avatar
MagoKimbra committed
186
 * M906 - Set motor currents XYZ T0-4 E
MagoKimbra's avatar
MagoKimbra committed
187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
 * M907 - Set digital trimpot motor current using axis codes.
 * M908 - Control digital trimpot directly.
 *
 * ************ SCARA Specific - This can change to suit future G-code regulations
 * M360 - SCARA calibration: Move to cal-position ThetaA (0 deg calibration)
 * M361 - SCARA calibration: Move to cal-position ThetaB (90 deg calibration - steps per degree)
 * M362 - SCARA calibration: Move to cal-position PsiA (0 deg calibration)
 * M363 - SCARA calibration: Move to cal-position PsiB (90 deg calibration - steps per degree)
 * M364 - SCARA calibration: Move to cal-position PSIC (90 deg to Theta calibration position)
 * M365 - SCARA calibration: Scaling factor, X, Y, Z axis
 * ************* SCARA End ***************
 *
 * M928 - Start SD logging (M928 filename.g) - ended by M29
 * M997 - NPR2 Color rotate
 * M999 - Restart after being stopped by error
 *
 * "T" Codes
 *
 * T0-T3 - Select a tool by index (usually an extruder) [ F<mm/min> ]
 *
 */
MagoKimbra's avatar
MagoKimbra committed
208

209
#include "base.h"
210 211 212
#if ENABLED(DIGIPOT_I2C) || ENABLED(BLINKM)
  #include <Wire.h>
#endif
Simone Primarosa's avatar
Simone Primarosa committed
213 214
#if ENABLED(ULTRA_LCD)
  #if ENABLED(LCD_I2C_TYPE_PCF8575)
MagoKimbra's avatar
MagoKimbra committed
215 216
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
Simone Primarosa's avatar
Simone Primarosa committed
217
  #elif ENABLED(LCD_I2C_TYPE_MCP23017) || ENABLED(LCD_I2C_TYPE_MCP23008)
MagoKimbra's avatar
MagoKimbra committed
218 219
    #include <Wire.h>
    #include <LiquidTWI2.h>
Simone Primarosa's avatar
Simone Primarosa committed
220
  #elif ENABLED(DOGLCD)
MagoKimbra's avatar
MagoKimbra committed
221 222 223 224 225
    #include <U8glib.h> // library for graphics LCD by Oli Kraus (https://code.google.com/p/u8glib/)
  #else
    #include <LiquidCrystal.h> // library for character LCD
  #endif
#endif
226 227
#if HAS(DIGIPOTSS)
  #include <SPI.h>
MagoKimbra's avatar
MagoKimbra committed
228
#endif