From 241e32e691d5cd4d2010b782157aea3ab906f0a0 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 22 Feb 2017 18:00:41 +0100 Subject: [PATCH] Fixed "Shift out of range" bug in xyz calibration, status on demand added, temp reading disable in farm mode --- Firmware/Configuration.h | 2 +- Firmware/Marlin.h | 1 + Firmware/Marlin_main.cpp | 65 ++++---- Firmware/mesh_bed_calibration.cpp | 77 ++++++++- Firmware/ultralcd.cpp | 257 ++++++++++++++++++++++++++++++ Firmware/ultralcd.h | 2 + 6 files changed, 368 insertions(+), 36 deletions(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 27a399130..eebf33c96 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -5,7 +5,7 @@ #include "Configuration_prusa.h" // Firmware version -#define FW_version "3.0.10" +#define FW_version "3.0.10.1" #define FW_PRUSA3D_MAGIC "PRUSA3DFW" #define FW_PRUSA3D_MAGIC_LEN 10 diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index adcf8f201..99c9a5cb4 100644 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -292,6 +292,7 @@ extern unsigned long kicktime; extern unsigned long total_filament_used; void save_statistics(unsigned long _total_filament_used, unsigned long _total_print_time); extern unsigned int heating_status; +extern unsigned int status_number; extern unsigned int heating_status_counter; extern bool custom_message; extern unsigned int custom_message_type; diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 41328c2e1..1e686664f 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -267,6 +267,7 @@ unsigned char lang_selected = 0; bool prusa_sd_card_upload = false; +unsigned int status_number = 0; unsigned long total_filament_used; unsigned int heating_status; @@ -1958,7 +1959,10 @@ void process_commands() int8_t SilentMode; #endif if(code_seen("PRUSA")){ - if (code_seen("fn")) { + if (code_seen("PRN")) { + MYSERIAL.println(status_number); + + }else if (code_seen("fn")) { if (farm_mode) { MYSERIAL.println(farm_no); } @@ -1966,7 +1970,7 @@ void process_commands() MYSERIAL.println("Not in farm mode."); } - }else if (code_seen("fv")) { + }else if (code_seen("fv")) { // get file version #ifdef SDSUPPORT card.openFile(strchr_pointer + 3,true); @@ -2017,7 +2021,7 @@ void process_commands() }else if(code_seen("Y")) { //filaments adjustment at the beginning of print (for SNMM) #ifdef SNMM int extr; - SilentMode = eeprom_read_byte((uint8_t*)EEPROM_SILENT); //is silent mode or loud mode set + SilentMode = eeprom_read_byte((uint8_t*)EEPROM_SILENT); //is e or loud mode set lcd_implementation_clear(); lcd_display_message_fullscreen_P(MSG_FIL_ADJUSTING); current_position[Z_AXIS] = 100; @@ -3917,22 +3921,24 @@ Sigma_Exit: #endif //TEMP_RESIDENCY_TIME if( (millis() - codenum) > 1000UL ) { //Print Temp Reading and remaining time every 1 second while heating up/cooling down - SERIAL_PROTOCOLPGM("T:"); - SERIAL_PROTOCOL_F(degHotend(tmp_extruder),1); - SERIAL_PROTOCOLPGM(" E:"); - SERIAL_PROTOCOL((int)tmp_extruder); - - #ifdef TEMP_RESIDENCY_TIME - SERIAL_PROTOCOLPGM(" W:"); - if(residencyStart > -1) - { - codenum = ((TEMP_RESIDENCY_TIME * 1000UL) - (millis() - residencyStart)) / 1000UL; - SERIAL_PROTOCOLLN( codenum ); - } - else - { - SERIAL_PROTOCOLLN( "?" ); - } + if (!farm_mode) { + SERIAL_PROTOCOLPGM("T:"); + SERIAL_PROTOCOL_F(degHotend(tmp_extruder), 1); + SERIAL_PROTOCOLPGM(" E:"); + SERIAL_PROTOCOL((int)tmp_extruder); + + #ifdef TEMP_RESIDENCY_TIME + SERIAL_PROTOCOLPGM(" W:"); + if (residencyStart > -1) + { + codenum = ((TEMP_RESIDENCY_TIME * 1000UL) - (millis() - residencyStart)) / 1000UL; + SERIAL_PROTOCOLLN(codenum); + } + else + { + SERIAL_PROTOCOLLN("?"); + } + } #else SERIAL_PROTOCOLLN(""); #endif @@ -3984,15 +3990,18 @@ Sigma_Exit: { if(( millis() - codenum) > 1000 ) //Print Temp Reading every 1 second while heating up. { - float tt=degHotend(active_extruder); - SERIAL_PROTOCOLPGM("T:"); - SERIAL_PROTOCOL(tt); - SERIAL_PROTOCOLPGM(" E:"); - SERIAL_PROTOCOL((int)active_extruder); - SERIAL_PROTOCOLPGM(" B:"); - SERIAL_PROTOCOL_F(degBed(),1); - SERIAL_PROTOCOLLN(""); - codenum = millis(); + if (!farm_mode) { + float tt = degHotend(active_extruder); + SERIAL_PROTOCOLPGM("T:"); + SERIAL_PROTOCOL(tt); + SERIAL_PROTOCOLPGM(" E:"); + SERIAL_PROTOCOL((int)active_extruder); + SERIAL_PROTOCOLPGM(" B:"); + SERIAL_PROTOCOL_F(degBed(), 1); + SERIAL_PROTOCOLLN(""); + } + codenum = millis(); + } manage_heater(); manage_inactivity(); diff --git a/Firmware/mesh_bed_calibration.cpp b/Firmware/mesh_bed_calibration.cpp index 78d099209..38eb41c69 100644 --- a/Firmware/mesh_bed_calibration.cpp +++ b/Firmware/mesh_bed_calibration.cpp @@ -412,18 +412,55 @@ BedSkewOffsetDetectionResultType calculate_machine_skew_and_offset_LS( cntr[1] = 0.f; float wx = 0.f; float wy = 0.f; - for (int8_t i = 0; i < 9; ++ i) { + for (int8_t i = 0; i < npts; ++ i) { float x = vec_x[0] * measured_pts[i * 2] + vec_y[0] * measured_pts[i * 2 + 1]; float y = vec_x[1] * measured_pts[i * 2] + vec_y[1] * measured_pts[i * 2 + 1]; float w = point_weight_x(i, y); - cntr[0] += w * (pgm_read_float(true_pts + i * 2) - x); - wx += w; + cntr[0] += w * (pgm_read_float(true_pts + i * 2) - x); + wx += w; + if (verbosity_level >= 20) { + MYSERIAL.print(i); + SERIAL_ECHOLNPGM(""); + SERIAL_ECHOLNPGM("Weight_x:"); + MYSERIAL.print(w); + SERIAL_ECHOLNPGM(""); + SERIAL_ECHOLNPGM("cntr[0]:"); + MYSERIAL.print(cntr[0]); + SERIAL_ECHOLNPGM(""); + SERIAL_ECHOLNPGM("wx:"); + MYSERIAL.print(wx); + } w = point_weight_y(i, y); - cntr[1] += w * (pgm_read_float(true_pts + i * 2 + 1) - y); - wy += w; - } + cntr[1] += w * (pgm_read_float(true_pts + i * 2 + 1) - y); + wy += w; + + if (verbosity_level >= 20) { + SERIAL_ECHOLNPGM(""); + SERIAL_ECHOLNPGM("Weight_y:"); + MYSERIAL.print(w); + SERIAL_ECHOLNPGM(""); + SERIAL_ECHOLNPGM("cntr[1]:"); + MYSERIAL.print(cntr[1]); + SERIAL_ECHOLNPGM(""); + SERIAL_ECHOLNPGM("wy:"); + MYSERIAL.print(wy); + SERIAL_ECHOLNPGM(""); + SERIAL_ECHOLNPGM(""); + } + } cntr[0] /= wx; cntr[1] /= wy; + if (verbosity_level >= 20) { + SERIAL_ECHOLNPGM(""); + SERIAL_ECHOLNPGM("Final cntr values:"); + SERIAL_ECHOLNPGM("cntr[0]:"); + MYSERIAL.print(cntr[0]); + SERIAL_ECHOLNPGM(""); + SERIAL_ECHOLNPGM("cntr[1]:"); + MYSERIAL.print(cntr[1]); + SERIAL_ECHOLNPGM(""); + } + } #endif @@ -605,18 +642,24 @@ void world2machine_initialize() // Length of the vec_x shall be close to unity. float l = sqrt(vec_x[0] * vec_x[0] + vec_x[1] * vec_x[1]); if (l < 0.9 || l > 1.1) { + SERIAL_ECHOLNPGM("X vector length:"); + MYSERIAL.println(l); SERIAL_ECHOLNPGM("Invalid bed correction matrix. Length of the X vector out of range."); reset = true; } // Length of the vec_y shall be close to unity. l = sqrt(vec_y[0] * vec_y[0] + vec_y[1] * vec_y[1]); if (l < 0.9 || l > 1.1) { - SERIAL_ECHOLNPGM("Invalid bed correction matrix. Length of the X vector out of range."); + SERIAL_ECHOLNPGM("Y vector length:"); + MYSERIAL.println(l); + SERIAL_ECHOLNPGM("Invalid bed correction matrix. Length of the Y vector out of range."); reset = true; } // Correction of the zero point shall be reasonably small. l = sqrt(cntr[0] * cntr[0] + cntr[1] * cntr[1]); if (l > 15.f) { + SERIAL_ECHOLNPGM("Zero point correction:"); + MYSERIAL.println(l); SERIAL_ECHOLNPGM("Invalid bed correction matrix. Shift out of range."); reset = true; } @@ -1654,7 +1697,27 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level eeprom_update_float((float*)(EEPROM_BED_CALIBRATION_VEC_Y +0), vec_y[0]); eeprom_update_float((float*)(EEPROM_BED_CALIBRATION_VEC_Y +4), vec_y[1]); #endif + if (verbosity_level >= 10) { + // Length of the vec_x + float l = sqrt(vec_x[0] * vec_x[0] + vec_x[1] * vec_x[1]); + SERIAL_ECHOLNPGM("X vector length:"); + MYSERIAL.println(l); + // Length of the vec_y + l = sqrt(vec_y[0] * vec_y[0] + vec_y[1] * vec_y[1]); + SERIAL_ECHOLNPGM("Y vector length:"); + MYSERIAL.println(l); + // Zero point correction + l = sqrt(cntr[0] * cntr[0] + cntr[1] * cntr[1]); + SERIAL_ECHOLNPGM("Zero point correction:"); + MYSERIAL.println(l); + + // vec_x and vec_y shall be nearly perpendicular. + l = vec_x[0] * vec_y[0] + vec_x[1] * vec_y[1]; + SERIAL_ECHOLNPGM("Perpendicularity"); + MYSERIAL.println(fabs(l)); + SERIAL_ECHOLNPGM("Saving bed calibration vectors to EEPROM"); + } // Correct the current_position to match the transformed coordinate system after world2machine_rotation_and_skew and world2machine_shift were set. world2machine_update_current(); diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index c5b132ab7..c0bb84784 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -1874,6 +1874,7 @@ void lcd_diag_show_end_stops() void prusa_statistics(int _message) { + switch (_message) { @@ -1883,6 +1884,7 @@ void prusa_statistics(int _message) { { SERIAL_ECHO("{"); prusa_stat_printerstatus(4); + status_number = 4; prusa_stat_printinfo(); SERIAL_ECHOLN("}"); } @@ -1890,6 +1892,7 @@ void prusa_statistics(int _message) { { SERIAL_ECHO("{"); prusa_stat_printerstatus(1); + status_number = 1; SERIAL_ECHOLN("}"); } break; @@ -1898,6 +1901,7 @@ void prusa_statistics(int _message) { farm_status = 2; SERIAL_ECHO("{"); prusa_stat_printerstatus(2); + status_number = 2; SERIAL_ECHOLN("}"); farm_timer = 1; break; @@ -1906,6 +1910,7 @@ void prusa_statistics(int _message) { farm_status = 3; SERIAL_ECHO("{"); prusa_stat_printerstatus(3); + status_number = 3; SERIAL_ECHOLN("}"); farm_timer = 1; @@ -1914,12 +1919,14 @@ void prusa_statistics(int _message) { farm_status = 4; SERIAL_ECHO("{"); prusa_stat_printerstatus(4); + status_number = 4; SERIAL_ECHOLN("}"); } else { SERIAL_ECHO("{"); prusa_stat_printerstatus(3); + status_number = 3; SERIAL_ECHOLN("}");; } farm_timer = 1; @@ -1938,14 +1945,17 @@ void prusa_statistics(int _message) { break; case 6: // print done SERIAL_ECHOLN("{[PRN:8]}"); + status_number = 8; farm_timer = 2; break; case 7: // print done - stopped SERIAL_ECHOLN("{[PRN:9]}"); + status_number = 9; farm_timer = 2; break; case 8: // printer started SERIAL_ECHO("{[PRN:0][PFN:"); + status_number = 0; SERIAL_ECHO(farm_no); SERIAL_ECHOLN("]}"); farm_timer = 2; @@ -1963,6 +1973,7 @@ void prusa_statistics(int _message) { break; case 22: // waiting for filament change SERIAL_ECHOLN("{[PRN:5]}"); + status_number = 5; break; case 90: // Error - Thermal Runaway @@ -3166,6 +3177,7 @@ static void lcd_main_menu() MENU_ITEM(submenu, MSG_UNLOAD_FILAMENT, fil_unload_menu); MENU_ITEM(submenu, MSG_CHANGE_EXTR, change_extr_menu); #endif + //MENU_ITEM(function, PSTR("belt test"), belt_test); MENU_ITEM(submenu, MSG_SETTINGS, lcd_settings_menu); if(!isPrintPaused) MENU_ITEM(submenu, MSG_MENU_CALIBRATION, lcd_calibration_menu); } @@ -3551,6 +3563,251 @@ menu_edit_type(float, float52, ftostr52, 100) menu_edit_type(unsigned long, long5, ftostr5, 0.01) +static void belt_test() { + + + /*lcd_update_enable(false); + float coordinate[2] = { 253, 215.5 }; + float max = 10; + float step = 0.5; //mm + float change_belt = 2.5; //mm + float excellent = 1; + + //set motor current higherdigipot_current(0, 850); //set motor current higher + //current_position[Z_AXIS] += 15; + //plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], 50, active_extruder); + + for (int j = 0; j < 2; j++) { + lcd_implementation_clear(); + j == 0 ? lcd_printPGM(PSTR("Testing X belt")) : lcd_printPGM(PSTR("Testing Y belt")); + for (int i = 0; i < max*(1 / step); i++) { + + if (i == 0) { + current_position[j] += coordinate[j] + max; + j == 0 ? digipot_current(0, 130):digipot_current(0, 60); + } + else { + current_position[j] += ((float)i - 1.f)*step; + } + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], 50, active_extruder); + st_synchronize(); + digipot_current(0, 500); + if (i == 0) current_position[j] -= coordinate[j]; + else current_position[j] -= (float)i * step; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], 50, active_extruder); + + + st_synchronize(); + if ((READ(Y_MIN_PIN) ^ Y_MIN_ENDSTOP_INVERTING == 1) || (READ(X_MIN_PIN) ^ X_MIN_ENDSTOP_INVERTING == 1)) { + //lcd_display_message_fullscreen_P(PSTR("Endstop hit")); + lcd.setCursor(0, 0); + if (i < (excellent / step)) lcd_printPGM(PSTR("Excelent condition ")); //1 mm + else if (i < (change_belt / step)) lcd_printPGM(PSTR("Belt ok ")); //2.5 mm + else lcd_printPGM(PSTR("Change the belt ")); //>2.5mm + + delay_keep_alive(5000); + + + + i = max*(1 / step); + } + else { + lcd.setCursor((change_belt / step), 1); lcd_printPGM(PSTR("|")); + lcd.setCursor((change_belt / step), 2); lcd_printPGM(PSTR("|")); + lcd.setCursor((change_belt / step), 3); lcd_printPGM(PSTR("|")); + + lcd.setCursor(i, 2); + if (i == (change_belt / step)) lcd_printPGM(PSTR("+")); + else lcd_printPGM(PSTR("-")); + + } + + + } + } + enquecommand_P(PSTR("G28 W")); + lcd_update_enable(true); + digipot_current(0, 800); + lcd_update(2); + return;*/ + + /* + 13.f - BED_ZERO_REF_X, 6.4f - BED_ZERO_REF_Y, + 115.f - BED_ZERO_REF_X, 6.4f - BED_ZERO_REF_Y, + 216.f - BED_ZERO_REF_X, 6.4f - BED_ZERO_REF_Y, + + 216.f - BED_ZERO_REF_X, 104.4f - BED_ZERO_REF_Y, + 115.f - BED_ZERO_REF_X, 104.4f - BED_ZERO_REF_Y, + 13.f - BED_ZERO_REF_X, 104.4f - BED_ZERO_REF_Y, + + 13.f - BED_ZERO_REF_X, 202.4f - BED_ZERO_REF_Y, + 115.f - BED_ZERO_REF_X, 202.4f - BED_ZERO_REF_Y, + 216.f - BED_ZERO_REF_X, 202.4f - BED_ZERO_REF_Y + + + #define BED_ZERO_REF_X (- 22.f + X_PROBE_OFFSET_FROM_EXTRUDER) + #define BED_ZERO_REF_Y (- 0.6f + Y_PROBE_OFFSET_FROM_EXTRUDER) + + #define X_PROBE_OFFSET_FROM_EXTRUDER 23 // Z probe to nozzle X offset: -left +right + #define Y_PROBE_OFFSET_FROM_EXTRUDER 9 // Z probe to nozzle Y offset: -front +behind + #define Z_PROBE_OFFSET_FROM_EXTRUDER -0.4 + + */ + +/* + + lcd_update_enable(false); + float coordinate[2] = { 210, 190 }; + float max = 10; + float step = 0.5; //mm + float change_belt = 2.5; //mm + float excellent = 1; + float safety_a = 20; + + //set motor current higherdigipot_current(0, 850); //set motor current higher + current_position[Z_AXIS] -= 0.4; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], 50, active_extruder); + st_synchronize(); + for (int j = 0; j < 2; j++) { + lcd_implementation_clear(); + j == 0 ? lcd_printPGM(PSTR("Testing X belt")) : lcd_printPGM(PSTR("Testing Y belt")); + for (int i = 0; i < max*(1 / step); i++) { + + if (i == 0) { + current_position[j] += coordinate[j] - safety_a; + //j == 0 ? digipot_current(0, 130):digipot_current(0, 60); + } + else { + current_position[j] += ((float)i - 1.f)*step; + } + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], 50, active_extruder); + st_synchronize(); + if (i == 0) { + for (int k = 0; k < (safety_a + max)*(1 / step); k++) { + current_position[j] += step ; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], 50, active_extruder); + st_synchronize(); + if ((READ(Z_MIN_PIN) ^ Z_MIN_ENDSTOP_INVERTING == 1)) { + k = 2000; + } + } + } + //digipot_current(0, 500); + if (i == 0) current_position[j] -= coordinate[j]; + else current_position[j] -= (float)i * step; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], 50, active_extruder); + + + st_synchronize(); + if ((READ(Y_MIN_PIN) ^ Y_MIN_ENDSTOP_INVERTING == 1) || (READ(X_MIN_PIN) ^ X_MIN_ENDSTOP_INVERTING == 1)) { + //lcd_display_message_fullscreen_P(PSTR("Endstop hit")); + lcd.setCursor(0, 0); + //if (i < (excellent / step)) lcd_printPGM(PSTR("Change it ")); //1 mm + if (i < (change_belt / step)) lcd_printPGM(PSTR("Change the belt ")); //2.5 mm + else lcd_printPGM(PSTR("Belt ok ")); //>2.5mm + + delay_keep_alive(5000); + current_position[j] += 14; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], 50, active_extruder); + st_synchronize(); + + i = max*(1 / step); + } + else { + lcd.setCursor((change_belt / step), 1); lcd_printPGM(PSTR("|")); + lcd.setCursor((change_belt / step), 2); lcd_printPGM(PSTR("|")); + lcd.setCursor((change_belt / step), 3); lcd_printPGM(PSTR("|")); + + lcd.setCursor(i, 2); + if (i == (change_belt / step)) lcd_printPGM(PSTR("+")); + else lcd_printPGM(PSTR("-")); + + } + + + } + } + enquecommand_P(PSTR("G28 W")); + lcd_update_enable(true); + //digipot_current(0, 800); + lcd_update(2); + return;*/ + +/* + +lcd_update_enable(false); +float coordinate[2] = { 210, 190 }; +float max = 10; +float step = 0.5; //mm +float change_belt = 2.5; //mm +float excellent = 1; +float safety_a = 20; + +//set motor current higherdigipot_current(0, 850); //set motor current higher +current_position[Z_AXIS] -= 0.4; +plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], 50, active_extruder); +st_synchronize(); +for (int j = 0; j < 2; j++) { + lcd_implementation_clear(); + j == 0 ? lcd_printPGM(PSTR("Testing X belt")) : lcd_printPGM(PSTR("Testing Y belt")); + current_position[j] += coordinate[j] - safety_a; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], 50, active_extruder); + st_synchronize(); + for (int k = 0; k < (safety_a + max)*(1 / step); k++) { + current_position[j] += step; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], 50, active_extruder); + st_synchronize(); + if ((READ(Z_MIN_PIN) ^ Z_MIN_ENDSTOP_INVERTING == 1)) { + k = 2000; + } + } + } + current_position[j] -= coordinate[j]; + + + else current_position[j] -= (float)i * step; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], 50, active_extruder); + + + st_synchronize(); + if ((READ(Y_MIN_PIN) ^ Y_MIN_ENDSTOP_INVERTING == 1) || (READ(X_MIN_PIN) ^ X_MIN_ENDSTOP_INVERTING == 1)) { + //lcd_display_message_fullscreen_P(PSTR("Endstop hit")); + lcd.setCursor(0, 0); + //if (i < (excellent / step)) lcd_printPGM(PSTR("Change it ")); //1 mm + if (i < (change_belt / step)) lcd_printPGM(PSTR("Change the belt ")); //2.5 mm + else lcd_printPGM(PSTR("Belt ok ")); //>2.5mm + + delay_keep_alive(5000); + current_position[j] += 14; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], 50, active_extruder); + st_synchronize(); + + i = max*(1 / step); + } + else { + lcd.setCursor((change_belt / step), 1); lcd_printPGM(PSTR("|")); + lcd.setCursor((change_belt / step), 2); lcd_printPGM(PSTR("|")); + lcd.setCursor((change_belt / step), 3); lcd_printPGM(PSTR("|")); + + lcd.setCursor(i, 2); + if (i == (change_belt / step)) lcd_printPGM(PSTR("+")); + else lcd_printPGM(PSTR("-")); + + } + + + } +} +enquecommand_P(PSTR("G28 W")); +lcd_update_enable(true); +//digipot_current(0, 800); +lcd_update(2); +return; + +*/ + +} + static void lcd_selftest() { int _progress = 0; diff --git a/Firmware/ultralcd.h b/Firmware/ultralcd.h index a5efbc2b5..50e0be298 100644 --- a/Firmware/ultralcd.h +++ b/Firmware/ultralcd.h @@ -31,6 +31,8 @@ void lcd_mylang(); bool lcd_detected(void); + static void belt_test(); + static void lcd_selftest(); static bool lcd_selfcheck_endstops(); static bool lcd_selfcheck_axis(int _axis, int _travel);