From 87cadb1f681868f8be78ddea5182aa9a3383f696 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Tue, 29 Aug 2017 15:52:53 +0200 Subject: [PATCH] statistics improved, initial version of function which forces user to connect printer to monitoring --- Firmware/Marlin.h | 4 ++ Firmware/Marlin_main.cpp | 10 +++ Firmware/ultralcd.cpp | 70 ++++++++++++++++--- Firmware/ultralcd.h | 3 + .../ultralcd_implementation_hitachi_HD44780.h | 60 ++++++++-------- 5 files changed, 109 insertions(+), 38 deletions(-) diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index 230eb2e55..73f4f4c7b 100644 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -302,6 +302,10 @@ extern unsigned int custom_message_type; extern unsigned int custom_message_state; extern char snmm_filaments_used; extern unsigned long PingTime; +extern unsigned long NcTime; +extern bool no_response; +extern uint8_t important_status; +extern uint8_t saved_filament_type; // Handling multiple extruders pins diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 766ca97a2..a2204721b 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -225,6 +225,8 @@ CardReader card; unsigned long TimeSent = millis(); unsigned long TimeNow = millis(); unsigned long PingTime = millis(); +unsigned long NcTime; + union Data { byte b[2]; @@ -385,6 +387,10 @@ bool cancel_heatup = false ; const char errormagic[] PROGMEM = "Error:"; const char echomagic[] PROGMEM = "echo:"; +bool no_response = false; +uint8_t important_status; +uint8_t saved_filament_type; + //=========================================================================== //=============================Private Variables============================= //=========================================================================== @@ -2058,6 +2064,7 @@ void ramming() { */ void process_commands() { + if (!buflen) return; //empty command #ifdef FILAMENT_RUNOUT_SUPPORT SET_INPUT(FR_SENS); #endif @@ -2108,6 +2115,9 @@ void process_commands() MYSERIAL.println("Not in farm mode."); } + } + else if (code_seen("thx")) { + no_response = false; }else if (code_seen("fv")) { // get file version #ifdef SDSUPPORT diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 40e036741..0676799d2 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -2133,14 +2133,14 @@ void prusa_statistics(int _message, uint8_t _fil_nr) { farm_timer = 2; break; case 6: // print done - SERIAL_ECHOLN("{[PRN:8]"); + SERIAL_ECHO("{[PRN:8]"); prusa_stat_farm_number(); SERIAL_ECHOLN("}"); status_number = 8; farm_timer = 2; break; case 7: // print done - stopped - SERIAL_ECHOLN("{[PRN:9]"); + SERIAL_ECHO("{[PRN:9]"); prusa_stat_farm_number(); SERIAL_ECHOLN("}"); status_number = 9; @@ -2154,7 +2154,7 @@ void prusa_statistics(int _message, uint8_t _fil_nr) { farm_timer = 2; break; case 20: // echo farm no - SERIAL_ECHOLN("{"); + SERIAL_ECHO("{"); prusa_stat_printerstatus(status_number); prusa_stat_farm_number(); SERIAL_ECHOLN("}"); @@ -2168,19 +2168,19 @@ void prusa_statistics(int _message, uint8_t _fil_nr) { SERIAL_ECHOLN("}"); break; case 22: // waiting for filament change - SERIAL_ECHOLN("{[PRN:5]"); + SERIAL_ECHO("{[PRN:5]"); prusa_stat_farm_number(); SERIAL_ECHOLN("}"); status_number = 5; break; case 90: // Error - Thermal Runaway - SERIAL_ECHOLN("{[ERR:1]"); + SERIAL_ECHO("{[ERR:1]"); prusa_stat_farm_number(); SERIAL_ECHOLN("}"); break; case 91: // Error - Thermal Runaway Preheat - SERIAL_ECHOLN("{[ERR:2]"); + SERIAL_ECHO("{[ERR:2]"); prusa_stat_farm_number(); SERIAL_ECHOLN("}"); break; @@ -2190,7 +2190,7 @@ void prusa_statistics(int _message, uint8_t _fil_nr) { SERIAL_ECHOLN("}"); break; case 93: // Error - Max temp - SERIAL_ECHOLN("{[ERR:4]"); + SERIAL_ECHO("{[ERR:4]"); prusa_stat_farm_number(); SERIAL_ECHOLN("}"); break; @@ -3773,12 +3773,20 @@ void lcd_confirm_print() _ret = 1; filament_type = lcd_choose_color(); prusa_statistics(4, filament_type); + no_response = true; //we need confirmation by recieving PRUSA thx + important_status = 4; + saved_filament_type = filament_type; + NcTime = millis(); } if (cursor_pos == 2) { _ret = 2; filament_type = lcd_choose_color(); prusa_statistics(5, filament_type); + no_response = true; //we need confirmation by recieving PRUSA thx + important_status = 5; + saved_filament_type = filament_type; + NcTime = millis(); } } @@ -3849,7 +3857,7 @@ static void lcd_main_menu() }*/ - + if ( ( IS_SD_PRINTING || is_usb_printing ) && (current_position[Z_AXIS] < Z_HEIGHT_HIDE_LIVE_ADJUST_MENU) && !homing_flag && !mesh_bed_leveling_flag) { MENU_ITEM(submenu, MSG_BABYSTEP_Z, lcd_babystep_z);//8 @@ -4109,7 +4117,7 @@ void lcd_sdcard_stop() lcd_return_to_status(); lcd_ignore_click(true); lcd_commands_type = LCD_COMMAND_STOP_PRINT; - + if (farm_mode) prusa_statistics(7); // Turn off the print fan SET_OUTPUT(FAN_PIN); WRITE(FAN_PIN, 0); @@ -5202,12 +5210,56 @@ void lcd_update(uint8_t lcdDrawUpdateOverride) } if (!SdFatUtil::test_stack_integrity()) stack_error(); lcd_ping(); //check that we have received ping command if we are in farm mode + lcd_send_status(); } void lcd_printer_connected() { printer_connected = true; } +static void lcd_send_status() { + if (farm_mode && no_response && ((millis() - NcTime) > (NC_TIME * 1000))) { + //send important status messages periodicaly + prusa_statistics(important_status, saved_filament_type); + NcTime = millis(); + lcd_connect_printer(); + } +}; + +static void lcd_connect_printer() { + lcd_update_enable(false); + lcd_implementation_clear(); + + bool pressed = false; + int i = 0; + int t = 0; + lcd_set_custom_characters_progress(); + lcd_implementation_print_at(0, 0, "Connect printer to"); + lcd_implementation_print_at(0, 1, "monitoring or hold"); + lcd_implementation_print_at(0, 2, "the knob to continue"); + while (no_response) { + i++; + t++; + delay_keep_alive(100); + process_commands(); + if (t == 10) { + prusa_statistics(important_status, saved_filament_type); + t = 0; + } + if (READ(BTN_ENC)) { //if button is not pressed + i = 0; + lcd_implementation_print_at(0, 3, " "); + } + if (i!=0) lcd_implementation_print_at((i * 20) / (NC_BUTTON_LONG_PRESS * 10), 3, "\x01"); + if (i == NC_BUTTON_LONG_PRESS * 10) { + no_response = false; + } + } + lcd_set_custom_characters_degree(); + lcd_update_enable(true); + lcd_update(2); +} + void lcd_ping() { //chceck if printer is connected to monitoring when in farm mode if (farm_mode) { bool empty = is_buffer_empty(); diff --git a/Firmware/ultralcd.h b/Firmware/ultralcd.h index 99b3c4485..c0c8d67f0 100644 --- a/Firmware/ultralcd.h +++ b/Firmware/ultralcd.h @@ -266,4 +266,7 @@ void lcd_set_arrows(); void lcd_set_progress(); #endif +static void lcd_send_status(); +static void lcd_connect_printer(); + #endif //ULTRALCD_H \ No newline at end of file diff --git a/Firmware/ultralcd_implementation_hitachi_HD44780.h b/Firmware/ultralcd_implementation_hitachi_HD44780.h index 3c7bbd009..c421140f7 100644 --- a/Firmware/ultralcd_implementation_hitachi_HD44780.h +++ b/Firmware/ultralcd_implementation_hitachi_HD44780.h @@ -831,7 +831,7 @@ static void lcd_implementation_status_screen() if (heating_status != 0) { custom_message = true; } // If printing from SD, show what we are printing - if ((IS_SD_PRINTING) && !custom_message) + if (IS_SD_PRINTING) { if(strcmp(longFilenameOLD, card.longFilename) != 0) @@ -840,38 +840,40 @@ static void lcd_implementation_status_screen() sprintf_P(longFilenameOLD, PSTR("%s"), card.longFilename); scrollstuff = 0; } + if (!custom_message) { - if(strlen(card.longFilename) > LCD_WIDTH) - { - - int inters = 0; - int gh = scrollstuff; - while( ((gh-scrollstuff) LCD_WIDTH) { - lcd.setCursor(gh-scrollstuff, 3); - lcd.print(card.longFilename[gh-1]); - scrollstuff = 0; - gh = scrollstuff; - inters = 1; - } + + int inters = 0; + int gh = scrollstuff; + while (((gh - scrollstuff) < LCD_WIDTH) && (inters == 0)) + { + + if (card.longFilename[gh] == '\0') + { + lcd.setCursor(gh - scrollstuff, 3); + lcd.print(card.longFilename[gh - 1]); + scrollstuff = 0; + gh = scrollstuff; + inters = 1; + } + else + { + lcd.setCursor(gh - scrollstuff, 3); + lcd.print(card.longFilename[gh - 1]); + gh++; + } + + + } + scrollstuff++; + } else { - lcd.setCursor(gh-scrollstuff, 3); - lcd.print(card.longFilename[gh-1]); - gh++; - } - - - } - scrollstuff++; - } - else - { - lcd.print(longFilenameOLD); - } + lcd.print(longFilenameOLD); + } + } }