static void lcd_menu_print_printing() { lcd_question_screen(lcd_menu_print_tune, NULL, PSTR("TUNE"), lcd_menu_print_abort, NULL, PSTR("ABORT")); uint8_t progress = card.getFilePos() / ((card.getFileSize() + 123) / 124); char buffer[16]; char* c; switch(printing_state) { default: lcd_lib_draw_string_centerP(20, PSTR("Printing:")); lcd_lib_draw_string_center(30, card.longFilename); break; case PRINT_STATE_HEATING: lcd_lib_draw_string_centerP(20, PSTR("Heating")); c = int_to_string(current_temperature[0], buffer, PSTR("C")); *c++ = '/'; c = int_to_string(target_temperature[0], c, PSTR("C")); lcd_lib_draw_string_center(30, buffer); break; case PRINT_STATE_HEATING_BED: lcd_lib_draw_string_centerP(20, PSTR("Heating buildplate")); c = int_to_string(current_temperature_bed, buffer, PSTR("C")); *c++ = '/'; c = int_to_string(target_temperature_bed, c, PSTR("C")); lcd_lib_draw_string_center(30, buffer); break; } float printTimeMs = (millis() - starttime); float printTimeSec = printTimeMs / 1000L; float totalTimeMs = float(printTimeMs) * float(card.getFileSize()) / float(card.getFilePos()); static float totalTimeSmoothSec; totalTimeSmoothSec = (totalTimeSmoothSec * 999L + totalTimeMs / 1000L) / 1000L; if (isinf(totalTimeSmoothSec)) totalTimeSmoothSec = totalTimeMs; if (LCD_DETAIL_CACHE_TIME() == 0 && printTimeSec < 60) { totalTimeSmoothSec = totalTimeMs / 1000; lcd_lib_draw_stringP(5, 10, PSTR("Time left unknown")); }else{ unsigned long totalTimeSec; if (printTimeSec < LCD_DETAIL_CACHE_TIME() / 2) { float f = float(printTimeSec) / float(LCD_DETAIL_CACHE_TIME() / 2); totalTimeSec = float(totalTimeSmoothSec) * f + float(LCD_DETAIL_CACHE_TIME()) * (1 - f); }else{ totalTimeSec = totalTimeSmoothSec; } unsigned long timeLeftSec = totalTimeSec - printTimeSec; int_to_time_string(timeLeftSec, buffer); lcd_lib_draw_stringP(5, 10, PSTR("Time left")); lcd_lib_draw_string(65, 10, buffer); } lcd_progressbar(progress); lcd_lib_update_screen(); }
static void lcd_menu_change_material_preheat() { run_history = true; setTargetHotend(material[active_extruder].temperature, active_extruder); int16_t temp = degHotend(active_extruder) - 20; int16_t target = degTargetHotend(active_extruder) - 20 - 10; if (temp < 0) temp = 0; if (temp > target && !is_command_queued()) { set_extrude_min_temp(0); for(uint8_t e=0; e<EXTRUDERS; e++) volume_to_filament_length[e] = 1.0;//Set the extrusion to 1mm per given value, so we can move the filament a set distance. plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], 20.0, retract_feedrate/60.0, active_extruder); float old_max_feedrate_e = max_feedrate[E_AXIS]; float old_retract_acceleration = retract_acceleration; max_feedrate[E_AXIS] = FILAMENT_REVERSAL_SPEED; retract_acceleration = FILAMENT_LONG_MOVE_ACCELERATION; current_position[E_AXIS] = 0; plan_set_e_position(current_position[E_AXIS]); plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], -1.0, FILAMENT_REVERSAL_SPEED, active_extruder); for(uint8_t n=0; n<6; n++) plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], (n+1)*-FILAMENT_REVERSAL_LENGTH/6, FILAMENT_REVERSAL_SPEED, active_extruder); max_feedrate[E_AXIS] = old_max_feedrate_e; retract_acceleration = old_retract_acceleration; currentMenu = lcd_menu_change_material_remove; temp = target; } uint8_t progress = uint8_t(temp * 125 / target); if (progress < minProgress) progress = minProgress; else minProgress = progress; lcd_info_screen(lcd_menu_material_main, cancelMaterialInsert); lcd_lib_draw_stringP(3, 0, PSTR("Heating printhead")); lcd_lib_draw_stringP(3, 10, PSTR("for material removal")); char buffer[20]; memset (buffer,0,sizeof(buffer)); char* c; c = int_to_string(temp, buffer/*, PSTR( DEGREE_C_SYMBOL )*/); *c++ = TEMPERATURE_SEPARATOR; c = int_to_string(target, c, PSTR( DEGREE_C_SYMBOL )); lcd_lib_draw_string_center(20, buffer); lcd_progressbar(progress); LED_HEAT(); lcd_lib_update_screen(); }
void lcd_menu_edit_setting() { if (lcd_lib_encoder_pos < lcd_setting_min) lcd_lib_encoder_pos = lcd_setting_min; if (lcd_lib_encoder_pos > lcd_setting_max) lcd_lib_encoder_pos = lcd_setting_max; if (lcd_setting_type == 1) *(uint8_t*)lcd_setting_ptr = lcd_lib_encoder_pos; else if (lcd_setting_type == 2) *(uint16_t*)lcd_setting_ptr = lcd_lib_encoder_pos; else if (lcd_setting_type == 3) *(float*)lcd_setting_ptr = float(lcd_lib_encoder_pos) / 100.0; else if (lcd_setting_type == 4) *(int32_t*)lcd_setting_ptr = lcd_lib_encoder_pos; else if (lcd_setting_type == 5) *(uint8_t*)lcd_setting_ptr = lcd_lib_encoder_pos * 255 / 100; else if (lcd_setting_type == 6) *(float*)lcd_setting_ptr = float(lcd_lib_encoder_pos) * 60; else if (lcd_setting_type == 7) *(float*)lcd_setting_ptr = float(lcd_lib_encoder_pos) * 100; else if (lcd_setting_type == 8) *(float*)lcd_setting_ptr = float(lcd_lib_encoder_pos); lcd_basic_screen(); lcd_lib_draw_string_centerP(20, lcd_setting_name); char buffer[LCD_MAX_TEXT_LINE_LENGTH + 1]; // Longest string: "Prev: 20000mm/sec^2" = 19 characters + 1 if (lcd_setting_type == 3) float_to_string(float(lcd_lib_encoder_pos) / 100.0, buffer, lcd_setting_postfix); else int_to_string(lcd_lib_encoder_pos, buffer, lcd_setting_postfix); lcd_lib_draw_string_center(30, buffer); strcpy_P(buffer, PSTR("Prev: ")); if (lcd_setting_type == 3) float_to_string(float(lcd_setting_start_value) / 100.0, buffer + 6, lcd_setting_postfix); else int_to_string(lcd_setting_start_value, buffer + 6, lcd_setting_postfix); lcd_lib_draw_string_center(53, buffer); lcd_lib_update_screen(); if (lcd_lib_button_pressed) lcd_change_to_menu(previousMenu, previousEncoderPos); }
static void lcd_menu_print_heatup() { lcd_question_screen(lcd_menu_print_tune, NULL, PSTR("TUNE"), lcd_menu_print_abort, NULL, PSTR("ABORT")); if (current_temperature_bed > target_temperature_bed - 10) { for(uint8_t e=0; e<EXTRUDERS; e++) { if (LCD_DETAIL_CACHE_MATERIAL(e) < 1 || target_temperature[e] > 0) continue; target_temperature[e] = material[e].temperature; } if (current_temperature_bed >= target_temperature_bed - TEMP_WINDOW * 2 && !is_command_queued()) { bool ready = true; for(uint8_t e=0; e<EXTRUDERS; e++) if (current_temperature[e] < target_temperature[e] - TEMP_WINDOW) ready = false; if (ready) { doStartPrint(); currentMenu = lcd_menu_print_printing; } } } uint8_t progress = 125; for(uint8_t e=0; e<EXTRUDERS; e++) { if (LCD_DETAIL_CACHE_MATERIAL(e) < 1 || target_temperature[e] < 1) continue; if (current_temperature[e] > 20) progress = min(progress, (current_temperature[e] - 20) * 125 / (target_temperature[e] - 20 - TEMP_WINDOW)); else progress = 0; } if (current_temperature_bed > 20) progress = min(progress, (current_temperature_bed - 20) * 125 / (target_temperature_bed - 20 - TEMP_WINDOW)); else progress = 0; if (progress < minProgress) progress = minProgress; else minProgress = progress; lcd_lib_draw_string_centerP(10, PSTR("Heating up...")); lcd_lib_draw_string_centerP(20, PSTR("Preparing to print:")); lcd_lib_draw_string_center(30, card.longFilename); lcd_progressbar(progress); lcd_lib_update_screen(); }
static void lcd_menu_first_run_material_select_confirm_material() { LED_GLOW(); lcd_question_screen(lcd_menu_first_run_material_select_2, NULL, PSTR("YES"), lcd_menu_first_run_material_select_material, NULL, PSTR("NO")); DRAW_PROGRESS_NR(18); lcd_lib_draw_string_centerP(20, PSTR("You have chosen")); lcd_lib_draw_string_center(30, card.longFilename); lcd_lib_draw_string_centerP(40, PSTR("is this right?")); lcd_lib_update_screen(); }
static void lcd_menu_material_selected() { lcd_info_screen(lcd_menu_main, NULL, PSTR("OK")); lcd_lib_draw_string_centerP(20, PSTR("Selected material:")); lcd_lib_draw_string_center(30, card.longFilename); #if EXTRUDERS > 1 if (active_extruder == 0) lcd_lib_draw_string_centerP(40, PSTR("for primary nozzle")); else if (active_extruder == 1) lcd_lib_draw_string_centerP(40, PSTR("for secondary nozzle")); #endif lcd_lib_update_screen(); }
static void lcd_menu_print_error() { LED_GLOW_ERROR(); lcd_info_screen(lcd_menu_main, NULL, PSTR("RETURN TO MAIN")); lcd_lib_draw_string_centerP(10, PSTR("Error while")); lcd_lib_draw_string_centerP(20, PSTR("reading")); lcd_lib_draw_string_centerP(30, PSTR("SD-card!")); char buffer[12]; strcpy_P(buffer, PSTR("Code:")); int_to_string(card.errorCode(), buffer+5); lcd_lib_draw_string_center(40, buffer); lcd_lib_update_screen(); }
void lcd_menu_edit_setting() { if (lcd_lib_encoder_pos < lcd_setting_min) lcd_lib_encoder_pos = lcd_setting_min; if (lcd_lib_encoder_pos > lcd_setting_max) lcd_lib_encoder_pos = lcd_setting_max; if (lcd_setting_type == 1) *(uint8_t*)lcd_setting_ptr = lcd_lib_encoder_pos; else if (lcd_setting_type == 2) *(uint16_t*)lcd_setting_ptr = lcd_lib_encoder_pos; else if (lcd_setting_type == 3) *(float*)lcd_setting_ptr = float(lcd_lib_encoder_pos) / 100.0; else if (lcd_setting_type == 4) *(int32_t*)lcd_setting_ptr = lcd_lib_encoder_pos; else if (lcd_setting_type == 5) *(uint8_t*)lcd_setting_ptr = lround(lcd_lib_encoder_pos * 255 / 100.0); else if (lcd_setting_type == 6) *(float*)lcd_setting_ptr = float(lcd_lib_encoder_pos) * 60; else if (lcd_setting_type == 7) *(float*)lcd_setting_ptr = float(lcd_lib_encoder_pos) * 100; else if (lcd_setting_type == 8) *(float*)lcd_setting_ptr = float(lcd_lib_encoder_pos); else if (lcd_setting_type == 9) *(uint8_t*)lcd_setting_ptr = lcd_lib_encoder_pos; lcd_lib_clear(); char buffer[16]; if (lcd_setting_type == 3) float_to_string(float(lcd_lib_encoder_pos) / 100.0, buffer, lcd_setting_postfix); else int_to_string(lcd_lib_encoder_pos, buffer, lcd_setting_postfix); lcd_lib_draw_string_centerP(LS(20, 11, 11) , lcd_setting_name); lcd_lib_draw_string_center(LS(30, 24, 24) , buffer); if (lcd_lib_button_pressed) { lcd_change_to_menu(previousMenu, previousEncoderPos, MenuBackward); lcd_lib_button_up_down_reversed=false; if (lcd_setting_type == 9) { Config_StoreSettings(); } } }
void lcd_menu_print_tune_heatup_nozzle1() { if (lcd_lib_encoder_pos / ENCODER_TICKS_PER_SCROLL_MENU_ITEM != 0) { target_temperature[1] = int(target_temperature[1]) + (lcd_lib_encoder_pos / ENCODER_TICKS_PER_SCROLL_MENU_ITEM); if (target_temperature[1] < 0) target_temperature[1] = 0; if (target_temperature[1] > HEATER_0_MAXTEMP - 15) target_temperature[1] = HEATER_0_MAXTEMP - 15; lcd_lib_encoder_pos = 0; } if (lcd_lib_button_pressed) lcd_change_to_menu(previousMenu, previousEncoderPos); lcd_lib_clear(); lcd_lib_draw_string_centerP(20, PSTR("Nozzle2 temperature:")); lcd_lib_draw_string_centerP(53, PSTR("Click to return")); char buffer[16]; int_to_string(int(current_temperature[1]), buffer, PSTR("C/")); int_to_string(int(target_temperature[1]), buffer+strlen(buffer), PSTR("C")); lcd_lib_draw_string_center(30, buffer); lcd_lib_update_screen(); }
void lcd_menu_edit_setting() { if (lcd_lib_encoder_pos < lcd_setting_min) lcd_lib_encoder_pos = lcd_setting_min; if (lcd_lib_encoder_pos > lcd_setting_max) lcd_lib_encoder_pos = lcd_setting_max; if (lcd_setting_type == 1) *(uint8_t*)lcd_setting_ptr = lcd_lib_encoder_pos; else if (lcd_setting_type == 2) *(uint16_t*)lcd_setting_ptr = lcd_lib_encoder_pos; else if (lcd_setting_type == 3) *(float*)lcd_setting_ptr = float(lcd_lib_encoder_pos) / 100.0; else if (lcd_setting_type == 4) *(int32_t*)lcd_setting_ptr = lcd_lib_encoder_pos; else if (lcd_setting_type == 5) *(uint8_t*)lcd_setting_ptr = lcd_lib_encoder_pos * 255 / 100; else if (lcd_setting_type == 6) *(float*)lcd_setting_ptr = float(lcd_lib_encoder_pos) * 60; else if (lcd_setting_type == 7) *(float*)lcd_setting_ptr = float(lcd_lib_encoder_pos) * 100; else if (lcd_setting_type == 8) *(float*)lcd_setting_ptr = float(lcd_lib_encoder_pos); lcd_lib_clear(); lcd_lib_draw_string_centerP(20, lcd_setting_name); char buffer[16]; if (lcd_setting_type == 3) float_to_string(float(lcd_lib_encoder_pos) / 100.0, buffer, lcd_setting_postfix); else int_to_string(lcd_lib_encoder_pos, buffer, lcd_setting_postfix); lcd_lib_draw_string_center(30, buffer); lcd_lib_update_screen(); if (lcd_lib_button_pressed) lcd_change_to_menu(previousMenu, previousEncoderPos); }
static void lcd_menu_print_ready() { if (led_mode == LED_MODE_WHILE_PRINTING) analogWrite(LED_PIN, 0); else if (led_mode == LED_MODE_BLINK_ON_DONE) analogWrite(LED_PIN, (led_glow << 1) * int(led_brightness_level) / 100); lcd_info_screen(lcd_menu_main, postPrintReady, PSTR("BACK TO MENU")); //unsigned long printTimeSec = (stoptime-starttime)/1000; if (current_temperature[0] > 60 || current_temperature_bed > 40) { lcd_lib_draw_string_centerP(15, PSTR("Printer cooling down")); int16_t progress = 124 - (current_temperature[0] - 60); if (progress < 0) progress = 0; if (progress > 124) progress = 124; if (progress < minProgress) progress = minProgress; else minProgress = progress; lcd_progressbar(progress); char buffer[16]; char* c = buffer; for(uint8_t e=0; e<EXTRUDERS; e++) c = int_to_string(current_temperature[e], buffer, PSTR("C ")); int_to_string(current_temperature_bed, c, PSTR("C")); lcd_lib_draw_string_center(25, buffer); }else{ LED_GLOW(); lcd_lib_draw_string_centerP(10, PSTR("Print finished")); lcd_lib_draw_string_centerP(30, PSTR("You can remove")); lcd_lib_draw_string_centerP(40, PSTR("the print.")); } lcd_lib_update_screen(); }
static void lcd_menu_babystepping(uint8_t axis) { lcd_lib_clear(); char buffer[16]; strcpy_P(buffer, PSTR("Babystep ")); buffer[9] = axis_codes[axis]; buffer[10] = '\0'; lcd_lib_draw_string_center(20, buffer); lcd_lib_draw_string_centerP(40, PSTR("Rotate to move axis")); lcd_lib_draw_string_centerP(50, PSTR("Click to return")); lcd_lib_update_screen(); int diff = lcd_lib_encoder_pos*axis_steps_per_unit[axis]/200; if (diff) { babystepsTodo[axis] += diff; lcd_lib_encoder_pos = 0; } if (lcd_lib_button_pressed) lcd_change_to_menu(previousMenu, previousEncoderPos); }
void lcd_draw_detail(char* pstr) { static int detailStringIndex=0; static char* pstrBack=pstr; uint8_t detailStringLength=strlen(pstr); uint8_t yOffset = LS(56, 53, 53); if (detailStringLength<=20) { lcd_lib_draw_string_center(yOffset, pstr); } else{ if (pstrBack!=pstr) { detailStringIndex=0; pstrBack=pstr; } lcd_lib_draw_string(-detailStringIndex, yOffset, pstr); detailStringIndex++; if (detailStringIndex>=6*detailStringLength) { detailStringIndex=-128; } } }