Merge commit '79c5924e28dcc43299b23e37e4c29c0d09596e98' into new-tft-support

* commit '79c5924e28dcc43299b23e37e4c29c0d09596e98':
  Update README.md
  Use PROGMEM for TFT string handling
  Update README.md
  Small hardware serial protocol bugfix, which causes crashes inside the tft firmware
  Update README.md to add the slowdown feature.
  Update Codebase to Marlin 2.0.5.4
  Update README.md
  Update README.md to add buymeacoffee link
  Update README.md with new pictures
  Remove unused mes menu item.
  Fix BLTouch menu entry
  Switch to prerelease
  Bump version to 1.0.7 for next release.
  Add BLTouch special menu item.
  Update README.md to add BLTouch feature.
  Add BLTouch Support (can be enabled with #define KNUTWURST_BLTOUCH)
  - Rework of Touchscreen serial protocol handling - Disable Endstop Beep - Bugfix when stopping sd print while heating leads to a endless printing loop - Bump version to 1.0.6 for next release

# Conflicts:
#	Marlin/Configuration.h
#	Marlin/src/lcd/anycubic_touchscreen.cpp
#	Marlin/src/lcd/anycubic_touchscreen.h
This commit is contained in:
Knutwurst
2020-07-24 09:00:52 +02:00
17 changed files with 262 additions and 120 deletions

View File

@@ -39,7 +39,9 @@
#define CONFIGURATION_H_VERSION 020005
#define KNUTWURST_MEGAS
//#define KNUTWURST_TMC
#define KNUTWURST_TMC
//#define KNUTWURST_BLTOUCH
//#define KNUTWURST_DEBUG
//#define POWER_OUTAGE_TEST
//===========================================================================
@@ -76,6 +78,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(knutwurst)" // Who made the changes.
//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -909,7 +912,9 @@
* - normally-open switches to 5V and D32.
*
*/
//#define Z_MIN_PROBE_PIN 32 // Pin 32 is the RAMPS default
#if ENABLED(KNUTWURST_BLTOUCH)
#define Z_MIN_PROBE_PIN 2 // Pin 32 is the RAMPS default
#endif
/**
* Probe Type
@@ -923,7 +928,10 @@
* Use G29 repeatedly, adjusting the Z height at each point with movement commands
* or (with LCD_BED_LEVELING) the LCD controller.
*/
#if DISABLED(KNUTWURST_BLTOUCH)
#define PROBE_MANUALLY
#endif
//#define MANUAL_PROBE_START_Z 0.2
/**
@@ -947,7 +955,9 @@
/**
* The BLTouch probe uses a Hall effect sensor and emulates a servo.
*/
//#define BLTOUCH
#if ENABLED(KNUTWURST_BLTOUCH)
#define BLTOUCH
#endif
/**
* Touch-MI Probe by hotends.fr
@@ -1019,14 +1029,20 @@
*
* Specify a Probe position as { X, Y, Z }
*/
#if ENABLED(KNUTWURST_BLTOUCH)
#define NOZZLE_TO_PROBE_OFFSET { 29, -15, 0 }
#endif
#if DISABLED(KNUTWURST_BLTOUCH)
#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 }
#endif
// Most probes should stay away from the edges of the bed, but
// with NOZZLE_AS_PROBE this can be negative for a wider probing area.
#define MIN_PROBE_EDGE 10
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
#define XY_PROBE_SPEED 3600
// Feedrate (mm/m) for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
@@ -1065,14 +1081,23 @@
#define Z_CLEARANCE_MULTI_PROBE 5 // Z Clearance between multiple probes
//#define Z_AFTER_PROBING 5 // Z position after probing is done
#if ENABLED(KNUTWURST_BLTOUCH)
#define Z_PROBE_LOW_POINT -5 // Farthest distance below the trigger-point to go before stopping
#endif
#if DISABLED(KNUTWURST_BLTOUCH)
#define Z_PROBE_LOW_POINT -2 // Farthest distance below the trigger-point to go before stopping
#endif
// For M851 give a range for adjusting the Z probe offset
#define Z_PROBE_OFFSET_RANGE_MIN -20
#define Z_PROBE_OFFSET_RANGE_MAX 20
// Enable the M48 repeatability test to test probe accuracy
//#define Z_MIN_PROBE_REPEATABILITY_TEST
#if ENABLED(KNUTWURST_BLTOUCH)
#define Z_MIN_PROBE_REPEATABILITY_TEST
#endif
// Before deploy/stow pause for user confirmation
//#define PAUSE_BEFORE_DEPLOY_STOW
@@ -1286,11 +1311,21 @@
* leveling in steps so you can manually adjust the Z height at each grid-point.
* With an LCD controller the process is guided step-by-step.
*/
#if ENABLED(KNUTWURST_BLTOUCH)
//#define AUTO_BED_LEVELING_3POINT
//#define AUTO_BED_LEVELING_LINEAR
#define AUTO_BED_LEVELING_BILINEAR
//#define AUTO_BED_LEVELING_UBL
//#define MESH_BED_LEVELING
#endif
#if DISABLED(KNUTWURST_BLTOUCH)
//#define AUTO_BED_LEVELING_3POINT
//#define AUTO_BED_LEVELING_LINEAR
//#define AUTO_BED_LEVELING_BILINEAR
//#define AUTO_BED_LEVELING_UBL
#define MESH_BED_LEVELING
#endif
/**
* Normally G28 leaves leveling disabled on completion. Enable
@@ -1303,7 +1338,9 @@
* Turn on with the command 'M111 S32'.
* NOTE: Requires a lot of PROGMEM!
*/
//#define DEBUG_LEVELING_FEATURE
#if ENABLED(KNUTWURST_DEBUG)
#define DEBUG_LEVELING_FEATURE
#endif
#if ANY(MESH_BED_LEVELING, AUTO_BED_LEVELING_BILINEAR, AUTO_BED_LEVELING_UBL)
// Gradually reduce leveling correction until a set height is reached,
@@ -1335,7 +1372,7 @@
#if EITHER(AUTO_BED_LEVELING_LINEAR, AUTO_BED_LEVELING_BILINEAR)
// Set the number of grid points per dimension.
#define GRID_MAX_POINTS_X 3
#define GRID_MAX_POINTS_X 5
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X
// Probe along the Y axis, advancing X after each column
@@ -1839,7 +1876,7 @@
//
// Short 2KHz beep when endstops are hit
//
#define ENDSTOP_BEEP
//#define ENDSTOP_BEEP
//
// The duration and frequency for the UI feedback sound.

View File

@@ -1471,7 +1471,9 @@
*
* Warning: Does not respect endstops!
*/
//#define BABYSTEPPING
#if ENABLED(KNUTWURST_BLTOUCH)
#define BABYSTEPPING
#endif
#if ENABLED(BABYSTEPPING)
//#define INTEGRATED_BABYSTEPPING // EXPERIMENTAL integration of babystepping into the Stepper ISR
//#define BABYSTEP_WITHOUT_HOMING
@@ -1520,6 +1522,7 @@
*/
#define LIN_ADVANCE
#if ENABLED(LIN_ADVANCE)
//#define EXTRA_LIN_ADVANCE_K // Enable for second linear advance constants
#define LIN_ADVANCE_K 0 // Unit: mm compression per 1mm/s extruder speed
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
#endif
@@ -1556,12 +1559,23 @@
* probe points will follow. This prevents any change from causing
* the probe to be unable to reach any points.
*/
#if ENABLED(KNUTWURST_BLTOUCH)
#if PROBE_SELECTED && !IS_KINEMATIC
#define MIN_PROBE_EDGE_LEFT 10
#define MIN_PROBE_EDGE_RIGHT 10
#define MIN_PROBE_EDGE_FRONT 10
#define MIN_PROBE_EDGE_BACK 10
#endif
#endif
#if DISABLED(KNUTWURST_BLTOUCH)
#if PROBE_SELECTED && !IS_KINEMATIC
//#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE
//#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE
//#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE
//#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE
#endif
#endif
#if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL)
// Override the mesh area if the automatic (max) area is too large

View File

@@ -28,7 +28,7 @@
/**
* Marlin release version identifier
*/
//#define SHORT_BUILD_VERSION "2.0.5.3"
//#define SHORT_BUILD_VERSION "2.0.5.4"
/**
* Verbose version identifier which should contain a reference to the location
@@ -41,7 +41,7 @@
* here we define this default string as the date where the latest release
* version was tagged.
*/
//#define STRING_DISTRIBUTION_DATE "2020-01-31"
//#define STRING_DISTRIBUTION_DATE "2020-07-09"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.

View File

@@ -347,14 +347,14 @@ struct XYZval {
FI XYZval<T> operator* (const XYZEval<T> &rs) { XYZval<T> ls = *this; ls.x *= rs.x; ls.y *= rs.y; ls.z *= rs.z; return ls; }
FI XYZval<T> operator/ (const XYZEval<T> &rs) const { XYZval<T> ls = *this; ls.x /= rs.x; ls.y /= rs.y; ls.z /= rs.z; return ls; }
FI XYZval<T> operator/ (const XYZEval<T> &rs) { XYZval<T> ls = *this; ls.x /= rs.x; ls.y /= rs.y; ls.z /= rs.z; return ls; }
FI XYZval<T> operator* (const float &v) const { XYZval<T> ls = *this; ls.x *= v; ls.y *= v; ls.z *= z; return ls; }
FI XYZval<T> operator* (const float &v) { XYZval<T> ls = *this; ls.x *= v; ls.y *= v; ls.z *= z; return ls; }
FI XYZval<T> operator* (const int &v) const { XYZval<T> ls = *this; ls.x *= v; ls.y *= v; ls.z *= z; return ls; }
FI XYZval<T> operator* (const int &v) { XYZval<T> ls = *this; ls.x *= v; ls.y *= v; ls.z *= z; return ls; }
FI XYZval<T> operator/ (const float &v) const { XYZval<T> ls = *this; ls.x /= v; ls.y /= v; ls.z /= z; return ls; }
FI XYZval<T> operator/ (const float &v) { XYZval<T> ls = *this; ls.x /= v; ls.y /= v; ls.z /= z; return ls; }
FI XYZval<T> operator/ (const int &v) const { XYZval<T> ls = *this; ls.x /= v; ls.y /= v; ls.z /= z; return ls; }
FI XYZval<T> operator/ (const int &v) { XYZval<T> ls = *this; ls.x /= v; ls.y /= v; ls.z /= z; return ls; }
FI XYZval<T> operator* (const float &v) const { XYZval<T> ls = *this; ls.x *= v; ls.y *= v; ls.z *= v; return ls; }
FI XYZval<T> operator* (const float &v) { XYZval<T> ls = *this; ls.x *= v; ls.y *= v; ls.z *= v; return ls; }
FI XYZval<T> operator* (const int &v) const { XYZval<T> ls = *this; ls.x *= v; ls.y *= v; ls.z *= v; return ls; }
FI XYZval<T> operator* (const int &v) { XYZval<T> ls = *this; ls.x *= v; ls.y *= v; ls.z *= v; return ls; }
FI XYZval<T> operator/ (const float &v) const { XYZval<T> ls = *this; ls.x /= v; ls.y /= v; ls.z /= v; return ls; }
FI XYZval<T> operator/ (const float &v) { XYZval<T> ls = *this; ls.x /= v; ls.y /= v; ls.z /= v; return ls; }
FI XYZval<T> operator/ (const int &v) const { XYZval<T> ls = *this; ls.x /= v; ls.y /= v; ls.z /= v; return ls; }
FI XYZval<T> operator/ (const int &v) { XYZval<T> ls = *this; ls.x /= v; ls.y /= v; ls.z /= v; return ls; }
FI XYZval<T> operator>>(const int &v) const { XYZval<T> ls = *this; _RS(ls.x); _RS(ls.y); _RS(ls.z); return ls; }
FI XYZval<T> operator>>(const int &v) { XYZval<T> ls = *this; _RS(ls.x); _RS(ls.y); _RS(ls.z); return ls; }
FI XYZval<T> operator<<(const int &v) const { XYZval<T> ls = *this; _LS(ls.x); _LS(ls.y); _LS(ls.z); return ls; }

View File

@@ -25,23 +25,26 @@
* Release version. Leave the Marlin version or apply a custom scheme.
*/
#ifndef SHORT_BUILD_VERSION
#define SHORT_BUILD_VERSION "2.0.5.3"
#define SHORT_BUILD_VERSION "2.0.5.4"
#endif
/**
* Verbose version identifier which should contain a reference to the location
* from where the binary was downloaded or the source code was compiled.
*/
/**
* Verbose version identifier containing a unique identifier, such as the
* vendor name, download location, GitHub account, etc.
*/
#ifndef DETAILED_BUILD_VERSION
#define DETAILED_BUILD_VERSION SHORT_BUILD_VERSION " (knutwurst, Github)"
#endif
/**
* Defines the version of the Marlin build. Not to be confused with
* Marlin's own build number, e.g. 2.0.x.
* The STRING_DISTRIBUTION_DATE represents when the binary file was built,
* here we define this default string as the date where the latest release
* version was tagged.
*/
#define CUSTOM_BUILD_VERSION "1.0.5"
#define CUSTOM_BUILD_VERSION "1.0.7-prerelese"
#ifndef STRING_DISTRIBUTION_DATE
#define STRING_DISTRIBUTION_DATE "2020-03-31"
#define STRING_DISTRIBUTION_DATE "2020-07-09"
#endif
/**
@@ -68,18 +71,21 @@
#define PROTOCOL_VERSION "1.0"
#endif
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
*/
/**
* Define a generic printer name to be output to the LCD after booting Marlin.
*/
#ifndef MACHINE_NAME
#define MACHINE_NAME "Knutwurst's Anycubic i3 MEGA"
#endif
/**
* The SOURCE_CODE_URL is the location where users will find the Marlin Source
* Code which is installed on the device. In most cases —unless the manufacturer
* has a distinct Github fork— the Source Code URL should just be the main
* Marlin repository.
*/
/**
* Website where users can find Marlin source code for the binary installed on the
* device. Override this if you provide public source code download. (GPLv3 requires
* providing the source code to your customers.)
*/
#ifndef SOURCE_CODE_URL
#define SOURCE_CODE_URL "https://github.com/knutwurst/Marlin-2-0-x-Anycubic-i3-MEGA-S"
#endif
/**
* Default generic printer UUID.

View File

@@ -305,19 +305,21 @@ void AnycubicTouchscreenClass::PausePrint()
TFTstate = ANYCUBIC_TFT_STATE_SDPAUSE_REQ;
}
void AnycubicTouchscreenClass::StopPrint()
inline void AnycubicTouchscreenClass::StopPrint()
{
// stop print, disable heaters
wait_for_user = false;
wait_for_heatup = false;
card.endFilePrint();
card.closefile();
#ifdef ANYCUBIC_TFT_DEBUGANYCUBIC_TFT_STATE_SDSTOP_REQ
IsParked = false;
if(card.isFileOpen) {
card.endFilePrint();
card.closefile();
}
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("DEBUG: Stopped and cleared");
#endif
print_job_timer.stop();
thermalManager.disable_all_heaters();
IsParked = false;
ai3m_pause_state = 0;
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOPAIR(" DEBUG: AI3M Pause State: ", ai3m_pause_state);
@@ -413,8 +415,8 @@ void AnycubicTouchscreenClass::ParkAfterStop()
SERIAL_ECHOLNPGM("DEBUG: SDSTOP: Park XY");
#endif
}
queue.inject_P(PSTR("M84")); // disable stepper motors
queue.inject_P(PSTR("M27")); // force report of SD status
queue.enqueue_now_P(PSTR("M84")); // disable stepper motors
queue.enqueue_now_P(PSTR("M27")); // force report of SD status
ai3m_pause_state = 0;
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOPAIR(" DEBUG: AI3M Pause State: ", ai3m_pause_state);
@@ -523,6 +525,13 @@ void AnycubicTouchscreenClass::HandleSpecialMenu()
queue.inject_P(PSTR("G28\nG29"));
}
#endif
#if ENABLED(KNUTWURST_BLTOUCH)
else if (strcasestr(currentTouchscreenSelection, "<BLTouch Leveling>") != NULL)
{
SERIAL_ECHOLNPGM("Special Menu: BLTouch Leveling");
queue.inject_P(PSTR("G28\nG29"));
}
#endif
else if (strcasestr(currentTouchscreenSelection, "<Fil. Change Pause>") != NULL)
{
SERIAL_ECHOLNPGM("Special Menu: Fil. Change Pause");
@@ -584,6 +593,7 @@ void AnycubicTouchscreenClass::PrintList()
HARDWARE_SERIAL_PROTOCOLLNPGM("<Fil. Change Resume>");
break;
#if DISABLED(KNUTWURST_BLTOUCH)
case 4: // Page 2
HARDWARE_SERIAL_PROTOCOLLNPGM("<Start Mesh Leveling>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Start Mesh Leveling>");
@@ -625,6 +635,30 @@ void AnycubicTouchscreenClass::PrintList()
HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>");
break;
#endif
#if ENABLED(KNUTWURST_BLTOUCH)
case 4: // Page 2
HARDWARE_SERIAL_PROTOCOLLNPGM("<BLTouch Leveling>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<BLTouch Leveling>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<PID Tune Hotend>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<PID Tune Hotend>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<PID Tune Ultrabase>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<PID Tune Ultrabase>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Disable Fil. Sensor>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Disable Fil. Sensor>");
break;
case 8: // Page 3
HARDWARE_SERIAL_PROTOCOLLNPGM("<Enable Fil. Sensor>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Enable Fil. Sensor>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Save EEPROM>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Save EEPROM>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Load FW Defaults>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Load FW Defaults>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>");
break;
#endif
default:
break;
@@ -710,12 +744,10 @@ void AnycubicTouchscreenClass::PrintList()
if (card.flag.filenameIsDir)
{
HARDWARE_SERIAL_PROTOCOLPGM("/");
HARDWARE_SERIAL_PROTOCOL(card.filename);
HARDWARE_SERIAL_PROTOCOLLNPGM(".gco");
HARDWARE_SERIAL_PROTOCOLPGM("DIR_");
HARDWARE_SERIAL_PROTOCOL(outputString);
HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode");
HARDWARE_SERIAL_PROTOCOL("/");
HARDWARE_SERIAL_PROTOCOLLN(card.filename);
HARDWARE_SERIAL_PROTOCOL("/");
HARDWARE_SERIAL_PROTOCOLLN(buffer);
SERIAL_ECHO(count);
SERIAL_ECHOPGM(": /");
SERIAL_ECHOLN(outputString);
@@ -731,6 +763,11 @@ void AnycubicTouchscreenClass::PrintList()
}
}
}
#endif
else
{
// Do nothing?
}
}
void AnycubicTouchscreenClass::CheckSDCardChange()
@@ -895,7 +932,7 @@ void AnycubicTouchscreenClass::StateHandler()
// did we park the hotend already?
if ((!IsParked) && (!card.isPrinting()) && (!planner.movesplanned()))
{
queue.inject_P(PSTR("G91\nG1 E-1 F1800\nG90")); //retract
queue.enqueue_now_P(PSTR("G91\nG1 E-1 F1800\nG90")); //retract
ParkAfterStop();
IsParked = true;
}

View File

@@ -835,7 +835,7 @@ void Temperature::min_temp_error(const heater_ind_t heater) {
#if HOTENDS
#if ENABLED(PID_DEBUG)
extern bool PID_Debug_Flag;
extern bool pid_debug_flag;
#endif
float Temperature::get_pid_output_hotend(const uint8_t E_NAME) {
@@ -918,7 +918,7 @@ void Temperature::min_temp_error(const heater_ind_t heater) {
#endif // PID_OPENLOOP
#if ENABLED(PID_DEBUG)
if (ee == active_extruder && PID_Debug_Flag) {
if (ee == active_extruder && pid_debug_flag) {
SERIAL_ECHO_START();
SERIAL_ECHOPAIR(STR_PID_DEBUG, ee, STR_PID_DEBUG_INPUT, temp_hotend[ee].celsius, STR_PID_DEBUG_OUTPUT, pid_output);
#if DISABLED(PID_OPENLOOP)