void lcd_menu_material() { #if EXTRUDERS > 1 lcd_tripple_menu(PSTR("PRIMARY|NOZZLE"), PSTR("SECONDARY|NOZZLE"), PSTR("RETURN")); if (lcd_lib_button_pressed) { if (IS_SELECTED_MAIN(0)) { active_extruder = 0; lcd_change_to_menu(lcd_menu_material_main); } else if (IS_SELECTED_MAIN(1)) { active_extruder = 1; lcd_change_to_menu(lcd_menu_material_main); } else if (IS_SELECTED_MAIN(2)) lcd_change_to_menu(lcd_menu_main); } lcd_lib_update_screen(); #else currentMenu = lcd_menu_material_main; #endif }
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); } }
void lcd_info_screen(menuFunc_t cancelMenu, menuFunc_t callbackOnCancel, const char* cancelButtonText) { if (lcd_lib_encoder_pos != ENCODER_NO_SELECTION) { if (lcd_lib_encoder_pos < 0) lcd_lib_encoder_pos += 2*ENCODER_TICKS_PER_MAIN_MENU_ITEM; if (lcd_lib_encoder_pos >= 2*ENCODER_TICKS_PER_MAIN_MENU_ITEM) lcd_lib_encoder_pos -= 2*ENCODER_TICKS_PER_MAIN_MENU_ITEM; } if (lcd_lib_button_pressed && IS_SELECTED_MAIN(0)) { if (callbackOnCancel) callbackOnCancel(); if (cancelMenu) lcd_change_to_menu(cancelMenu); } lcd_basic_screen(); if (!cancelButtonText) cancelButtonText = PSTR("CANCEL"); if (IS_SELECTED_MAIN(0)) { lcd_lib_draw_box(3+2, 49+2, 125-2, 63-2); lcd_lib_set(3+3, 49+3, 125-3, 63-3); lcd_lib_clear_stringP(65 - strlen_P(cancelButtonText) * 3, 53, cancelButtonText); }else{ lcd_lib_draw_stringP(65 - strlen_P(cancelButtonText) * 3, 53, cancelButtonText); } }
void lcd_menu_maintenance() { lcd_tripple_menu(PSTR("TISKOVA|PODLOZKA"), PSTR("POKROCILE|NASTAVENI"), PSTR("ZPET")); if (lcd_lib_button_pressed) { if (IS_SELECTED_MAIN(0)) lcd_change_to_menu(lcd_menu_first_run_start_bed_leveling); else if (IS_SELECTED_MAIN(1)) lcd_change_to_menu(lcd_menu_maintenance_advanced); else if (IS_SELECTED_MAIN(2)) lcd_change_to_menu(lcd_menu_main); } lcd_lib_update_screen(); }
void lcd_menu_maintenance() { lcd_tripple_menu(PSTR("BUILD-|PLATE"), PSTR("ADVANCED"), PSTR("RETURN")); if (lcd_lib_button_pressed) { if (IS_SELECTED_MAIN(0)) lcd_change_to_menu(lcd_menu_first_run_start_bed_leveling); else if (IS_SELECTED_MAIN(1)) lcd_change_to_menu(lcd_menu_maintenance_advanced); else if (IS_SELECTED_MAIN(2)) lcd_change_to_menu(lcd_menu_main); } lcd_lib_update_screen(); }
static void lcd_menu_material_select() { uint8_t count = eeprom_read_byte(EEPROM_MATERIAL_COUNT_OFFSET()); lcd_scroll_menu(PSTR("MATERIAL"), count + 2, 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_material_main() { lcd_tripple_menu(PSTR("CHANGE"), PSTR("SETTINGS"), PSTR("RETURN")); if (lcd_lib_button_pressed) { if (IS_SELECTED_MAIN(0)) { minProgress = 0; lcd_change_to_menu(lcd_menu_change_material_preheat); } 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(); }
static void lcd_menu_change_material_remove_wait_user_ready() { 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]; 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); }
void lcd_question_screen(menuFunc_t optionAMenu, menuFunc_t callbackOnA, const char* AButtonText, menuFunc_t optionBMenu, menuFunc_t callbackOnB, const char* BButtonText) { if (lcd_lib_encoder_pos != ENCODER_NO_SELECTION) { if (lcd_lib_encoder_pos < 0) lcd_lib_encoder_pos += 2*ENCODER_TICKS_PER_MAIN_MENU_ITEM; if (lcd_lib_encoder_pos >= 2*ENCODER_TICKS_PER_MAIN_MENU_ITEM) lcd_lib_encoder_pos -= 2*ENCODER_TICKS_PER_MAIN_MENU_ITEM; } if (lcd_lib_button_pressed) { if (IS_SELECTED_MAIN(0)) { if (callbackOnA) callbackOnA(); if (optionAMenu) lcd_change_to_menu(optionAMenu); }else if (IS_SELECTED_MAIN(1)) { if (callbackOnB) callbackOnB(); if (optionBMenu) lcd_change_to_menu(optionBMenu); } } lcd_basic_screen(); if (IS_SELECTED_MAIN(0)) { lcd_lib_draw_box(3+2, 49+2, 64-2, 63-2); lcd_lib_set(3+3, 49+3, 64-3, 63-3); lcd_lib_clear_stringP(35 - strlen_P(AButtonText) * 3, 53, AButtonText); }else{ lcd_lib_draw_stringP(35 - strlen_P(AButtonText) * 3, 53, AButtonText); } if (IS_SELECTED_MAIN(1)) { lcd_lib_draw_box(64+2, 49+2, 64+60-2, 63-2); lcd_lib_set(64+3, 49+3, 64+60-3, 63-3); lcd_lib_clear_stringP(64+31 - strlen_P(BButtonText) * 3, 53, BButtonText); }else{ lcd_lib_draw_stringP(64+31 - strlen_P(BButtonText) * 3, 53, BButtonText); } }
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_insert_material_preheat, 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_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(); }
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); } } }
void lcd_menu_edit_setting() { if (lcd_lib_encoder_pos < lcd_setting_min) lcd_lib_encoder_pos = lcd_setting_min; if (lcd_lib_encoder_pos > lcd_setting_max) lcd_lib_encoder_pos = lcd_setting_max; if (lcd_setting_type == 1) *(uint8_t*)lcd_setting_ptr = lcd_lib_encoder_pos; else if (lcd_setting_type == 2) *(uint16_t*)lcd_setting_ptr = lcd_lib_encoder_pos; else if (lcd_setting_type == 3) *(float*)lcd_setting_ptr = float(lcd_lib_encoder_pos) / 100.0; else if (lcd_setting_type == 4) *(int32_t*)lcd_setting_ptr = lcd_lib_encoder_pos; else if (lcd_setting_type == 5) *(uint8_t*)lcd_setting_ptr = lround(lcd_lib_encoder_pos * 255 / 100.0); else if (lcd_setting_type == 6) *(float*)lcd_setting_ptr = float(lcd_lib_encoder_pos) * 60; else if (lcd_setting_type == 7) *(float*)lcd_setting_ptr = float(lcd_lib_encoder_pos) * 100; else if (lcd_setting_type == 8) *(float*)lcd_setting_ptr = float(lcd_lib_encoder_pos); else if (lcd_setting_type == 9) *(uint8_t*)lcd_setting_ptr = lcd_lib_encoder_pos; lcd_lib_clear(); char buffer[16]; if (lcd_setting_type == 3) float_to_string(float(lcd_lib_encoder_pos) / 100.0, buffer, lcd_setting_postfix); else int_to_string(lcd_lib_encoder_pos, buffer, lcd_setting_postfix); lcd_lib_draw_string_centerP(LS(20, 11, 11) , lcd_setting_name); lcd_lib_draw_string_center(LS(30, 24, 24) , buffer); if (lcd_lib_button_pressed) { lcd_change_to_menu(previousMenu, previousEncoderPos, MenuBackward); lcd_lib_button_up_down_reversed=false; if (lcd_setting_type == 9) { Config_StoreSettings(); } } }
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_change_material_insert_wait_user_ready() { //Override the max feedrate and acceleration values to get a better insert speed and speedup/slowdown float old_max_feedrate_e = max_feedrate[E_AXIS]; float old_retract_acceleration = retract_acceleration; max_feedrate[E_AXIS] = FILAMENT_INSERT_FAST_SPEED; retract_acceleration = FILAMENT_LONG_MOVE_ACCELERATION; plan_set_e_position(0); plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], FILAMENT_FORWARD_LENGTH / volume_to_filament_length[active_extruder], FILAMENT_INSERT_FAST_SPEED, active_extruder); //Put back origonal values. max_feedrate[E_AXIS] = old_max_feedrate_e; retract_acceleration = old_retract_acceleration; lcd_change_to_menu(lcd_menu_change_material_insert_forward); }
void lcd_info_screen(menuFunc_t cancelMenu, menuFunc_t callbackOnCancel, const char* cancelButtonText, uint8_t direction) { lcd_lib_encoder_pos = 0; if (lcd_lib_button_pressed && IS_SELECTED_MAIN(0)) { if (cancelMenu) lcd_change_to_menu(cancelMenu,MAIN_MENU_ITEM_POS(0), direction); if (callbackOnCancel) callbackOnCancel(); } lcd_basic_screen(); if (!cancelButtonText) cancelButtonText = LS(PSTR("CANCEL"), PSTR("\xD8" "\x80" "\xD9" "\x80" ), PSTR("\xFF" "\x82" "\xC6" "\x82" )) ; switch (languageType) { case LANGUAGE_CHINESE: case LANGUAGE_KOREAN: if (IS_SELECTED_MAIN(0)) { lcd_lib_draw_box(3+3, 54-3+1, 63+61-3, 64-1); lcd_lib_set(3+4, 54-3+2, 63+61-4, 64-2); lcd_lib_clear_stringP(65 - strlen_P(cancelButtonText) * 3, 56-3, cancelButtonText); }else{ lcd_lib_draw_stringP(65 - strlen_P(cancelButtonText) * 3, 56-3, cancelButtonText); } break; case LANGUAGE_ENGLISH: if (IS_SELECTED_MAIN(0)) { lcd_lib_draw_box(3+3, 54+1, 63+61-3, 64-1); lcd_lib_set(3+4, 54+2, 63+61-4, 64-2); lcd_lib_clear_stringP(65 - strlen_P(cancelButtonText) * 3, 56, cancelButtonText); }else{ lcd_lib_draw_stringP(65 - strlen_P(cancelButtonText) * 3, 56, cancelButtonText); } break; default: break; } }
void lcd_menu_edit_setting() { if (lcd_lib_encoder_pos < lcd_setting_min) lcd_lib_encoder_pos = lcd_setting_min; if (lcd_lib_encoder_pos > lcd_setting_max) lcd_lib_encoder_pos = lcd_setting_max; if (lcd_setting_type == 1) *(uint8_t*)lcd_setting_ptr = lcd_lib_encoder_pos; else if (lcd_setting_type == 2) *(uint16_t*)lcd_setting_ptr = lcd_lib_encoder_pos; else if (lcd_setting_type == 3) *(float*)lcd_setting_ptr = float(lcd_lib_encoder_pos) / 100.0; else if (lcd_setting_type == 4) *(int32_t*)lcd_setting_ptr = lcd_lib_encoder_pos; else if (lcd_setting_type == 5) *(uint8_t*)lcd_setting_ptr = lcd_lib_encoder_pos * 255 / 100; else if (lcd_setting_type == 6) *(float*)lcd_setting_ptr = float(lcd_lib_encoder_pos) * 60; else if (lcd_setting_type == 7) *(float*)lcd_setting_ptr = float(lcd_lib_encoder_pos) * 100; else if (lcd_setting_type == 8) *(float*)lcd_setting_ptr = float(lcd_lib_encoder_pos); lcd_basic_screen(); lcd_lib_draw_string_centerP(20, lcd_setting_name); char buffer[LCD_MAX_TEXT_LINE_LENGTH + 1]; // Longest string: "Prev: 20000mm/sec^2" = 19 characters + 1 if (lcd_setting_type == 3) float_to_string(float(lcd_lib_encoder_pos) / 100.0, buffer, lcd_setting_postfix); else int_to_string(lcd_lib_encoder_pos, buffer, lcd_setting_postfix); lcd_lib_draw_string_center(30, buffer); strcpy_P(buffer, PSTR("Prev: ")); if (lcd_setting_type == 3) float_to_string(float(lcd_setting_start_value) / 100.0, buffer + 6, lcd_setting_postfix); else int_to_string(lcd_setting_start_value, buffer + 6, lcd_setting_postfix); lcd_lib_draw_string_center(53, buffer); lcd_lib_update_screen(); if (lcd_lib_button_pressed) lcd_change_to_menu(previousMenu, previousEncoderPos); }
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,")); } }
void lcd_menu_print_tune_heatup_nozzle1() { if (lcd_lib_encoder_pos / ENCODER_TICKS_PER_SCROLL_MENU_ITEM != 0) { target_temperature[1] = int(target_temperature[1]) + (lcd_lib_encoder_pos / ENCODER_TICKS_PER_SCROLL_MENU_ITEM); if (target_temperature[1] < 0) target_temperature[1] = 0; if (target_temperature[1] > HEATER_0_MAXTEMP - 15) target_temperature[1] = HEATER_0_MAXTEMP - 15; lcd_lib_encoder_pos = 0; } if (lcd_lib_button_pressed) lcd_change_to_menu(previousMenu, previousEncoderPos); lcd_lib_clear(); lcd_lib_draw_string_centerP(20, PSTR("Nozzle2 temperature:")); lcd_lib_draw_string_centerP(53, PSTR("Click to return")); char buffer[16]; int_to_string(int(current_temperature[1]), buffer, PSTR("C/")); int_to_string(int(target_temperature[1]), buffer+strlen(buffer), PSTR("C")); lcd_lib_draw_string_center(30, buffer); lcd_lib_update_screen(); }
static void lcd_menu_change_material_insert_wait_user_ready() { run_history = true; //Override the max feedrate and acceleration values to get a better insert speed and speedup/slowdown float old_max_feedrate_e = max_feedrate[E_AXIS]; float old_retract_acceleration = retract_acceleration; max_feedrate[E_AXIS] = FILAMENT_INSERT_FAST_SPEED; retract_acceleration = FILAMENT_LONG_MOVE_ACCELERATION; current_position[E_AXIS] = 0; plan_set_e_position(current_position[E_AXIS]); for(uint8_t n=0; n<6; n++) { current_position[E_AXIS] += FILAMENT_FORWARD_LENGTH / 6; plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], FILAMENT_INSERT_FAST_SPEED, active_extruder); } //Put back origonal values. max_feedrate[E_AXIS] = old_max_feedrate_e; retract_acceleration = old_retract_acceleration; lcd_change_to_menu(lcd_menu_change_material_insert_forward); }
void lcd_menu_edit_setting() { if (lcd_lib_encoder_pos < lcd_setting_min) lcd_lib_encoder_pos = lcd_setting_min; if (lcd_lib_encoder_pos > lcd_setting_max) lcd_lib_encoder_pos = lcd_setting_max; if (lcd_setting_type == 1) *(uint8_t*)lcd_setting_ptr = lcd_lib_encoder_pos; else if (lcd_setting_type == 2) *(uint16_t*)lcd_setting_ptr = lcd_lib_encoder_pos; else if (lcd_setting_type == 3) *(float*)lcd_setting_ptr = float(lcd_lib_encoder_pos) / 100.0; else if (lcd_setting_type == 4) *(int32_t*)lcd_setting_ptr = lcd_lib_encoder_pos; else if (lcd_setting_type == 5) *(uint8_t*)lcd_setting_ptr = lcd_lib_encoder_pos * 255 / 100; else if (lcd_setting_type == 6) *(float*)lcd_setting_ptr = float(lcd_lib_encoder_pos) * 60; else if (lcd_setting_type == 7) *(float*)lcd_setting_ptr = float(lcd_lib_encoder_pos) * 100; else if (lcd_setting_type == 8) *(float*)lcd_setting_ptr = float(lcd_lib_encoder_pos); lcd_lib_clear(); lcd_lib_draw_string_centerP(20, lcd_setting_name); char buffer[16]; if (lcd_setting_type == 3) float_to_string(float(lcd_lib_encoder_pos) / 100.0, buffer, lcd_setting_postfix); else int_to_string(lcd_lib_encoder_pos, buffer, lcd_setting_postfix); lcd_lib_draw_string_center(30, buffer); lcd_lib_update_screen(); if (lcd_lib_button_pressed) lcd_change_to_menu(previousMenu, previousEncoderPos); }
static void lcd_menu_babystepping(uint8_t axis) { lcd_lib_clear(); char buffer[16]; strcpy_P(buffer, PSTR("Babystep ")); buffer[9] = axis_codes[axis]; buffer[10] = '\0'; lcd_lib_draw_string_center(20, buffer); lcd_lib_draw_string_centerP(40, PSTR("Rotate to move axis")); lcd_lib_draw_string_centerP(50, PSTR("Click to return")); lcd_lib_update_screen(); int diff = lcd_lib_encoder_pos*axis_steps_per_unit[axis]/200; if (diff) { babystepsTodo[axis] += diff; lcd_lib_encoder_pos = 0; } if (lcd_lib_button_pressed) lcd_change_to_menu(previousMenu, previousEncoderPos); }
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_change_to_menu_change_material(menuFunc_t return_menu) { post_change_material_menu = return_menu; preheat_end_time = millis() + (unsigned long)material[active_extruder].change_preheat_wait_time * 1000L; lcd_change_to_menu(lcd_menu_change_material_preheat); }
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); }
static void lcd_menu_change_material_remove_wait_user_ready() { plan_set_e_position(0); lcd_change_to_menu(lcd_menu_change_material_select_material); }
void lcd_question_screen(menuFunc_t optionAMenu, menuFunc_t callbackOnA, const char* AButtonText, menuFunc_t optionBMenu, menuFunc_t callbackOnB, const char* BButtonText, uint8_t directionA, uint8_t directionB) { if (lcd_lib_encoder_pos <= 0) { lcd_lib_encoder_pos=0; } else{ lcd_lib_encoder_pos=1; } if (lcd_lib_button_pressed) { if (IS_SELECTED_MAIN(0)) { if (optionAMenu) lcd_change_to_menu(optionAMenu,MAIN_MENU_ITEM_POS(0),directionA); if (callbackOnA) callbackOnA(); }else if (IS_SELECTED_MAIN(1)) { if (optionBMenu) lcd_change_to_menu(optionBMenu,MAIN_MENU_ITEM_POS(0),directionB); if (callbackOnB) callbackOnB(); } } lcd_basic_screen(); switch (languageType) { case LANGUAGE_CHINESE: case LANGUAGE_KOREAN: if (IS_SELECTED_MAIN(0)) { lcd_lib_draw_box(3+3, 54-3+1, 63-3, 64-1); lcd_lib_set(3+4, 54-3+2, 63-4, 64-2); lcd_lib_clear_stringP(34 - strlen_P(AButtonText) * 3, 56-3, AButtonText); }else{ lcd_lib_draw_stringP(34 - strlen_P(AButtonText) * 3, 56-3, AButtonText); } if (IS_SELECTED_MAIN(1)) { lcd_lib_draw_box(3+61+3, 54-3+1, 63+61-3, 64-1); lcd_lib_set(3+61+4, 54-3+2, 63+61-4, 64-2); lcd_lib_clear_stringP(34+61 - strlen_P(BButtonText) * 3, 56-3, BButtonText); }else{ lcd_lib_draw_stringP(34+61 - strlen_P(BButtonText) * 3, 56-3, BButtonText); } break; case LANGUAGE_ENGLISH: if (IS_SELECTED_MAIN(0)) { lcd_lib_draw_box(3+3, 54+1, 63-3, 64-1); lcd_lib_set(3+4, 54+2, 63-4, 64-2); lcd_lib_clear_stringP(34 - strlen_P(AButtonText) * 3, 56, AButtonText); }else{ lcd_lib_draw_stringP(34 - strlen_P(AButtonText) * 3, 56, AButtonText); } if (IS_SELECTED_MAIN(1)) { lcd_lib_draw_box(3+61+3, 54+1, 63+61-3, 64-1); lcd_lib_set(3+61+4, 54+2, 63+61-4, 64-2); lcd_lib_clear_stringP(34+61 - strlen_P(BButtonText) * 3, 56, BButtonText); }else{ lcd_lib_draw_stringP(34+61 - strlen_P(BButtonText) * 3, 56, BButtonText); } break; default: break; } }