diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index 29e1289f..f81565a1 100644 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -395,6 +395,10 @@ extern void print_world_coordinates(); extern void print_physical_coordinates(); extern void print_mesh_bed_leveling_table(); +#ifdef PAT9125 +extern void fsensor_init(); +#endif //PAT9125 + #ifdef HOST_KEEPALIVE_FEATURE // States for managing Marlin and host communication diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 3d8b2226..62f964ec 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -917,28 +917,12 @@ void setup() #endif //TMC2130 #ifdef PAT9125 - int pat9125 = pat9125_init(PAT9125_XRES, PAT9125_YRES); - printf_P(PSTR("PAT9125_init:%d\n"), pat9125); - uint8_t fsensor = eeprom_read_byte((uint8_t*)EEPROM_FSENSOR); - if (!pat9125) - { - fsensor = 0; //disable sensor - fsensor_not_responding = true; - } - puts_P(PSTR("FSensor ")); - if (fsensor) - { - puts_P(PSTR("ENABLED\n")); - fsensor_enable(); - } - else - { - puts_P(PSTR("DISABLED\n")); - fsensor_disable(); - } + + fsensor_init(); #endif //PAT9125 + st_init(); // Initialize stepper, this enables interrupts! setup_photpin(); @@ -1207,6 +1191,31 @@ void setup() wdt_enable(WDTO_4S); } +#ifdef PAT9125 +void fsensor_init() { + int pat9125 = pat9125_init(PAT9125_XRES, PAT9125_YRES); + printf_P(PSTR("PAT9125_init:%d\n"), pat9125); + uint8_t fsensor = eeprom_read_byte((uint8_t*)EEPROM_FSENSOR); + if (!pat9125) + { + fsensor = 0; //disable sensor + fsensor_not_responding = true; + } + puts_P(PSTR("FSensor ")); + if (fsensor) + { + puts_P(PSTR("ENABLED\n")); + fsensor_enable(); + } + else + { + puts_P(PSTR("DISABLED\n")); + fsensor_disable(); + } +} + +#endif //PAT9125 + void trace(); #define CHUNK_SIZE 64 // bytes diff --git a/Firmware/fsensor.cpp b/Firmware/fsensor.cpp index 5edec1d8..64ac1a0b 100644 --- a/Firmware/fsensor.cpp +++ b/Firmware/fsensor.cpp @@ -47,6 +47,14 @@ uint16_t fsensor_autoload_y = 0; uint8_t fsensor_autoload_c = 0; uint32_t fsensor_autoload_last_millis = 0; +void fsensor_block() +{ + fsensor_enabled = false; +} + +void fsensor_unblock() { + fsensor_enabled = (eeprom_read_byte((uint8_t*)EEPROM_FSENSOR) == 0x01); +} bool fsensor_enable() { diff --git a/Firmware/fsensor.h b/Firmware/fsensor.h index ee02f16f..0c5543bc 100644 --- a/Firmware/fsensor.h +++ b/Firmware/fsensor.h @@ -7,6 +7,10 @@ extern void fsensor_stop_and_save_print(); extern void fsensor_restore_print_and_continue(); +//temporarily enable/disable without writing to eeprom +extern void fsensor_block(); +extern void fsensor_unblock(); + //enable/disable extern bool fsensor_enable(); extern void fsensor_disable(); diff --git a/Firmware/language_all.cpp b/Firmware/language_all.cpp index 4a50a301..9dbaa8f7 100644 --- a/Firmware/language_all.cpp +++ b/Firmware/language_all.cpp @@ -626,6 +626,13 @@ const char * const MSG_FILAMENT_LOADING_T3_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_FILAMENT_LOADING_T3_CZ }; +const char MSG_FILAMENT_SENSOR_EN[] PROGMEM = "Filament sensor"; +const char MSG_FILAMENT_SENSOR_CZ[] PROGMEM = "Senzor filamentu"; +const char * const MSG_FILAMENT_SENSOR_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_FILAMENT_SENSOR_EN, + MSG_FILAMENT_SENSOR_CZ +}; + const char MSG_FILE_CNT_EN[] PROGMEM = "Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."; const char MSG_FILE_CNT_CZ[] PROGMEM = "Nektere soubory nebudou setrideny. Maximalni pocet souboru pro setrideni je 100."; const char * const MSG_FILE_CNT_LANG_TABLE[LANG_NUM] PROGMEM = { @@ -1579,6 +1586,13 @@ const char * const MSG_SELFTEST_CHECK_ENDSTOPS_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_SELFTEST_CHECK_ENDSTOPS_CZ }; +const char MSG_SELFTEST_CHECK_FSENSOR_EN[] PROGMEM = "Checking sensors "; +const char MSG_SELFTEST_CHECK_FSENSOR_CZ[] PROGMEM = "Kontrola senzoru"; +const char * const MSG_SELFTEST_CHECK_FSENSOR_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_SELFTEST_CHECK_FSENSOR_EN, + MSG_SELFTEST_CHECK_FSENSOR_CZ +}; + const char MSG_SELFTEST_CHECK_HOTEND_EN[] PROGMEM = "Checking hotend "; const char MSG_SELFTEST_CHECK_HOTEND_CZ[] PROGMEM = "Kontrola hotend "; const char * const MSG_SELFTEST_CHECK_HOTEND_LANG_TABLE[LANG_NUM] PROGMEM = { @@ -1641,6 +1655,13 @@ const char * const MSG_SELFTEST_EXTRUDER_FAN_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_SELFTEST_EXTRUDER_FAN_CZ }; +const char MSG_SELFTEST_EXTRUDER_FAN_SPEED_EN[] PROGMEM = "Extruder fan:"; +const char MSG_SELFTEST_EXTRUDER_FAN_SPEED_CZ[] PROGMEM = "Levy vent.:"; +const char * const MSG_SELFTEST_EXTRUDER_FAN_SPEED_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_SELFTEST_EXTRUDER_FAN_SPEED_EN, + MSG_SELFTEST_EXTRUDER_FAN_SPEED_CZ +}; + const char MSG_SELFTEST_FAILED_EN[] PROGMEM = "Selftest failed "; const char MSG_SELFTEST_FAILED_CZ[] PROGMEM = "Selftest selhal "; const char * const MSG_SELFTEST_FAILED_LANG_TABLE[LANG_NUM] PROGMEM = { @@ -1676,6 +1697,13 @@ const char * const MSG_SELFTEST_FAN_YES_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_SELFTEST_FAN_YES_CZ }; +const char MSG_SELFTEST_FILAMENT_SENSOR_EN[] PROGMEM = "Filament sensor:"; +const char MSG_SELFTEST_FILAMENT_SENSOR_CZ[] PROGMEM = "Senzor filamentu:"; +const char * const MSG_SELFTEST_FILAMENT_SENSOR_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_SELFTEST_FILAMENT_SENSOR_EN, + MSG_SELFTEST_FILAMENT_SENSOR_CZ +}; + const char MSG_SELFTEST_HEATERTHERMISTOR_EN[] PROGMEM = "Heater/Thermistor"; const char * const MSG_SELFTEST_HEATERTHERMISTOR_LANG_TABLE[1] PROGMEM = { MSG_SELFTEST_HEATERTHERMISTOR_EN @@ -1705,6 +1733,13 @@ const char * const MSG_SELFTEST_PLEASECHECK_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_SELFTEST_PLEASECHECK_CZ }; +const char MSG_SELFTEST_PRINT_FAN_SPEED_EN[] PROGMEM = "Print fan:"; +const char MSG_SELFTEST_PRINT_FAN_SPEED_CZ[] PROGMEM = "Tiskovy vent.:"; +const char * const MSG_SELFTEST_PRINT_FAN_SPEED_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_SELFTEST_PRINT_FAN_SPEED_EN, + MSG_SELFTEST_PRINT_FAN_SPEED_CZ +}; + const char MSG_SELFTEST_START_EN[] PROGMEM = "Self test start "; const char * const MSG_SELFTEST_START_LANG_TABLE[1] PROGMEM = { MSG_SELFTEST_START_EN diff --git a/Firmware/language_all.h b/Firmware/language_all.h index d17bf3b3..6261744d 100644 --- a/Firmware/language_all.h +++ b/Firmware/language_all.h @@ -224,6 +224,8 @@ extern const char* const MSG_FILAMENT_LOADING_T2_LANG_TABLE[LANG_NUM]; #define MSG_FILAMENT_LOADING_T2 LANG_TABLE_SELECT(MSG_FILAMENT_LOADING_T2_LANG_TABLE) extern const char* const MSG_FILAMENT_LOADING_T3_LANG_TABLE[LANG_NUM]; #define MSG_FILAMENT_LOADING_T3 LANG_TABLE_SELECT(MSG_FILAMENT_LOADING_T3_LANG_TABLE) +extern const char* const MSG_FILAMENT_SENSOR_LANG_TABLE[LANG_NUM]; +#define MSG_FILAMENT_SENSOR LANG_TABLE_SELECT(MSG_FILAMENT_SENSOR_LANG_TABLE) extern const char* const MSG_FILE_CNT_LANG_TABLE[LANG_NUM]; #define MSG_FILE_CNT LANG_TABLE_SELECT(MSG_FILE_CNT_LANG_TABLE) extern const char* const MSG_FILE_INCOMPLETE_LANG_TABLE[LANG_NUM]; @@ -536,6 +538,8 @@ extern const char* const MSG_SELFTEST_CHECK_BED_LANG_TABLE[LANG_NUM]; #define MSG_SELFTEST_CHECK_BED LANG_TABLE_SELECT(MSG_SELFTEST_CHECK_BED_LANG_TABLE) extern const char* const MSG_SELFTEST_CHECK_ENDSTOPS_LANG_TABLE[LANG_NUM]; #define MSG_SELFTEST_CHECK_ENDSTOPS LANG_TABLE_SELECT(MSG_SELFTEST_CHECK_ENDSTOPS_LANG_TABLE) +extern const char* const MSG_SELFTEST_CHECK_FSENSOR_LANG_TABLE[LANG_NUM]; +#define MSG_SELFTEST_CHECK_FSENSOR LANG_TABLE_SELECT(MSG_SELFTEST_CHECK_FSENSOR_LANG_TABLE) extern const char* const MSG_SELFTEST_CHECK_HOTEND_LANG_TABLE[LANG_NUM]; #define MSG_SELFTEST_CHECK_HOTEND LANG_TABLE_SELECT(MSG_SELFTEST_CHECK_HOTEND_LANG_TABLE) extern const char* const MSG_SELFTEST_CHECK_X_LANG_TABLE[LANG_NUM]; @@ -556,6 +560,8 @@ extern const char* const MSG_SELFTEST_ERROR_LANG_TABLE[1]; #define MSG_SELFTEST_ERROR LANG_TABLE_SELECT_EXPLICIT(MSG_SELFTEST_ERROR_LANG_TABLE, 0) extern const char* const MSG_SELFTEST_EXTRUDER_FAN_LANG_TABLE[LANG_NUM]; #define MSG_SELFTEST_EXTRUDER_FAN LANG_TABLE_SELECT(MSG_SELFTEST_EXTRUDER_FAN_LANG_TABLE) +extern const char* const MSG_SELFTEST_EXTRUDER_FAN_SPEED_LANG_TABLE[LANG_NUM]; +#define MSG_SELFTEST_EXTRUDER_FAN_SPEED LANG_TABLE_SELECT(MSG_SELFTEST_EXTRUDER_FAN_SPEED_LANG_TABLE) extern const char* const MSG_SELFTEST_FAILED_LANG_TABLE[LANG_NUM]; #define MSG_SELFTEST_FAILED LANG_TABLE_SELECT(MSG_SELFTEST_FAILED_LANG_TABLE) extern const char* const MSG_SELFTEST_FAN_LANG_TABLE[LANG_NUM]; @@ -566,6 +572,8 @@ extern const char* const MSG_SELFTEST_FAN_NO_LANG_TABLE[LANG_NUM]; #define MSG_SELFTEST_FAN_NO LANG_TABLE_SELECT(MSG_SELFTEST_FAN_NO_LANG_TABLE) extern const char* const MSG_SELFTEST_FAN_YES_LANG_TABLE[LANG_NUM]; #define MSG_SELFTEST_FAN_YES LANG_TABLE_SELECT(MSG_SELFTEST_FAN_YES_LANG_TABLE) +extern const char* const MSG_SELFTEST_FILAMENT_SENSOR_LANG_TABLE[LANG_NUM]; +#define MSG_SELFTEST_FILAMENT_SENSOR LANG_TABLE_SELECT(MSG_SELFTEST_FILAMENT_SENSOR_LANG_TABLE) extern const char* const MSG_SELFTEST_HEATERTHERMISTOR_LANG_TABLE[1]; #define MSG_SELFTEST_HEATERTHERMISTOR LANG_TABLE_SELECT_EXPLICIT(MSG_SELFTEST_HEATERTHERMISTOR_LANG_TABLE, 0) extern const char* const MSG_SELFTEST_MOTOR_LANG_TABLE[1]; @@ -576,6 +584,8 @@ extern const char* const MSG_SELFTEST_OK_LANG_TABLE[1]; #define MSG_SELFTEST_OK LANG_TABLE_SELECT_EXPLICIT(MSG_SELFTEST_OK_LANG_TABLE, 0) extern const char* const MSG_SELFTEST_PLEASECHECK_LANG_TABLE[LANG_NUM]; #define MSG_SELFTEST_PLEASECHECK LANG_TABLE_SELECT(MSG_SELFTEST_PLEASECHECK_LANG_TABLE) +extern const char* const MSG_SELFTEST_PRINT_FAN_SPEED_LANG_TABLE[LANG_NUM]; +#define MSG_SELFTEST_PRINT_FAN_SPEED LANG_TABLE_SELECT(MSG_SELFTEST_PRINT_FAN_SPEED_LANG_TABLE) extern const char* const MSG_SELFTEST_START_LANG_TABLE[1]; #define MSG_SELFTEST_START LANG_TABLE_SELECT_EXPLICIT(MSG_SELFTEST_START_LANG_TABLE, 0) extern const char* const MSG_SELFTEST_SWAPPED_LANG_TABLE[LANG_NUM]; diff --git a/Firmware/language_cz.h b/Firmware/language_cz.h index ed879aac..0bdd3540 100644 --- a/Firmware/language_cz.h +++ b/Firmware/language_cz.h @@ -204,6 +204,11 @@ #define MSG_SELFTEST_CHECK_ALLCORRECT "Vse OK " #define MSG_SELFTEST "Selftest " #define MSG_SELFTEST_FAILED "Selftest selhal " +#define MSG_SELFTEST_EXTRUDER_FAN_SPEED "Levy vent.:" +#define MSG_SELFTEST_PRINT_FAN_SPEED "Tiskovy vent.:" +#define MSG_SELFTEST_FILAMENT_SENSOR "Senzor filamentu:" +#define MSG_SELFTEST_CHECK_FSENSOR "Kontrola senzoru" +#define MSG_FILAMENT_SENSOR "Senzor filamentu" #define MSG_STATISTICS "Statistika " #define MSG_USB_PRINTING "Tisk z USB " diff --git a/Firmware/language_en.h b/Firmware/language_en.h index c4d1e52f..59528b02 100644 --- a/Firmware/language_en.h +++ b/Firmware/language_en.h @@ -175,6 +175,9 @@ #define MSG_SELFTEST_ENDSTOP "Endstop" #define MSG_SELFTEST_FANS "Front/left fans" #define MSG_SELFTEST_SWAPPED "Swapped" +#define(length=18) MSG_SELFTEST_EXTRUDER_FAN_SPEED "Extruder fan:" +#define(length=18) MSG_SELFTEST_PRINT_FAN_SPEED "Print fan:" +#define(length=18) MSG_SELFTEST_FILAMENT_SENSOR "Filament sensor:" #define(length=20,lines=1) MSG_SELFTEST_ENDSTOP_NOTHIT "Endstop not hit" #define MSG_SELFTEST_OK "Self test OK" @@ -197,6 +200,8 @@ #define(length=20) MSG_SELFTEST_CHECK_Y "Checking Y axis " #define(length=20) MSG_SELFTEST_CHECK_Z "Checking Z axis " #define(length=20) MSG_SELFTEST_CHECK_BED "Checking bed " +#define(length=20) MSG_SELFTEST_CHECK_FSENSOR "Checking sensors " +#define(length=20) MSG_FILAMENT_SENSOR "Filament sensor" #define(length=20) MSG_SELFTEST_CHECK_ALLCORRECT "All correct " #define MSG_SELFTEST "Selftest " #define(length=20) MSG_SELFTEST_FAILED "Selftest failed " diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 598cbb23..874141fc 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -110,6 +110,9 @@ int8_t FSensorStateMenu = 1; int8_t CrashDetectMenu = 1; +extern void fsensor_block(); +extern void fsensor_unblock(); + extern bool fsensor_enable(); extern void fsensor_disable(); @@ -2646,11 +2649,16 @@ void lcd_show_fullscreen_message_and_wait_P(const char *msg) while (lcd_clicked()) ; delay(10); while (lcd_clicked()) ; - KEEPALIVE_STATE(IN_HANDLER); - lcd_set_custom_characters(); - lcd_update_enable(true); - lcd_update(2); - return; + if (msg_next == NULL) { + KEEPALIVE_STATE(IN_HANDLER); + lcd_set_custom_characters(); + lcd_update_enable(true); + lcd_update(2); + return; + } + else { + break; + } } } if (multi_screen) { @@ -3618,15 +3626,16 @@ void lcd_wizard(int state) { state = 7; break; case 7: //load filament + fsensor_block(); lcd_show_fullscreen_message_and_wait_P(MSG_WIZARD_LOAD_FILAMENT); lcd_update_enable(false); lcd_implementation_clear(); lcd_print_at_PGM(0, 2, MSG_LOADING_FILAMENT); - loading_flag = true; #ifdef SNMM change_extr(0); #endif gcode_M701(); + fsensor_unblock(); state = 9; break; case 8: @@ -5549,16 +5558,27 @@ static bool lcd_selftest() if (_result) { - _progress = lcd_selftest_screen(7, _progress, 3, true, 2000); + _progress = lcd_selftest_screen(7, _progress, 3, true, 2000); //check bed _result = lcd_selfcheck_check_heater(true); } if (_result) { - _progress = lcd_selftest_screen(8, _progress, 3, true, 5000); + _progress = lcd_selftest_screen(8, _progress, 3, true, 2000); //bed ok +#ifdef PAT9125 + _progress = lcd_selftest_screen(9, _progress, 3, true, 2000); //check filaments sensor + _result = lcd_selftest_fsensor(); +#endif // PAT9125 + } + if (_result) + { +#ifdef PAT9125 + _progress = lcd_selftest_screen(10, _progress, 3, true, 2000); //fil sensor OK +#endif // PAT9125 + _progress = lcd_selftest_screen(11, _progress, 3, true, 5000); //all correct } else { - _progress = lcd_selftest_screen(9, _progress, 3, true, 5000); + _progress = lcd_selftest_screen(12, _progress, 3, true, 5000); } lcd_reset_alert_level(); enquecommand_P(PSTR("M84")); @@ -6103,6 +6123,12 @@ static void lcd_selftest_error(int _error_no, const char *_error_1, const char * lcd.setCursor(18, 3); lcd.print(_error_1); break; + case 11: + lcd.setCursor(0, 2); + lcd_printPGM(MSG_FILAMENT_SENSOR); + lcd.setCursor(0, 3); + lcd_printPGM(MSG_SELFTEST_WIRINGERROR); + break; } delay(1000); @@ -6119,6 +6145,18 @@ static void lcd_selftest_error(int _error_no, const char *_error_1, const char * } +#ifdef PAT9125 +static bool lcd_selftest_fsensor() { + fsensor_init(); + if (fsensor_not_responding) + { + const char *_err; + lcd_selftest_error(11, _err, _err); + } + return(!fsensor_not_responding); +} +#endif //PAT9125 + static bool lcd_selftest_fan_dialog(int _fan) { bool _result = true; @@ -6143,10 +6181,10 @@ static bool lcd_selftest_fan_dialog(int _fan) fanSpeed = 150; //print fan for (uint8_t i = 0; i < 5; i++) { delay_keep_alive(1000); - lcd.setCursor(14, 3); + lcd.setCursor(18, 3); lcd.print("-"); delay_keep_alive(1000); - lcd.setCursor(14, 3); + lcd.setCursor(18, 3); lcd.print("|"); } fanSpeed = 0; @@ -6197,22 +6235,31 @@ static int lcd_selftest_screen(int _step, int _progress, int _progress_scale, bo if (_step == 5) lcd_printPGM(MSG_SELFTEST_CHECK_Y); if (_step == 6) lcd_printPGM(MSG_SELFTEST_CHECK_Z); if (_step == 7) lcd_printPGM(MSG_SELFTEST_CHECK_BED); - if (_step == 8) lcd_printPGM(MSG_SELFTEST_CHECK_ALLCORRECT); - if (_step == 9) lcd_printPGM(MSG_SELFTEST_FAILED); + if (_step == 8) lcd_printPGM(MSG_SELFTEST_CHECK_BED); + if (_step == 9) lcd_printPGM(MSG_SELFTEST_CHECK_FSENSOR); + if (_step == 10) lcd_printPGM(MSG_SELFTEST_CHECK_FSENSOR); + if (_step == 11) lcd_printPGM(MSG_SELFTEST_CHECK_ALLCORRECT); + if (_step == 12) lcd_printPGM(MSG_SELFTEST_FAILED); lcd.setCursor(0, 1); lcd.print("--------------------"); if ((_step >= -1) && (_step <= 1)) { //SERIAL_ECHOLNPGM("Fan test"); - lcd_print_at_PGM(0, 2, PSTR("Extruder fan:")); - lcd.setCursor(14, 2); + lcd_print_at_PGM(0, 2, MSG_SELFTEST_EXTRUDER_FAN_SPEED); + lcd.setCursor(18, 2); (_step < 0) ? lcd.print(_indicator) : lcd.print("OK"); - lcd_print_at_PGM(0, 3, PSTR("Print fan:")); - lcd.setCursor(14, 3); + lcd_print_at_PGM(0, 3, MSG_SELFTEST_PRINT_FAN_SPEED); + lcd.setCursor(18, 3); (_step < 1) ? lcd.print(_indicator) : lcd.print("OK"); } - else if (_step != 9) + else if (_step >= 9 && _step <= 10) + { + lcd_print_at_PGM(0, 2, MSG_SELFTEST_FILAMENT_SENSOR); + lcd.setCursor(18, 2); + (_step == 9) ? lcd.print(_indicator) : lcd.print("OK"); + } + else if (_step < 9) { //SERIAL_ECHOLNPGM("Other tests"); _step_block = 3; diff --git a/Firmware/ultralcd.h b/Firmware/ultralcd.h index 9154f50d..7b7be6bf 100644 --- a/Firmware/ultralcd.h +++ b/Firmware/ultralcd.h @@ -47,6 +47,7 @@ void lcd_mylang(); static int lcd_selftest_screen(int _step, int _progress, int _progress_scale, bool _clear, int _delay); static void lcd_selftest_screen_step(int _row, int _col, int _state, const char *_name, const char *_indicator); static bool lcd_selftest_fan_dialog(int _fan); + static bool lcd_selftest_fsensor(); static void lcd_selftest_error(int _error_no, const char *_error_1, const char *_error_2); void lcd_menu_statistics(); static bool lcd_selfcheck_pulleys(int axis);