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_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)); } }
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); }