void lcd_change_to_menu(menuFunc_t nextMenu, int16_t newEncoderPos, uint8_t direction) { minProgress = 5; led_glow = led_glow_dir = 0; lcd_lib_beep(); if (currentMenu==lcd_swift_down || currentMenu==lcd_swift_up || currentMenu==lcd_swift_forward || currentMenu==lcd_swift_backward) { previousMenu = currentBackUpMenu; SERIAL_DEBUGLNPGM("inside swift"); } else{ previousMenu = currentMenu; } previousEncoderPos = lcd_lib_encoder_pos; switch (direction) { case MenuBackward: currentMenu = lcd_swift_backward; break; case MenuForward: currentMenu = lcd_swift_forward; break; case MenuUp: currentMenu = lcd_swift_up; break; case MenuDown: currentMenu = lcd_swift_down; break; default: break; } currentBackUpMenu = nextMenu; nextEncoderPos = newEncoderPos; swiftStep=0; }
static void lcd_menu_change_material_remove() { lcd_info_screen(lcd_menu_material_main, cancelMaterialInsert); lcd_lib_draw_stringP(3, 20, PSTR("Reversing material")); if (!blocks_queued()) { lcd_lib_beep(); led_glow_dir = led_glow = 0; currentMenu = lcd_menu_change_material_remove_wait_user; SELECT_MAIN_MENU_ITEM(0); //Disable the extruder motor so you can pull out the remaining filament. disable_e0(); disable_e1(); disable_e2(); } long pos = -st_get_position(E_AXIS); long targetPos = lround(FILAMENT_REVERSAL_LENGTH*axis_steps_per_unit[E_AXIS]); uint8_t progress = (pos * 125 / targetPos); lcd_progressbar(progress); lcd_lib_update_screen(); }
static void lcd_menu_print_tune() { lcd_scroll_menu(PSTR("TUNE"), 7 + EXTRUDERS * 2, tune_item_callback, tune_item_details_callback); if (lcd_lib_button_pressed) { if (IS_SELECTED_SCROLL(0)) { if (card.sdprinting) lcd_change_to_menu(lcd_menu_print_printing); else lcd_change_to_menu(lcd_menu_print_heatup); }else if (IS_SELECTED_SCROLL(1)) { if (card.sdprinting) { if (card.pause) { if (movesplanned() < 1) { card.pause = false; lcd_lib_beep(); } } else { if (movesplanned() > 0 && commands_queued() < BUFSIZE) { lcd_lib_beep(); card.pause = true; if (current_position[Z_AXIS] < 170) enquecommand_P(PSTR("M601 X10 Y20 Z20 L30")); else if (current_position[Z_AXIS] < 200) enquecommand_P(PSTR("M601 X10 Y20 Z2 L30")); else enquecommand_P(PSTR("M601 X10 Y20 Z0 L30")); } } } }else if (IS_SELECTED_SCROLL(2)) LCD_EDIT_SETTING(feedmultiply, "Print speed", "%", 10, 1000); else if (IS_SELECTED_SCROLL(3)) lcd_change_to_menu(lcd_menu_print_tune_heatup_nozzle0, 0); #if EXTRUDERS > 1 else if (IS_SELECTED_SCROLL(4)) lcd_change_to_menu(lcd_menu_print_tune_heatup_nozzle1, 0); #endif else if (IS_SELECTED_SCROLL(3 + EXTRUDERS)) lcd_change_to_menu(lcd_menu_maintenance_advanced_bed_heatup, 0);//Use the maintainace heatup menu, which shows the current temperature. else if (IS_SELECTED_SCROLL(4 + EXTRUDERS)) LCD_EDIT_SETTING_BYTE_PERCENT(fanSpeed, "Fan speed", "%", 0, 100); else if (IS_SELECTED_SCROLL(5 + EXTRUDERS)) LCD_EDIT_SETTING(extrudemultiply[0], "Material flow", "%", 10, 1000); #if EXTRUDERS > 1 else if (IS_SELECTED_SCROLL(6 + EXTRUDERS)) LCD_EDIT_SETTING(extrudemultiply[1], "Material flow 2", "%", 10, 1000); #endif else if (IS_SELECTED_SCROLL(5 + EXTRUDERS * 2)) lcd_change_to_menu(lcd_menu_print_tune_retraction); else if (IS_SELECTED_SCROLL(6 + EXTRUDERS * 2)) LCD_EDIT_SETTING(led_brightness_level, "Brightness", "%", 0, 100); } }
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); }