static void lcd_menu_insert_material_preheat() { 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. currentMenu = lcd_menu_change_material_insert_wait_user; 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, 10, PSTR("Heating printhead for")); lcd_lib_draw_stringP(3, 20, PSTR("material insertion")); 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(); }
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 checkPrintFinished() { if (!card.sdprinting && !is_command_queued()) { abortPrint(); currentMenu = lcd_menu_print_ready; SELECT_MAIN_MENU_ITEM(0); } if (card.errorCode()) { abortPrint(); currentMenu = lcd_menu_print_error; SELECT_MAIN_MENU_ITEM(0); } }
static void lcd_menu_material_main() { lcd_tripple_menu(PSTR("CHANGE"), PSTR("SETTINGS"), PSTR("RETURN")); if (lcd_lib_button_pressed) { if (IS_SELECTED_MAIN(0) && !is_command_queued()) { minProgress = 0; char buffer[32]; enquecommand_P(PSTR("G28 X0 Y0")); sprintf_P(buffer, PSTR("G1 F%i X%i Y%i"), int(homing_feedrate[0]), X_MAX_LENGTH/2, 10); enquecommand(buffer); lcd_change_to_menu_change_material(lcd_menu_material_main_return); } else if (IS_SELECTED_MAIN(1)) lcd_change_to_menu(lcd_menu_material_select, SCROLL_MENU_ITEM_POS(0)); else if (IS_SELECTED_MAIN(2)) lcd_change_to_menu(lcd_menu_main); } lcd_lib_update_screen(); }
void lcd_menu_print_select() { if (!card.sdInserted) { LED_GLOW(); lcd_lib_encoder_pos = MAIN_MENU_ITEM_POS(0); lcd_info_screen(lcd_menu_main); lcd_lib_draw_string_centerP(15, PSTR("No SD-CARD!")); lcd_lib_draw_string_centerP(25, PSTR("Please insert card")); lcd_lib_update_screen(); card.release(); return; } if (!card.isOk()) { lcd_info_screen(lcd_menu_main); lcd_lib_draw_string_centerP(16, PSTR("Reading card...")); lcd_lib_update_screen(); lcd_clear_cache(); card.initsd(); return; } if (LCD_CACHE_NR_OF_FILES() == 0xFF) LCD_CACHE_NR_OF_FILES() = card.getnrfilenames(); if (card.errorCode()) { LCD_CACHE_NR_OF_FILES() = 0xFF; return; } uint8_t nrOfFiles = LCD_CACHE_NR_OF_FILES(); if (nrOfFiles == 0) { if (card.atRoot()) lcd_info_screen(lcd_menu_main, NULL, PSTR("OK")); else lcd_info_screen(lcd_menu_print_select, cardUpdir, PSTR("OK")); lcd_lib_draw_string_centerP(25, PSTR("No files found!")); lcd_lib_update_screen(); lcd_clear_cache(); return; } if (lcd_lib_button_pressed) { uint8_t selIndex = uint16_t(SELECTED_SCROLL_MENU_ITEM()); if (selIndex == 0) { if (card.atRoot()) { lcd_change_to_menu(lcd_menu_main); }else{ lcd_clear_cache(); lcd_lib_beep(); card.updir(); } }else{ card.getfilename(selIndex - 1); if (!card.filenameIsDir) { //Start print active_extruder = 0; card.openFile(card.filename, true); if (card.isFileOpen() && !is_command_queued()) { if (led_mode == LED_MODE_WHILE_PRINTING || led_mode == LED_MODE_BLINK_ON_DONE) analogWrite(LED_PIN, 255 * int(led_brightness_level) / 100); if (!card.longFilename[0]) strcpy(card.longFilename, card.filename); card.longFilename[20] = '\0'; if (strchr(card.longFilename, '.')) strchr(card.longFilename, '.')[0] = '\0'; char buffer[64]; card.fgets(buffer, sizeof(buffer)); buffer[sizeof(buffer)-1] = '\0'; while (strlen(buffer) > 0 && buffer[strlen(buffer)-1] < ' ') buffer[strlen(buffer)-1] = '\0'; if (strcmp_P(buffer, PSTR(";FLAVOR:UltiGCode")) != 0) { card.fgets(buffer, sizeof(buffer)); buffer[sizeof(buffer)-1] = '\0'; while (strlen(buffer) > 0 && buffer[strlen(buffer)-1] < ' ') buffer[strlen(buffer)-1] = '\0'; } card.setIndex(0); if (strcmp_P(buffer, PSTR(";FLAVOR:UltiGCode")) == 0) { //New style GCode flavor without start/end code. // Temperature settings, filament settings, fan settings, start and end-code are machine controlled. target_temperature_bed = 0; fanSpeedPercent = 0; for(uint8_t e=0; e<EXTRUDERS; e++) { if (LCD_DETAIL_CACHE_MATERIAL(e) < 1) continue; target_temperature[e] = 0;//material[e].temperature; target_temperature_bed = max(target_temperature_bed, material[e].bed_temperature); fanSpeedPercent = max(fanSpeedPercent, material[0].fan_speed); volume_to_filament_length[e] = 1.0 / (M_PI * (material[e].diameter / 2.0) * (material[e].diameter / 2.0)); extrudemultiply[e] = material[e].flow; } fanSpeed = 0; enquecommand_P(PSTR("G28")); enquecommand_P(PSTR("G1 F12000 X5 Y10")); lcd_change_to_menu(lcd_menu_print_heatup); }else{ //Classic gcode file //Set the settings to defaults so the classic GCode has full control fanSpeedPercent = 100; for(uint8_t e=0; e<EXTRUDERS; e++) { volume_to_filament_length[e] = 1.0; extrudemultiply[e] = 100; } lcd_change_to_menu(lcd_menu_print_classic_warning, MAIN_MENU_ITEM_POS(0)); } } }else{ lcd_lib_beep(); lcd_clear_cache(); card.chdir(card.filename); SELECT_SCROLL_MENU_ITEM(0); } return;//Return so we do not continue after changing the directory or selecting a file. The nrOfFiles is invalid at this point. } } lcd_scroll_menu(PSTR("SD CARD"), nrOfFiles+1, lcd_sd_menu_filename_callback, lcd_sd_menu_details_callback); }