Complete rewrite of anycubic tft code structure + cleanup for upcoming Chiron BBL feature.

This commit is contained in:
Knutwurst
2021-02-18 18:18:38 +01:00
parent 72d48a5ef8
commit 7f56178d13
4 changed files with 1368 additions and 1327 deletions

View File

@@ -161,9 +161,9 @@
* PLEASE READ THE WARNING ABOVE!
*
*/
#if ENABLED(KNUTWURST_CHIRON)
//#if ENABLED(KNUTWURST_CHIRON)
//#define KNUTWURST_TFT_LEVELING
#endif
//#endif
/*******************************************************************************************
** **

View File

@@ -31,6 +31,8 @@
#include "../module/planner.h"
#include "../module/printcounter.h"
#include "../module/temperature.h"
#include "../module/motion.h"
#include "../module/configuration_store.h"
#include "../sd/cardreader.h"
@@ -40,6 +42,12 @@
char _conv[8];
#if ENABLED(KNUTWURST_TFT_LEVELING)
int z_values_index;
int z_values_size;
float SAVE_zprobe_zoffset;
#endif
#if defined(POWER_OUTAGE_TEST)
int PowerInt = 6;
unsigned char PowerTestFlag = false;
@@ -94,7 +102,6 @@ char *ftostr32(const float &x)
_conv[6] = DIGIMOD(xx, 1);
return &_conv[1];
}
#endif
AnycubicTouchscreenClass::AnycubicTouchscreenClass()
@@ -151,7 +158,6 @@ setup_OutageTestPin();
}
#if ENABLED(KNUTWURST_MEGA_P_LASER)
PRINTER_STRUCT Laser_printer_st = {0};
BMP_HEAD st_bmp = {0};
@@ -910,6 +916,7 @@ void AnycubicTouchscreenClass::PrintList()
}
}
#endif
#ifdef SDSUPPORT
#if ENABLED(KNUTWURST_SPECIAL_MENU)
else if (card.isMounted())
@@ -1078,14 +1085,10 @@ void AnycubicTouchscreenClass::CheckHeaterError()
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("TFT Serial Debug: Hotend temperature abnormal... J20");
#endif
}
else
{
} else {
HeaterCheckCount++;
}
}
else
{
} else {
HeaterCheckCount = 0;
}
}
@@ -1167,9 +1170,7 @@ void AnycubicTouchscreenClass::StateHandler()
if (FilamentTestStatus)
{
TFTstate = ANYCUBIC_TFT_STATE_SDPAUSE;
}
else
{
} else {
// Pause because of "out of filament"
TFTstate = ANYCUBIC_TFT_STATE_SDPAUSE_OOF;
}
@@ -1247,8 +1248,7 @@ void AnycubicTouchscreenClass::FilamentRunout()
#endif
if (card.isPrinting())
{
ai3m_pause_state = 3;
; // set runout pause flag
ai3m_pause_state = 3; // set runout pause flag
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOPAIR(" DEBUG: AI3M Pause State: ", ai3m_pause_state);
SERIAL_EOL();
@@ -1285,7 +1285,6 @@ static boolean TFTcomment_mode = false;
void AnycubicTouchscreenClass::GetCommandFromTFT()
{
char *starpos = NULL;
while( HardwareSerial.available() > 0 && TFTbuflen < TFTBUFSIZE)
{
@@ -1304,7 +1303,6 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
{
// -------- START ERROR CORRECTION ----------
TFTcomment_mode = false; //for new command
if(strchr(TFTcmdbuffer[TFTbufindw], 'N') != NULL)
{
if(strchr(TFTcmdbuffer[TFTbufindw], '*') != NULL)
@@ -1324,18 +1322,14 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
return;
}
//if no errors, continue parsing
}
else
{
} else {
HARDWARE_SERIAL_ERROR_START;
HardwareSerial.flush();
serial3_count = 0;
return;
}
//if no errors, continue parsing
}
else // if we don't receive 'N' but still see '*'
{
} else { // if we don't receive 'N' but still see '*'
if((strchr(TFTcmdbuffer[TFTbufindw], '*') != NULL))
{
HARDWARE_SERIAL_ERROR_START;
@@ -1351,7 +1345,6 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
TFTstrchr_pointer = strchr(TFTcmdbuffer[TFTbufindw], 'A');
switch((int)((strtod(&TFTcmdbuffer[TFTbufindw][TFTstrchr_pointer - TFTcmdbuffer[TFTbufindw] + 1], NULL))))
{
case 0: //A0 GET HOTEND TEMP
HARDWARE_SERIAL_PROTOCOLPGM("A0V ");
HARDWARE_SERIAL_PROTOCOL(itostr3(int(thermalManager.degHotend(0) + 0.5)));
@@ -1410,15 +1403,13 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
if (card.isMounted())
{
HARDWARE_SERIAL_PROTOCOL(itostr3(card.percentDone()));
}
else
{
} else {
HARDWARE_SERIAL_PROTOCOLPGM("J02"); // J02 SD Card initilized
}
}
else
} else {
HARDWARE_SERIAL_PROTOCOLPGM("A6V ---");
HARDWARE_SERIAL_ENTER();
}
#endif
break;
case 7: //A7 GET PRINTING TIME
@@ -1434,19 +1425,15 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
HARDWARE_SERIAL_PROTOCOL(itostr2(time % 60));
HARDWARE_SERIAL_SPACE();
HARDWARE_SERIAL_PROTOCOLPGM("M");
}
else
{
} else {
HARDWARE_SERIAL_SPACE();
HARDWARE_SERIAL_PROTOCOLPGM("999:999");
}
HARDWARE_SERIAL_ENTER();
break;
}
break;
case 8: // A8 GET SD LIST
#ifdef SDSUPPORT
currentTouchscreenSelection[0] = 0;
#if DISABLED(KNUTWURST_SPECIAL_MENU_WO_SD)
if (!IS_SD_INSERTED())
@@ -1466,7 +1453,6 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
HARDWARE_SERIAL_PROTOCOLPGM("END"); // Filelist stop
HARDWARE_SERIAL_ENTER();
}
#endif
break;
case 9: // A9 pause sd print
@@ -1476,9 +1462,7 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
PausePrint();
HARDWARE_SERIAL_PROTOCOLPGM("J05");//j05 pausing
HARDWARE_SERIAL_ENTER();
}
else
{
} else {
ai3m_pause_state = 0;
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOPAIR(" DEBUG: AI3M Pause State: ", ai3m_pause_state);
@@ -1510,9 +1494,7 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
if ((card.isPrinting()) || (TFTstate == ANYCUBIC_TFT_STATE_SDOUTAGE))
{
StopPrint();
}
else
{
} else {
HARDWARE_SERIAL_PROTOCOLPGM("J16"); // J16 stop print
HARDWARE_SERIAL_ENTER();
TFTstate = ANYCUBIC_TFT_STATE_IDLE;
@@ -1532,11 +1514,9 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
if ((TFTstate != ANYCUBIC_TFT_STATE_SDOUTAGE))
{
starpos = (strchr(TFTstrchr_pointer + 4, '*'));
if (TFTstrchr_pointer[4] == '/')
{
strcpy(currentTouchscreenSelection, TFTstrchr_pointer + 5);
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOPAIR(" TFT Serial Debug: currentTouchscreenSelection: ",currentTouchscreenSelection);
SERIAL_EOL();
@@ -1545,9 +1525,7 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
else if (TFTstrchr_pointer[4] == '<')
{
strcpy(currentTouchscreenSelection, TFTstrchr_pointer + 4);
}
else
{
} else {
currentTouchscreenSelection[0] = 0;
#ifdef ANYCUBIC_TFT_DEBUG
@@ -1564,9 +1542,7 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("TFT Serial Debug: File open successful... J20");
#endif
}
else
{
} else {
HARDWARE_SERIAL_PROTOCOLPGM("J21"); // J21 Open failed
HARDWARE_SERIAL_ENTER();
#ifdef ANYCUBIC_TFT_DEBUG
@@ -1623,7 +1599,9 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
else if ((CodeSeen('C')) && (!planner.movesplanned()))
{
if ((current_position[Z_AXIS] < 10))
{
queue.inject_P(PSTR("G1 Z10")); //RASE Z AXIS
}
tempvalue = constrain(CodeValue(), 0, 275);
thermalManager.setTargetHotend(tempvalue, 0);
}
@@ -1646,9 +1624,9 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
temp = (CodeValue() * 255 / 100);
temp = constrain(temp, 0, 255);
thermalManager.set_fan_speed(0, temp);
}
else
} else {
thermalManager.set_fan_speed(0, 255);
}
HARDWARE_SERIAL_ENTER();
break;
case 19: // A19 stop stepper drivers
@@ -1668,9 +1646,7 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
if (CodeSeen('S'))
{
feedrate_percentage = constrain(CodeValue(), 40, 999);
}
else
{
} else {
HARDWARE_SERIAL_PROTOCOLPGM("A20V ");
HARDWARE_SERIAL_PROTOCOL(feedrate_percentage);
HARDWARE_SERIAL_ENTER();
@@ -1781,6 +1757,7 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
{
if ((current_position[Z_AXIS] < 10))
queue.inject_P(PSTR("G1 Z10")); // RAISE Z AXIS
thermalManager.setTargetBed(KNUTWURST_PRHEAT_BED_PLA);
thermalManager.setTargetHotend(KNUTWURST_PRHEAT_NOZZLE_PLA, 0);
HARDWARE_SERIAL_SUCC_START;
@@ -1792,6 +1769,7 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
{
if ((current_position[Z_AXIS] < 10))
queue.inject_P(PSTR("G1 Z10")); //RAISE Z AXIS
thermalManager.setTargetBed(KNUTWURST_PRHEAT_BED_ABS);
thermalManager.setTargetHotend(KNUTWURST_PRHEAT_NOZZLE_ABS, 0);
HARDWARE_SERIAL_SUCC_START;
@@ -1819,9 +1797,7 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
if (currentTouchscreenSelection[0] == 0)
{
card.mount();
}
else
{
} else {
if ((strcasestr(currentTouchscreenSelection, SM_DIR_UP_S) != NULL)
|| (strcasestr(currentTouchscreenSelection, SM_DIR_UP_L) != NULL))
{
@@ -1829,18 +1805,14 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
SERIAL_ECHOLNPGM("TFT Serial Debug: Directory UP (cd ..)");
#endif
card.cdup();
}
else
{
} else {
if (currentTouchscreenSelection[0] == '<')
{
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("TFT Serial Debug: Enter Special Menu");
#endif
HandleSpecialMenu();
}
else
{
} else {
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("TFT Serial Debug: Not a menu. Must be a directory!");
#endif
@@ -1856,7 +1828,6 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
}
}
}
currentTouchscreenSelection[0] = 0;
#endif
break;
@@ -1873,6 +1844,7 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
}
HARDWARE_SERIAL_ENTER();
break;
case 33: // A33 get version info
{
HARDWARE_SERIAL_PROTOCOLPGM("J33 ");
@@ -1889,84 +1861,130 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
* Chiron printer.
*/
//#define KNUTWURST_TFT_LEVELING
//#define AUTO_BED_LEVELING_BILINEAR
#if ENABLED(KNUTWURST_TFT_LEVELING)
#ifdef AUTO_BED_LEVELING_BILINEAR
case 29: // A29 bed grid read
{
unsigned char temp_x=0,temp_y=0;
if(CodeSeen('X'))temp_x=CodeValue();
if(CodeSeen('Y'))temp_y=CodeValue();
float Zvalue=bed_level_grid[temp_x][temp_y];
#ifdef AUTO_BED_LEVELING_BILINEAR
if(CodeSeen('X')) x = CodeValue();
if(CodeSeen('Y')) y = CodeValue();
float Zvalue = z_values[x][y];
Zvalue = Zvalue * 100;
refresh_bed_level();
set_bed_leveling_enabled(true);
if(!!card.isPrinting() && sdcardstartprintingflag == 0)
{
if (!all_axes_known())
{
queue.enqueue_now_P(PSTR("G28"));
} else {
destination[Z_AXIS] = (float)(5.0);
prepare_line_to_destination();
feedrate_mm_s = MMM_TO_MMS(3600.0f);
destination[X_AXIS] = _GET_MESH_X(x);
destination[Y_AXIS] = _GET_MESH_Y(y);
prepare_line_to_destination();
destination[Z_AXIS] = (float)(EXT_LEVEL_HIGH);
prepare_line_to_destination();
report_current_position();
}
}
HARDWARE_SERIAL_PROTOCOLPGM("A29V ");
HARDWARE_SERIAL_PROTOCOL(Zvalue);
HARDWARE_SERIAL_PROTOCOL(ftostr32(Zvalue)); // or better HARDWARE_SERIAL_PROTOCOLLN?
HARDWARE_SERIAL_ENTER();
#endif
}
break;
case 30://a30 auto leveling
{
if((planner.movesplanned())||(card.sdprinting))
{
case 30: // A30 auto leveling
#ifdef AUTO_BED_LEVELING_BILINEAR
if( (planner.movesplanned()) || (!card.isPrinting()) ) {
HARDWARE_SERIAL_PROTOCOLPGM("J24"); // forbid auto leveling
HARDWARE_SERIAL_ENTER();
} else {
HARDWARE_SERIAL_PROTOCOLPGM("J26"); // start auto leveling
HARDWARE_SERIAL_ENTER();
}
if(CodeSeen('S') )
{
Manual_Leveling=0x55;
enqueue_and_echo_commands_P(PSTR("G28\nG29"));
}
if(CodeSeen('S') ) {
queue.enqueue_now_P(PSTR("G28\nG29"));
}
#else
HARDWARE_SERIAL_PROTOCOLPGM("J24\r\n")); // forbid auto leveling
#endif
break;
case 31: //a31 zoffset set get or save
{
if(Manual_Leveling==0xaa)break;
case 31: // A31 zoffset set get or save
#ifdef AUTO_BED_LEVELING_BILINEAR
if(CodeSeen('S'))
{
float value = constrain(CodeValue(),-1.0,1.0);
NEW_zprobe_zoffset+=value;
for (uint8_t x = 0; x < ABL_GRID_POINTS_X; x++)
{
for (uint8_t y = 0; y < ABL_GRID_POINTS_Y; y++)
bed_level_grid[x][y] += value;
zprobe_zoffset += value;
for (x = 0; x < GRID_MAX_POINTS_X; x++) {
for (y = 0; y < GRID_MAX_POINTS_Y; y++) z_values[x][y] += value;
}
set_bed_leveling_enabled(true);
refresh_bed_level();
HARDWARE_SERIAL_PROTOCOLPGM("A31V ");
HARDWARE_SERIAL_PROTOCOL(NEW_zprobe_zoffset);
HARDWARE_SERIAL_ENTER();
write_to_lcd_f(zprobe_zoffset);
}
if(CodeSeen('G')) {HARDWARE_SERIAL_PROTOCOLPGM("A31V ");HARDWARE_SERIAL_PROTOCOL(NEW_zprobe_zoffset); HARDWARE_SERIAL_ENTER(); }
if(CodeSeen('D')) SaveAutoBedGridData();
if(CodeSeen('G'))
{
SAVE_zprobe_zoffset = zprobe_zoffset;
HARDWARE_SERIAL_PROTOCOLPGM("A31V ");
write_to_lcd_f(SAVE_zprobe_zoffset);
}
if(CodeSeen('D'))
{
SAVE_zprobe_zoffset = zprobe_zoffset;
settings.save();
set_bed_leveling_enabled(true);
refresh_bed_level();
}
HARDWARE_SERIAL_ENTER();
break;
#endif
break;
case 32: //a32 clean leveling beep flag
// {
// PointTestFlag=0;
// }
#ifdef AUTO_BED_LEVELING_BILINEAR
break;
case 34: //a34 bed grid write
{
uint8_t x_array=0,y_array=0,result=0;
if(Manual_Leveling==0xaa) break;
if(CodeSeen('X')) x_array=constrain(CodeValue(),0,ABL_GRID_POINTS_X);
if(CodeSeen('Y')) y_array=constrain(CodeValue(),0,ABL_GRID_POINTS_Y);
if(CodeSeen('V')) {float i=constrain(CodeValue()/100,-10,10); bed_level_grid[x_array][y_array] = i;}
if(CodeSeen('S')) SaveAutoBedGridData();
if(CodeSeen('C')) ReadAutoBedGridData(); // if click return(didn't choose save),needs restore bed grid data.
#ifdef AUTO_BED_LEVELING_BILINEAR
if(CodeSeen('X')) x = constrain(CodeValue(),0,GRID_MAX_POINTS_X);
if(CodeSeen('Y')) y = constrain(CodeValue(),0,GRID_MAX_POINTS_Y);
if(CodeSeen('V'))
{
//z_values[x][y] = (float)constrain(CodeValue()/100,-10,10);
float new_z_value = (float)constrain(CodeValue()/100,-10,10);
z_values[x][y] = new_z_value;
set_bed_leveling_enabled(true);
refresh_bed_level();
}
if(CodeSeen('S'))
{
refresh_bed_level();
set_bed_leveling_enabled(true);
settings.save();
}
if(CodeSeen('C'))
{
restore_z_values();
zprobe_zoffset = SAVE_zprobe_zoffset;
set_bed_leveling_enabled(true);
refresh_bed_level();
}
#endif
}
break;
case 35:{ //RESET AUTOBED DATE //M1000
case 35:
{ //RESET AUTOBED DATE //M1000
/*
float temp;
if(code_seen('S')) temp=code_value_float();
else temp=-3.5;
@@ -1986,12 +2004,12 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
SaveAutoBedGridData();
SERIAL_ECHOPGM("Done, Manual Leveling was actived!");
HARDWARE_SERIAL_ENTER();
*/
}
break;
case 36:// a36 M1001
{
if((planner.movesplanned())||(card.sdprinting)) //forbit auto leveling when the printer is moving
{ /*
if((planner.movesplanned())||(!card.isPrinting())) //forbit auto leveling when the printer is moving
{
HARDWARE_SERIAL_PROTOCOLPGM("J24");// forbid auto leveling
HARDWARE_SERIAL_ENTER();
@@ -2024,25 +2042,22 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
HARDWARE_SERIAL_PROTOCOLPGM("J26");//start auto leveling
HARDWARE_SERIAL_ENTER();
HARDWARE_SERIAL_PROTOCOLLN("J26");
*/
}
break;
#endif
#endif
#if ENABLED(KNUTWURST_MEGA_P_LASER)
case 34:// Continuous printing
{
en_continue = 1 ;}
en_continue = 1 ;
}
break;
case 35:// Continuous printing
{
en_continue = 0 ;}
en_continue = 0 ;
}
break;
case 36://A36
if(CodeSeen('S'))
{
@@ -2052,7 +2067,6 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
Laser_printer_st.pic_vector = 1;
else
Laser_printer_st.pic_vector = 0;
}
case 37:
if(CodeSeen('S'))//X
@@ -2064,7 +2078,6 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
else if(coorvalue == 1)
Laser_printer_st.pic_x_mirror = 1; //x
}
break;
case 38:
if(CodeSeen('S'))//A38
@@ -2073,9 +2086,7 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
coorvalue=CodeValueInt();
Laser_printer_st.pic_laser_time = coorvalue;
}
break;
case 39:
if(CodeSeen('S'))//A39
{
@@ -2084,9 +2095,7 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
Laser_printer_st.laser_height = coorvalue;
HARDWARE_SERIAL_PROTOCOL("laser_height = ");
HARDWARE_SERIAL_PROTOCOLLN(Laser_printer_st.laser_height);
}
break;
case 40:
if(CodeSeen('S'))//A40
@@ -2095,19 +2104,17 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
coorvalue=CodeValue();
Laser_printer_st.pic_pixel_distance = coorvalue;
}
break;
case 41:
if(CodeSeen('S'))//
if(CodeSeen('S'))
{
float coorvalue;
coorvalue=CodeValue();
Laser_printer_st.x_offset = coorvalue;
}
break;
case 42:
if(CodeSeen('S'))//
if(CodeSeen('S'))
{
float coorvalue;
coorvalue=CodeValue();
@@ -2123,66 +2130,63 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
if(coorvalue == 0)
Laser_printer_st.pic_y_mirror = 0;
else if(coorvalue == 1)
Laser_printer_st.pic_y_mirror = 1; //
Laser_printer_st.pic_y_mirror = 1;
}
break;
case 44:
send_laser_param();//
break;
case 49:// A49
{
laser_on_off = 0;
WRITE(HEATER_0_PIN, 0);
}
break;
case 50:// A50
{
if( laser_on_off == 0)
{
laser_on_off = 1;
else
{ laser_on_off = 0;
} else {
laser_on_off = 0;
WRITE(HEATER_0_PIN, 0);
}
}
break;
case 51:
{
if(CodeSeen('H'))
{
enqueue_and_echo_commands_P(PSTR("G1 Z5 F500"));
enqueue_and_echo_commands_P(PSTR("G1 X30 Y30 F5000"));
enqueue_and_echo_commands_P(PSTR("G1 Z0.15 F300"));
queue.enqueue_now_P(PSTR("G1 Z5 F500"));
queue.enqueue_now_P(PSTR("G1 X30 Y30 F5000"));
queue.enqueue_now_P(PSTR("G1 Z0.15 F300"));
}
else if(CodeSeen('I'))
{
enqueue_and_echo_commands_P(PSTR("G1 Z5 F500"));
enqueue_and_echo_commands_P(PSTR("G1 X190 Y30 F5000"));
enqueue_and_echo_commands_P(PSTR("G1 Z0.15 F300"));
queue.enqueue_now_P(PSTR("G1 Z5 F500"));
queue.enqueue_now_P(PSTR("G1 X190 Y30 F5000"));
queue.enqueue_now_P(PSTR("G1 Z0.15 F300"));
}
else if(CodeSeen('J'))
{
enqueue_and_echo_commands_P(PSTR("G1 Z5 F500"));
enqueue_and_echo_commands_P(PSTR("G1 X190 Y190 F5000"));
enqueue_and_echo_commands_P(PSTR("G1 Z0.15 F300"));
queue.enqueue_now_P(PSTR("G1 Z5 F500"));
queue.enqueue_now_P(PSTR("G1 X190 Y190 F5000"));
queue.enqueue_now_P(PSTR("G1 Z0.15 F300"));
}
else if(CodeSeen('K'))
{
enqueue_and_echo_commands_P(PSTR("G1 Z5 F500"));
enqueue_and_echo_commands_P(PSTR("G1 X30 Y190 F5000"));
enqueue_and_echo_commands_P(PSTR("G1 Z0.15 F300"));
queue.enqueue_now_P(PSTR("G1 Z5 F500"));
queue.enqueue_now_P(PSTR("G1 X30 Y190 F5000"));
queue.enqueue_now_P(PSTR("G1 Z0.15 F300"));
}
else if(CodeSeen('L'))
{
enqueue_and_echo_commands_P(PSTR("G1 X100 Y100 Z50 F5000"));
queue.enqueue_now_P(PSTR("G1 X100 Y100 Z50 F5000"));
}
}
break;
#endif
default:
break;
}
@@ -2213,23 +2217,23 @@ void prepare_laser_print()
if(laser_print_steps == 0)
{
cvalue[0]= 0;
while (planner.blocks_queued());//<2F>ȴ<EFBFBD><C8B4>˶<EFBFBD>ֹͣ
enqueue_and_echo_commands_P(PSTR("G28"));//<2F>ȹ<EFBFBD><C8B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6>߶<EFBFBD>
while (planner.blocks_queued());
queue.enqueue_now_P(PSTR("G28"));
sprintf_P(cvalue,PSTR("G1 Z%i F500"),(int)Laser_printer_st.laser_height);
SERIAL_PROTOCOLLN(cvalue);
enqueue_and_echo_command_now(cvalue);//<2F>˶<EFBFBD><CBB6><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6>߶<EFBFBD>
enqueue_and_echo_command_now(cvalue);
laser_print_steps =1;
times = 120000;
}
else if(laser_print_steps==1)
{
if(planner.blocks_queued())return;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD>?<3F>򷵻<EFBFBD>
if(planner.blocks_queued())return;
laser_print_steps =2;
}
else if(laser_print_steps==2)
{
Laset_print_picture( );//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
Laset_print_picture( );
laser_print_steps=0;
card.printingHasFinished();
card.checkautostart(true);
@@ -2324,5 +2328,30 @@ void PowerKill()
#endif
}
#if ENABLED(KNUTWURST_TFT_LEVELING)
void restore_z_values() {
uint16_t size = z_values_size;
int pos = z_values_index;
uint8_t* value = (uint8_t*)&z_values;
do {
uint8_t c = eeprom_read_byte((unsigned char*)pos);
*value = c;
pos++;
value++;
} while (--size);
}
void setupMyZoffset() {
#if ENABLED(AUTO_BED_LEVELING_BILINEAR)
SERIAL_ECHOPAIR("MEANL_L:", 0x55);
SAVE_zprobe_zoffset = zprobe_zoffset;
#else
SERIAL_ECHOPAIR("MEANL_L:", 0xaa);
zprobe_zoffset = Z_PROBE_OFFSET_FROM_EXTRUDER;
#endif
}
#endif
AnycubicTouchscreenClass AnycubicTouchscreen;
#endif

View File

@@ -287,6 +287,12 @@ private:
int FilamentRunoutCounter = 0;
#endif
#if ENABLED(KNUTWURST_TFT_LEVELING)
extern int z_values_index;
extern int z_values_size;
extern float SAVE_zprobe_zoffset;
#endif
#if ENABLED(KNUTWURST_MEGA_P_LASER)

View File

@@ -51,6 +51,7 @@
#include "stepper.h"
#include "temperature.h"
#include "../lcd/ultralcd.h"
#include "../lcd/anycubic_touchscreen.h"
#include "../core/language.h"
#include "../libs/vector_3.h" // for matrix_3x3
#include "../gcode/gcode.h"
@@ -718,6 +719,11 @@ void MarlinSettings::postprocess() {
EEPROM_WRITE(bilinear_grid_spacing);
EEPROM_WRITE(bilinear_start);
#if ENABLED(KNUTWURST_TFT_LEVELING)
z_values_index = eeprom_index;
z_values_size = sizeof(z_values);
#endif
#if ENABLED(AUTO_BED_LEVELING_BILINEAR)
EEPROM_WRITE(z_values); // 9-256 floats
#else