static void lcd_menu_material_settings() { lcd_scroll_menu(PSTR("MATERIAL"), 7, lcd_material_settings_callback, lcd_material_settings_details_callback); if (lcd_lib_button_pressed) { if (IS_SELECTED_SCROLL(0)) { lcd_change_to_menu(lcd_menu_material_main); lcd_material_store_current_material(); } else if (IS_SELECTED_SCROLL(1)) LCD_EDIT_SETTING(material[active_extruder].temperature, "Temperature", "C", 0, HEATER_0_MAXTEMP - 15); else if (IS_SELECTED_SCROLL(2)) LCD_EDIT_SETTING(material[active_extruder].bed_temperature, "Buildplate Temp.", "C", 0, BED_MAXTEMP - 15); else if (IS_SELECTED_SCROLL(3)) LCD_EDIT_SETTING_FLOAT001(material[active_extruder].diameter, "Material Diameter", "mm", 0, 100); else if (IS_SELECTED_SCROLL(4)) LCD_EDIT_SETTING(material[active_extruder].fan_speed, "Fan speed", "%", 0, 100); else if (IS_SELECTED_SCROLL(5)) LCD_EDIT_SETTING(material[active_extruder].flow, "Material flow", "%", 1, 1000); else if (IS_SELECTED_SCROLL(6)) lcd_change_to_menu(lcd_menu_material_settings_store); } }
static void lcd_menu_change_material_select_material() { uint8_t count = eeprom_read_byte(EEPROM_MATERIAL_COUNT_OFFSET()); lcd_scroll_menu(PSTR("MATERIAL"), count, lcd_menu_change_material_select_material_callback, lcd_menu_change_material_select_material_details_callback); if (lcd_lib_button_pressed) { lcd_material_set_material(SELECTED_SCROLL_MENU_ITEM(), active_extruder); lcd_change_to_menu(lcd_menu_material_selected, MAIN_MENU_ITEM_POS(0)); } }
static void lcd_menu_material_settings() { #ifdef USE_CHANGE_TEMPERATURE lcd_scroll_menu(PSTR("MATERIAL"), 8 + BED_MENU_OFFSET, lcd_material_settings_callback, lcd_material_settings_details_callback); #else lcd_scroll_menu(PSTR("MATERIAL"), 6 + BED_MENU_OFFSET, lcd_material_settings_callback, lcd_material_settings_details_callback); #endif if (lcd_lib_button_pressed) { if (IS_SELECTED_SCROLL(0)) { lcd_change_to_menu(lcd_menu_material_main); lcd_material_store_current_material(); }else if (IS_SELECTED_SCROLL(1)) LCD_EDIT_SETTING(material[active_extruder].temperature, "Temperature", "C", 0, HEATER_0_MAXTEMP - 15); #if TEMP_SENSOR_BED != 0 else if (IS_SELECTED_SCROLL(2)) LCD_EDIT_SETTING(material[active_extruder].bed_temperature, "Buildplate Temp.", "C", 0, BED_MAXTEMP - 15); #endif else if (IS_SELECTED_SCROLL(2 + BED_MENU_OFFSET)) LCD_EDIT_SETTING_FLOAT001(material[active_extruder].diameter, "Material Diameter", "mm", 0, 100); else if (IS_SELECTED_SCROLL(3 + BED_MENU_OFFSET)) LCD_EDIT_SETTING(material[active_extruder].fan_speed, "Fan speed", "%", 0, 100); else if (IS_SELECTED_SCROLL(4 + BED_MENU_OFFSET)) LCD_EDIT_SETTING(material[active_extruder].flow, "Material flow", "%", 1, 1000); #ifdef USE_CHANGE_TEMPERATURE else if (IS_SELECTED_SCROLL(5 + BED_MENU_OFFSET)) LCD_EDIT_SETTING(material[active_extruder].change_temperature, "Change temperature", "C", 0, HEATER_0_MAXTEMP - 15); else if (IS_SELECTED_SCROLL(6 + BED_MENU_OFFSET)) LCD_EDIT_SETTING(material[active_extruder].change_preheat_wait_time, "Change wait time", "sec", 0, 180); else if (IS_SELECTED_SCROLL(7 + BED_MENU_OFFSET)) lcd_change_to_menu(lcd_menu_material_settings_store); #else else if (IS_SELECTED_SCROLL(5 + BED_MENU_OFFSET)) lcd_change_to_menu(lcd_menu_material_settings_store); #endif } }
static void lcd_menu_print_tune_retraction() { lcd_scroll_menu(PSTR("RETRACTION"), 3 + (EXTRUDERS > 1 ? 1 : 0), lcd_retraction_item, lcd_retraction_details); if (lcd_lib_button_pressed) { if (IS_SELECTED_SCROLL(0)) lcd_change_to_menu(lcd_menu_print_tune, SCROLL_MENU_ITEM_POS(6)); else if (IS_SELECTED_SCROLL(1)) LCD_EDIT_SETTING_FLOAT001(retract_length, "Retract length", "mm", 0, 50); else if (IS_SELECTED_SCROLL(2)) LCD_EDIT_SETTING_SPEED(retract_feedrate, "Retract speed", "mm/sec", 0, max_feedrate[E_AXIS] * 60); #if EXTRUDERS > 1 else if (IS_SELECTED_SCROLL(3)) LCD_EDIT_SETTING_FLOAT001(extruder_swap_retract_length, "Extruder change", "mm", 0, 50); #endif } }
static void lcd_menu_material_select() { uint8_t count = eeprom_read_byte(EEPROM_MATERIAL_COUNT_OFFSET()); lcd_scroll_menu(PSTR("MATERIAL"), count + MATERIAL_PRESETS, lcd_material_select_callback, lcd_material_select_details_callback); if (lcd_lib_button_pressed) { if (IS_SELECTED_SCROLL(0)) lcd_change_to_menu(lcd_menu_material_main); else if (IS_SELECTED_SCROLL(count + 1)) lcd_change_to_menu(lcd_menu_material_settings); else { lcd_material_set_material(SELECTED_SCROLL_MENU_ITEM() - 1, active_extruder); lcd_change_to_menu(lcd_menu_material_selected, MAIN_MENU_ITEM_POS(0)); } } }
static void lcd_menu_first_run_material_select_material() { LED_GLOW(); uint8_t count = eeprom_read_byte(EEPROM_MATERIAL_COUNT_OFFSET()); lcd_scroll_menu(PSTR("MATERIAL"), count, lcd_material_select_callback, lcd_material_select_details_callback); CLEAR_PROGRESS_NR(17); lcd_lib_update_screen(); if (lcd_lib_button_pressed) { digipot_current(2, motor_current_setting[2]);//Set E motor power to default. for(uint8_t e=0; e<EXTRUDERS; e++) lcd_material_set_material(SELECTED_SCROLL_MENU_ITEM(), e); SET_FIRST_RUN_DONE(); lcd_change_to_menu(lcd_menu_first_run_material_select_confirm_material); strcat_P(card.longFilename, PSTR(" as material,")); } }
static void lcd_menu_material_settings_store() { uint8_t count = eeprom_read_byte(EEPROM_MATERIAL_COUNT_OFFSET()); if (count == EEPROM_MATERIAL_SETTINGS_MAX_COUNT) count--; lcd_scroll_menu(PSTR("PRESETS"), 2 + count, lcd_menu_material_settings_store_callback, lcd_menu_material_settings_store_details_callback); if (lcd_lib_button_pressed) { if (!IS_SELECTED_SCROLL(0)) { uint8_t idx = SELECTED_SCROLL_MENU_ITEM() - 1; if (idx == count) { char buffer[9] = "CUSTOM"; int_to_string(idx - 1, buffer + 6); eeprom_write_block(buffer, EEPROM_MATERIAL_NAME_OFFSET(idx), 8); eeprom_write_byte(EEPROM_MATERIAL_COUNT_OFFSET(), idx + 1); } lcd_material_store_material(idx); } lcd_change_to_menu(lcd_menu_material_settings, SCROLL_MENU_ITEM_POS(6)); } }
static void lcd_menu_material_settings_store() { uint8_t count = eeprom_read_byte(EEPROM_MATERIAL_COUNT_OFFSET()); if (count == EEPROM_MATERIAL_SETTINGS_MAX_COUNT) count--; lcd_scroll_menu(PSTR("PRESETS"), MATERIAL_PRESETS + count, lcd_menu_material_settings_store_callback, lcd_menu_material_settings_store_details_callback); if (lcd_lib_button_pressed) { if (!IS_SELECTED_SCROLL(0)) { uint8_t idx = SELECTED_SCROLL_MENU_ITEM() - 1; if (idx == count) { makeCustomName(idx); eeprom_write_block(material_name_buf, EEPROM_MATERIAL_NAME_OFFSET(idx), MATERIAL_NAME_LENGTH); eeprom_write_byte(EEPROM_MATERIAL_COUNT_OFFSET(), idx + 1); } lcd_material_store_material(idx); lcd_lib_beep_ext (600,100); } lcd_change_to_menu(lcd_menu_material_settings, SCROLL_MENU_ITEM_POS(6)); } }
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); }