static void lcd_menu_first_run_bed_level_paper_center() { LED_GLOW(); if (lcd_lib_encoder_pos == ENCODER_NO_SELECTION) lcd_lib_encoder_pos = 0; if (printing_state == PRINT_STATE_NORMAL && lcd_lib_encoder_pos != 0 && movesplanned() < 4) { current_position[Z_AXIS] -= float(lcd_lib_encoder_pos) * 0.05; lcd_lib_encoder_pos = 0; plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 60, 0); } if (movesplanned() > 0) lcd_info_screen(NULL, NULL, PSTR("CONTINUE")); else lcd_info_screen(lcd_menu_first_run_bed_level_paper_left, storeHomingZ_parkHeadForLeftAdjustment, PSTR("CONTINUE")); DRAW_PROGRESS_NR(8); lcd_lib_draw_string_centerP(10, PSTR("Slide a paper between")); lcd_lib_draw_string_centerP(20, PSTR("buildplate and nozzle")); lcd_lib_draw_string_centerP(30, PSTR("until you feel a")); lcd_lib_draw_string_centerP(40, PSTR("bit resistance.")); lcd_lib_update_screen(); }
static void lcd_menu_first_run_bed_level_center_adjust() { LED_GLOW(); if (lcd_lib_encoder_pos == ENCODER_NO_SELECTION) lcd_lib_encoder_pos = 0; if (printing_state == PRINT_STATE_NORMAL && lcd_lib_encoder_pos != 0 && movesplanned() < 4) { current_position[Z_AXIS] -= float(lcd_lib_encoder_pos) * 0.05; plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 60, 0); } lcd_lib_encoder_pos = 0; if (movesplanned() > 0) lcd_info_screen(NULL, NULL, PSTR("CONTINUE")); else lcd_info_screen(lcd_menu_first_run_bed_level_left_adjust, storeHomingZ_parkHeadForLeftAdjustment, PSTR("CONTINUE")); DRAW_PROGRESS_NR(4); lcd_lib_draw_string_centerP(10, PSTR("Rotate the button")); lcd_lib_draw_string_centerP(20, PSTR("until the nozzle is")); lcd_lib_draw_string_centerP(30, PSTR("a millimeter away")); lcd_lib_draw_string_centerP(40, PSTR("from the buildplate.")); lcd_lib_update_screen(); }
static void lcd_menu_first_run_bed_level_paper_center() { LED_GLOW(); if (lcd_lib_encoder_pos == ENCODER_NO_SELECTION) lcd_lib_encoder_pos = 0; if (printing_state == PRINT_STATE_NORMAL && lcd_lib_encoder_pos != 0 && movesplanned() < 4) { current_position[Z_AXIS] -= float(lcd_lib_encoder_pos) * 0.05; lcd_lib_encoder_pos = 0; plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 60, 0); } if (movesplanned() > 0) lcd_info_screen(NULL, NULL, PSTR("POKRACOVAT")); else lcd_info_screen(lcd_menu_first_run_bed_level_paper_left, parkHeadForLeftAdjustment, PSTR("POKRACOVAT")); DRAW_PROGRESS_NR_IF_NOT_DONE(8); lcd_lib_draw_string_centerP(10, PSTR("Zasunte papir mezi")); lcd_lib_draw_string_centerP(20, PSTR("trysku a podlozku,")); lcd_lib_draw_string_centerP(30, PSTR("otacejte dokud")); lcd_lib_draw_string_centerP(40, PSTR("papir neklade odpor")); lcd_lib_update_screen(); }
static void lcd_menu_first_run_bed_level_center_adjust() { LED_GLOW(); if (lcd_lib_encoder_pos == ENCODER_NO_SELECTION) lcd_lib_encoder_pos = 0; if (printing_state == PRINT_STATE_NORMAL && lcd_lib_encoder_pos != 0 && movesplanned() < 4) { current_position[Z_AXIS] -= float(lcd_lib_encoder_pos) * 0.05; plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 60, 0); } lcd_lib_encoder_pos = 0; if (movesplanned() > 0) lcd_info_screen(NULL, NULL, PSTR("POKRACOVAT")); else lcd_info_screen(lcd_menu_first_run_bed_level_left_adjust, parkHeadForLeftAdjustment, PSTR("POKRACOVAT")); DRAW_PROGRESS_NR_IF_NOT_DONE(4); lcd_lib_draw_string_centerP(10, PSTR("Otacejte tlacitkem")); lcd_lib_draw_string_centerP(20, PSTR("dokud nebude tryska")); lcd_lib_draw_string_centerP(30, PSTR("priblizne milimetr")); lcd_lib_draw_string_centerP(40, PSTR("od tiskove podlozky.")); lcd_lib_update_screen(); }
static void lcd_menu_change_material_remove_wait_user() { LED_GLOW(); lcd_question_screen(NULL, lcd_menu_change_material_remove_wait_user_ready, PSTR("READY"), lcd_menu_main, cancelMaterialInsert, PSTR("CANCEL")); lcd_lib_draw_string_centerP(20, PSTR("Remove material")); lcd_lib_update_screen(); }
static void lcd_menu_change_material_remove_wait_user() { LED_GLOW(); setTargetHotend(material[active_extruder].temperature, active_extruder); lcd_question_screen(NULL, lcd_menu_change_material_remove_wait_user_ready, PSTR("READY"), post_change_material_menu, cancelMaterialInsert, PSTR("CANCEL")); lcd_lib_draw_string_centerP(20, PSTR("Remove material")); lcd_lib_update_screen(); }
static void lcd_menu_print_abort() { LED_GLOW(); lcd_question_screen(lcd_menu_print_ready, abortPrint, PSTR("YES"), previousMenu, NULL, PSTR("NO")); lcd_lib_draw_string_centerP(20, PSTR("Abort the print?")); 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(14); 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_first_run_material_select_confirm_abs() { LED_GLOW(); lcd_question_screen(lcd_menu_first_run_material_select_2, NULL, PSTR("YES"), lcd_menu_first_run_material_select_pla_abs, NULL, PSTR("NO")); DRAW_PROGRESS_NR(18); lcd_lib_draw_string_centerP(20, PSTR("You have chosen")); lcd_lib_draw_string_centerP(30, PSTR("ABS as material,")); lcd_lib_draw_string_centerP(40, PSTR("is this right?")); lcd_lib_update_screen(); }
static void lcd_menu_first_run_bed_level_paper_left() { LED_GLOW(); SELECT_MAIN_MENU_ITEM(0); lcd_info_screen(lcd_menu_first_run_bed_level_paper_right, parkHeadForRightAdjustment, PSTR("CONTINUE")); DRAW_PROGRESS_NR(9); lcd_lib_draw_string_centerP(20, PSTR("Repeat this for")); lcd_lib_draw_string_centerP(30, PSTR("the left corner...")); lcd_lib_update_screen(); }
static void lcd_menu_first_run_bed_level_paper_left() { LED_GLOW(); SELECT_MAIN_MENU_ITEM(0); lcd_info_screen(lcd_menu_first_run_bed_level_paper_right, parkHeadForRightAdjustment, PSTR("POKRACOVAT")); DRAW_PROGRESS_NR_IF_NOT_DONE(9); lcd_lib_draw_string_centerP(20, PSTR("Opakujte to stejne")); lcd_lib_draw_string_centerP(30, PSTR("pro levy roh...")); lcd_lib_update_screen(); }
static void lcd_menu_first_run_bed_level_right_adjust() { LED_GLOW(); SELECT_MAIN_MENU_ITEM(0); lcd_info_screen(lcd_menu_first_run_bed_level_paper, NULL, PSTR("CONTINUE")); DRAW_PROGRESS_NR(6); lcd_lib_draw_string_centerP(10, PSTR("Turn right buildplate")); lcd_lib_draw_string_centerP(20, PSTR("screw till the nozzle")); lcd_lib_draw_string_centerP(30, PSTR("is a millimeter away")); lcd_lib_draw_string_centerP(40, PSTR("from the buildplate.")); lcd_lib_update_screen(); }
static void lcd_menu_first_run_bed_level_right_adjust() { LED_GLOW(); SELECT_MAIN_MENU_ITEM(0); lcd_info_screen(lcd_menu_first_run_bed_level_paper, NULL, PSTR("POKRACOVAT")); DRAW_PROGRESS_NR_IF_NOT_DONE(6); lcd_lib_draw_string_centerP(10, PSTR("Otacejte pravym pred-")); lcd_lib_draw_string_centerP(20, PSTR("nim sroubem, dokud")); lcd_lib_draw_string_centerP(30, PSTR("nebude tryska asi")); lcd_lib_draw_string_centerP(40, PSTR("milimetr od podlozky")); lcd_lib_update_screen(); }
static void lcd_menu_first_run_bed_level_paper_right() { LED_GLOW(); SELECT_MAIN_MENU_ITEM(0); if (IS_FIRST_RUN_DONE()) lcd_info_screen(lcd_menu_main, homeBed, PSTR("DONE")); else lcd_info_screen(lcd_menu_first_run_material_load, homeBed, PSTR("CONTINUE")); DRAW_PROGRESS_NR(10); lcd_lib_draw_string_centerP(20, PSTR("Repeat this for")); lcd_lib_draw_string_centerP(30, PSTR("the right corner...")); lcd_lib_update_screen(); }
static void lcd_menu_first_run_bed_level_paper_right() { LED_GLOW(); SELECT_MAIN_MENU_ITEM(0); if (IS_FIRST_RUN_DONE()) lcd_info_screen(lcd_menu_main, homeBed, PSTR("HOTOVO")); else lcd_info_screen(lcd_menu_first_run_material_load, homeBed, PSTR("POKRACOVAT")); DRAW_PROGRESS_NR_IF_NOT_DONE(10); lcd_lib_draw_string_centerP(20, PSTR("Opakujte to stejne")); lcd_lib_draw_string_centerP(30, PSTR("pro levy roh...")); lcd_lib_update_screen(); }
static void lcd_menu_first_run_bed_level_left_adjust() { LED_GLOW(); SELECT_MAIN_MENU_ITEM(0); lcd_info_screen(lcd_menu_first_run_bed_level_right_adjust, parkHeadForRightAdjustment, PSTR("CONTINUE")); DRAW_PROGRESS_NR_IF_NOT_DONE(5); lcd_lib_draw_string_centerP(10, PSTR("Turn left buildplate")); lcd_lib_draw_string_centerP(20, PSTR("screw till the nozzle")); lcd_lib_draw_string_centerP(30, PSTR("is a millimeter away")); lcd_lib_draw_string_centerP(40, PSTR("from the buildplate.")); lcd_lib_update_screen(); }
static void lcd_menu_change_material_remove_wait_user_ready() { run_history = true; current_position[E_AXIS] = 0; plan_set_e_position(current_position[E_AXIS]); lcd_change_to_menu(lcd_menu_change_material_insert_wait_user, MAIN_MENU_ITEM_POS(0)); char buffer[32]; memset (buffer,0,sizeof(buffer)); enquecommand_P(PSTR("G28 X0 Y0")); sprintf_P(buffer, PSTR("G1 F%i X%i Y%i"), int(homing_feedrate[0]), int (X_MAX_LENGTH/2), 10); enquecommand(buffer); LED_GLOW(); }
static void lcd_menu_change_material_insert() { LED_GLOW(); lcd_question_screen(lcd_menu_change_material_select_material, materialInsertReady, PSTR("READY"), lcd_menu_main, cancelMaterialInsert, PSTR("CANCEL")); lcd_lib_draw_string_centerP(20, PSTR("Wait till material")); lcd_lib_draw_string_centerP(30, PSTR("comes out the nozzle")); if (movesplanned() < 2) { current_position[E_AXIS] += 0.5; plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], FILAMENT_INSERT_EXTRUDE_SPEED, active_extruder); } lcd_lib_update_screen(); }
static void lcd_menu_change_material_insert() { LED_GLOW(); lcd_question_screen(post_change_material_menu, materialInsertReady, PSTR("READY"), post_change_material_menu, cancelMaterialInsert, PSTR("CANCEL")); lcd_lib_draw_string_centerP(20, PSTR("Wait till material")); lcd_lib_draw_string_centerP(30, PSTR("comes out the nozzle")); if (movesplanned() < 2) { plan_set_e_position(0); plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], 0.5 / volume_to_filament_length[active_extruder], FILAMENT_INSERT_EXTRUDE_SPEED, active_extruder); } lcd_lib_update_screen(); }
static void lcd_menu_change_material_insert_wait_user() { LED_GLOW(); if (printing_state == PRINT_STATE_NORMAL && movesplanned() < 2) { current_position[E_AXIS] += 0.5; plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], FILAMENT_INSERT_SPEED, active_extruder); } lcd_question_screen(NULL, lcd_menu_change_material_insert_wait_user_ready, PSTR("READY"), lcd_menu_main, cancelMaterialInsert, PSTR("CANCEL")); lcd_lib_draw_string_centerP(10, PSTR("Insert new material")); lcd_lib_draw_string_centerP(20, PSTR("from the backside of")); lcd_lib_draw_string_centerP(30, PSTR("your machine,")); lcd_lib_draw_string_centerP(40, PSTR("above the arrow.")); lcd_lib_update_screen(); }
static void lcd_menu_first_run_material_load_wait() { LED_GLOW(); lcd_info_screen(lcd_menu_first_run_material_select_1, doCooldown, PSTR("CONTINUE")); DRAW_PROGRESS_NR(15); lcd_lib_draw_string_centerP(10, PSTR("Push button when")); lcd_lib_draw_string_centerP(20, PSTR("material exits")); lcd_lib_draw_string_centerP(30, PSTR("from nozzle...")); if (movesplanned() < 2) { current_position[E_AXIS] += 0.5; plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], FILAMENT_INSERT_EXTRUDE_SPEED, 0); } lcd_lib_update_screen(); }
static void lcd_menu_first_run_material_load_insert() { LED_GLOW(); if (movesplanned() < 2) { current_position[E_AXIS] += 0.5; plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], FILAMENT_INSERT_SPEED, 0); } SELECT_MAIN_MENU_ITEM(0); lcd_info_screen(lcd_menu_first_run_material_load_forward, runMaterialForward, PSTR("CONTINUE")); DRAW_PROGRESS_NR(13); lcd_lib_draw_string_centerP(10, PSTR("Insert new material")); lcd_lib_draw_string_centerP(20, PSTR("from the rear of")); lcd_lib_draw_string_centerP(30, PSTR("your Ultimaker2,")); lcd_lib_draw_string_centerP(40, PSTR("above the arrow.")); lcd_lib_update_screen(); }
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_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_first_run_material_select_pla_abs() { LED_GLOW(); lcd_tripple_menu(PSTR("PLA"), PSTR("ABS"), NULL); DRAW_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. if (IS_SELECTED_MAIN(0)) { lcd_material_reset_defaults(); lcd_material_set_material(0); lcd_change_to_menu(lcd_menu_first_run_material_select_confirm_pla); } else if (IS_SELECTED_MAIN(1)) { lcd_material_reset_defaults(); lcd_material_set_material(1); lcd_change_to_menu(lcd_menu_first_run_material_select_confirm_abs); } } }
static void lcd_menu_material_import() { if (!card.sdInserted) { LED_GLOW(); lcd_lib_encoder_pos = MAIN_MENU_ITEM_POS(0); lcd_info_screen(lcd_menu_material_select); 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_material_select); lcd_lib_draw_string_centerP(16, PSTR("Reading card...")); lcd_lib_update_screen(); card.initsd(); return; } card.setroot(); card.openFile("MATERIAL.TXT", true); if (!card.isFileOpen()) { lcd_info_screen(lcd_menu_material_select); lcd_lib_draw_string_centerP(15, PSTR("No export file")); lcd_lib_draw_string_centerP(25, PSTR("Found on card.")); lcd_lib_update_screen(); return; } char buffer[32]; uint8_t count = 0xFF; while(card.fgets(buffer, sizeof(buffer)) > 0) { buffer[sizeof(buffer)-1] = '\0'; char* c = strchr(buffer, '\n'); if (c) *c = '\0'; if(strcmp_P(buffer, PSTR("[material]")) == 0) { count++; }else if (count < EEPROM_MATERIAL_SETTINGS_MAX_COUNT) { c = strchr(buffer, '='); if (c) { *c++ = '\0'; if (strcmp_P(buffer, PSTR("name")) == 0) { eeprom_write_block(c, EEPROM_MATERIAL_NAME_OFFSET(count), 8); }else if (strcmp_P(buffer, PSTR("temperature")) == 0) { eeprom_write_word(EEPROM_MATERIAL_TEMPERATURE_OFFSET(count), strtol(c, NULL, 10)); }else if (strcmp_P(buffer, PSTR("bed_temperature")) == 0) { eeprom_write_word(EEPROM_MATERIAL_BED_TEMPERATURE_OFFSET(count), strtol(c, NULL, 10)); }else if (strcmp_P(buffer, PSTR("fan_speed")) == 0) { eeprom_write_byte(EEPROM_MATERIAL_FAN_SPEED_OFFSET(count), strtol(c, NULL, 10)); }else if (strcmp_P(buffer, PSTR("flow")) == 0) { eeprom_write_word(EEPROM_MATERIAL_FLOW_OFFSET(count), strtol(c, NULL, 10)); }else if (strcmp_P(buffer, PSTR("diameter")) == 0) { eeprom_write_float(EEPROM_MATERIAL_DIAMETER_OFFSET(count), strtod(c, NULL)); #ifdef USE_CHANGE_TEMPERATURE }else if (strcmp_P(buffer, PSTR("change_temp")) == 0) { eeprom_write_word(EEPROM_MATERIAL_CHANGE_TEMPERATURE(count), strtol(c, NULL, 10)); }else if (strcmp_P(buffer, PSTR("change_wait")) == 0) { eeprom_write_byte(EEPROM_MATERIAL_CHANGE_WAIT_TIME(count), strtol(c, NULL, 10)); #endif } } } } count++; if (count > 0) { eeprom_write_byte(EEPROM_MATERIAL_COUNT_OFFSET(), count); } card.closefile(); currentMenu = lcd_menu_material_import_done; }
static void lcd_menu_material_export() { if (!card.sdInserted) { LED_GLOW(); lcd_lib_encoder_pos = MAIN_MENU_ITEM_POS(0); lcd_info_screen(lcd_menu_material_select); 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_material_select); lcd_lib_draw_string_centerP(16, PSTR("Reading card...")); lcd_lib_update_screen(); card.initsd(); return; } card.setroot(); card.openFile("MATERIAL.TXT", false); uint8_t count = eeprom_read_byte(EEPROM_MATERIAL_COUNT_OFFSET()); for(uint8_t n=0; n<count; n++) { char buffer[32]; strcpy_P(buffer, PSTR("[material]\n")); card.write_string(buffer); strcpy_P(buffer, PSTR("name=")); char* ptr = buffer + strlen(buffer); eeprom_read_block(ptr, EEPROM_MATERIAL_NAME_OFFSET(n), 8); ptr[8] = '\0'; strcat_P(buffer, PSTR("\n")); card.write_string(buffer); strcpy_P(buffer, PSTR("temperature=")); ptr = buffer + strlen(buffer); int_to_string(eeprom_read_word(EEPROM_MATERIAL_TEMPERATURE_OFFSET(n)), ptr, PSTR("\n")); card.write_string(buffer); #if TEMP_SENSOR_BED != 0 strcpy_P(buffer, PSTR("bed_temperature=")); ptr = buffer + strlen(buffer); int_to_string(eeprom_read_word(EEPROM_MATERIAL_BED_TEMPERATURE_OFFSET(n)), ptr, PSTR("\n")); card.write_string(buffer); #endif strcpy_P(buffer, PSTR("fan_speed=")); ptr = buffer + strlen(buffer); int_to_string(eeprom_read_byte(EEPROM_MATERIAL_FAN_SPEED_OFFSET(n)), ptr, PSTR("\n")); card.write_string(buffer); strcpy_P(buffer, PSTR("flow=")); ptr = buffer + strlen(buffer); int_to_string(eeprom_read_word(EEPROM_MATERIAL_FLOW_OFFSET(n)), ptr, PSTR("\n")); card.write_string(buffer); strcpy_P(buffer, PSTR("diameter=")); ptr = buffer + strlen(buffer); float_to_string(eeprom_read_float(EEPROM_MATERIAL_DIAMETER_OFFSET(n)), ptr, PSTR("\n\n")); card.write_string(buffer); #ifdef USE_CHANGE_TEMPERATURE strcpy_P(buffer, PSTR("change_temp=")); ptr = buffer + strlen(buffer); float_to_string(eeprom_read_word(EEPROM_MATERIAL_CHANGE_TEMPERATURE(n)), ptr, PSTR("\n\n")); card.write_string(buffer); strcpy_P(buffer, PSTR("change_wait=")); ptr = buffer + strlen(buffer); float_to_string(eeprom_read_byte(EEPROM_MATERIAL_CHANGE_WAIT_TIME(n)), ptr, PSTR("\n\n")); card.write_string(buffer); #endif } card.closefile(); currentMenu = lcd_menu_material_export_done; }
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); }