diff options
Diffstat (limited to 'ultralcd.cpp')
-rw-r--r-- | ultralcd.cpp | 2507 |
1 files changed, 1403 insertions, 1104 deletions
diff --git a/ultralcd.cpp b/ultralcd.cpp index 7fb84fa62..b62f0c9b2 100644 --- a/ultralcd.cpp +++ b/ultralcd.cpp @@ -23,8 +23,8 @@ int babystepMem[3]; union Data { -byte b[2]; -int value; + byte b[2]; + int value; }; int8_t ReInitLCD = 0; @@ -59,11 +59,11 @@ int flexPreheatHPBTemp = FLEX_PREHEAT_HPB_TEMP; int flexPreheatFanSpeed = FLEX_PREHEAT_FAN_SPEED; #ifdef FILAMENT_LCD_DISPLAY - unsigned long message_millis = 0; +unsigned long message_millis = 0; #endif #ifdef ULTIPANEL - static float manual_feedrate[] = MANUAL_FEEDRATE; +static float manual_feedrate[] = MANUAL_FEEDRATE; #endif // ULTIPANEL /* !Configuration settings */ @@ -72,7 +72,8 @@ int flexPreheatFanSpeed = FLEX_PREHEAT_FAN_SPEED; typedef void (*menuFunc_t)(); uint8_t lcd_status_message_level; -char lcd_status_message[LCD_WIDTH+1] = WELCOME_MSG; +char lcd_status_message[LCD_WIDTH + 1] = ""; //////WELCOME! +unsigned char firstrun = 1; #ifdef DOGLCD #include "dogm_lcd_implementation.h" @@ -95,6 +96,7 @@ static void lcd_prepare_menu(); static void lcd_move_menu(); static void lcd_control_menu(); static void lcd_settings_menu(); +static void lcd_language_menu(); static void lcd_control_temperature_menu(); static void lcd_control_temperature_preheat_pla_settings_menu(); static void lcd_control_temperature_preheat_abs_settings_menu(); @@ -117,6 +119,7 @@ static void menu_action_back(menuFunc_t data); static void menu_action_submenu(menuFunc_t data); static void menu_action_gcode(const char* pgcode); static void menu_action_function(menuFunc_t data); +static void menu_action_setlang(unsigned char lang); static void menu_action_sdfile(const char* filename, char* longFilename); static void menu_action_sddirectory(const char* filename, char* longFilename); static void menu_action_setting_edit_bool(const char* pstr, bool* ptr); @@ -141,19 +144,19 @@ static void menu_action_setting_edit_callback_long5(const char* pstr, unsigned l #define ENCODER_FEEDRATE_DEADZONE 10 #if !defined(LCD_I2C_VIKI) - #ifndef ENCODER_STEPS_PER_MENU_ITEM - #define ENCODER_STEPS_PER_MENU_ITEM 5 - #endif - #ifndef ENCODER_PULSES_PER_STEP - #define ENCODER_PULSES_PER_STEP 1 - #endif +#ifndef ENCODER_STEPS_PER_MENU_ITEM +#define ENCODER_STEPS_PER_MENU_ITEM 5 +#endif +#ifndef ENCODER_PULSES_PER_STEP +#define ENCODER_PULSES_PER_STEP 1 +#endif #else - #ifndef ENCODER_STEPS_PER_MENU_ITEM - #define ENCODER_STEPS_PER_MENU_ITEM 2 // VIKI LCD rotary encoder uses a different number of steps per rotation - #endif - #ifndef ENCODER_PULSES_PER_STEP - #define ENCODER_PULSES_PER_STEP 1 - #endif +#ifndef ENCODER_STEPS_PER_MENU_ITEM +#define ENCODER_STEPS_PER_MENU_ITEM 2 // VIKI LCD rotary encoder uses a different number of steps per rotation +#endif +#ifndef ENCODER_PULSES_PER_STEP +#define ENCODER_PULSES_PER_STEP 1 +#endif #endif @@ -164,34 +167,34 @@ static void menu_action_setting_edit_callback_long5(const char* pstr, unsigned l uint8_t _lineNr = currentMenuViewOffset, _menuItemNr; \ bool wasClicked = LCD_CLICKED;\ for(uint8_t _drawLineNr = 0; _drawLineNr < LCD_HEIGHT; _drawLineNr++, _lineNr++) { \ - _menuItemNr = 0; + _menuItemNr = 0; #define MENU_ITEM(type, label, args...) do { \ if (_menuItemNr == _lineNr) { \ - if (lcdDrawUpdate) { \ - const char* _label_pstr = PSTR(label); \ - if ((encoderPosition / ENCODER_STEPS_PER_MENU_ITEM) == _menuItemNr) { \ - lcd_implementation_drawmenu_ ## type ## _selected (_drawLineNr, _label_pstr , ## args ); \ - }else{\ - lcd_implementation_drawmenu_ ## type (_drawLineNr, _label_pstr , ## args ); \ - }\ - }\ - if (wasClicked && (encoderPosition / ENCODER_STEPS_PER_MENU_ITEM) == _menuItemNr) {\ - lcd_quick_feedback(); \ - menu_action_ ## type ( args ); \ - return;\ + if (lcdDrawUpdate) { \ + const char* _label_pstr = (label); \ + if ((encoderPosition / ENCODER_STEPS_PER_MENU_ITEM) == _menuItemNr) { \ + lcd_implementation_drawmenu_ ## type ## _selected (_drawLineNr, _label_pstr , ## args ); \ + }else{\ + lcd_implementation_drawmenu_ ## type (_drawLineNr, _label_pstr , ## args ); \ }\ + }\ + if (wasClicked && (encoderPosition / ENCODER_STEPS_PER_MENU_ITEM) == _menuItemNr) {\ + lcd_quick_feedback(); \ + menu_action_ ## type ( args ); \ + return;\ + }\ }\ _menuItemNr++;\ -} while(0) + } while(0) #define MENU_ITEM_DUMMY() do { _menuItemNr++; } while(0) -#define MENU_ITEM_EDIT(type, label, args...) MENU_ITEM(setting_edit_ ## type, label, PSTR(label) , ## args ) -#define MENU_ITEM_EDIT_CALLBACK(type, label, args...) MENU_ITEM(setting_edit_callback_ ## type, label, PSTR(label) , ## args ) +#define MENU_ITEM_EDIT(type, label, args...) MENU_ITEM(setting_edit_ ## type, label, (label) , ## args ) +#define MENU_ITEM_EDIT_CALLBACK(type, label, args...) MENU_ITEM(setting_edit_callback_ ## type, label, (label) , ## args ) #define END_MENU() \ - if (encoderPosition / ENCODER_STEPS_PER_MENU_ITEM >= _menuItemNr) encoderPosition = _menuItemNr * ENCODER_STEPS_PER_MENU_ITEM - 1; \ - if ((uint8_t)(encoderPosition / ENCODER_STEPS_PER_MENU_ITEM) >= currentMenuViewOffset + LCD_HEIGHT) { currentMenuViewOffset = (encoderPosition / ENCODER_STEPS_PER_MENU_ITEM) - LCD_HEIGHT + 1; lcdDrawUpdate = 1; _lineNr = currentMenuViewOffset - 1; _drawLineNr = -1; } \ - } } while(0) + if (encoderPosition / ENCODER_STEPS_PER_MENU_ITEM >= _menuItemNr) encoderPosition = _menuItemNr * ENCODER_STEPS_PER_MENU_ITEM - 1; \ + if ((uint8_t)(encoderPosition / ENCODER_STEPS_PER_MENU_ITEM) >= currentMenuViewOffset + LCD_HEIGHT) { currentMenuViewOffset = (encoderPosition / ENCODER_STEPS_PER_MENU_ITEM) - LCD_HEIGHT + 1; lcdDrawUpdate = 1; _lineNr = currentMenuViewOffset - 1; _drawLineNr = -1; } \ + } } while(0) /** Used variables to keep track of the menu */ #ifndef REPRAPWORLD_KEYPAD @@ -230,158 +233,203 @@ menuFunc_t callbackFunc; // place-holders for Ki and Kd edits float raw_Ki, raw_Kd; -static void lcd_goto_menu(menuFunc_t menu, const uint32_t encoder=0, const bool feedback=true) { +static void lcd_goto_menu(menuFunc_t menu, const uint32_t encoder = 0, const bool feedback = true) { if (currentMenu != menu) { currentMenu = menu; encoderPosition = encoder; if (feedback) lcd_quick_feedback(); // For LCD_PROGRESS_BAR re-initialize the custom characters - #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) - lcd_set_custom_characters(menu == lcd_status_screen); - #endif +#if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) + lcd_set_custom_characters(menu == lcd_status_screen); +#endif } } /* Main status screen. It's up to the implementation specific part to show what is needed. As this is very display dependent */ +/* +extern char langbuffer[]; +void lcd_printPGM(const char *s1) { + strncpy_P(langbuffer,s1,LCD_WIDTH); + lcd.print(langbuffer); +} +*/ +unsigned char langsel; + +void set_language_from_EEPROM() { + unsigned char eep = eeprom_read_byte((unsigned char*)EEPROM_LANG); + if (eep < LANG_NUM) + { + lang_selected = eep; + langsel = 0; + } + else + { + lang_selected = 1; + langsel = 1; + } +} + +void lcd_mylang(); static void lcd_status_screen() { - + if (firstrun == 1) { + firstrun = 0; + set_language_from_EEPROM(); + strncpy_P(lcd_status_message, WELCOME_MSG, LCD_WIDTH); + if (langsel) { + //strncpy_P(lcd_status_message, PSTR(">>>>>>>>>>>> PRESS v"), LCD_WIDTH); + lcd_mylang(); + } + } - if (lcd_status_update_delay) - lcd_status_update_delay--; - else - lcdDrawUpdate = 1; - if (lcdDrawUpdate) - { - ReInitLCD++; - - if(ReInitLCD == 30){ - lcd_implementation_init( // to maybe revive the LCD if static electricity killed it. - #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) - currentMenu == lcd_status_screen - #endif + + + if (lcd_status_update_delay) + lcd_status_update_delay--; + else + lcdDrawUpdate = 1; + if (lcdDrawUpdate) + { + ReInitLCD++; + + if (ReInitLCD == 30) { + lcd_implementation_init( // to maybe revive the LCD if static electricity killed it. +#if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) + currentMenu == lcd_status_screen +#endif + ); + ReInitLCD = 0 ; + } else { + + if ((ReInitLCD % 10) == 0) { + //lcd_implementation_nodisplay(); + lcd_implementation_init_noclear( // to maybe revive the LCD if static electricity killed it. +#if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) + currentMenu == lcd_status_screen +#endif ); - ReInitLCD =0 ; - }else{ - - if((ReInitLCD%10) == 0){ - //lcd_implementation_nodisplay(); - lcd_implementation_init_noclear( // to maybe revive the LCD if static electricity killed it. - #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) - currentMenu == lcd_status_screen - #endif - ); - - } - } + } - - //lcd_implementation_display(); - lcd_implementation_status_screen(); - //lcd_implementation_clear(); - - lcd_status_update_delay = 10; /* redraw the main screen every second. This is easier then trying keep track of all things that change on the screen */ } + + + //lcd_implementation_display(); + lcd_implementation_status_screen(); + //lcd_implementation_clear(); + + lcd_status_update_delay = 10; /* redraw the main screen every second. This is easier then trying keep track of all things that change on the screen */ + } #ifdef ULTIPANEL - bool current_click = LCD_CLICKED; + bool current_click = LCD_CLICKED; - if (ignore_click) { - if (wait_for_unclick) { - if (!current_click) { - ignore_click = wait_for_unclick = false; - } - else { - current_click = false; - } - } - else if (current_click) { - lcd_quick_feedback(); - wait_for_unclick = true; - current_click = false; - } + if (ignore_click) { + if (wait_for_unclick) { + if (!current_click) { + ignore_click = wait_for_unclick = false; + } + else { + current_click = false; + } } - - if (current_click) - { - lcd_goto_menu(lcd_main_menu); - lcd_implementation_init( // to maybe revive the LCD if static electricity killed it. - #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) - currentMenu == lcd_status_screen - #endif - ); - #ifdef FILAMENT_LCD_DISPLAY - message_millis = millis(); // get status message to show up for a while - #endif + else if (current_click) { + lcd_quick_feedback(); + wait_for_unclick = true; + current_click = false; } + } + + //if (--langsel ==0) {langsel=1;current_click=true;} + + if (current_click) + { + + lcd_goto_menu(lcd_main_menu); + lcd_implementation_init( // to maybe revive the LCD if static electricity killed it. +#if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) + currentMenu == lcd_status_screen +#endif + ); +#ifdef FILAMENT_LCD_DISPLAY + message_millis = millis(); // get status message to show up for a while +#endif + } #ifdef ULTIPANEL_FEEDMULTIPLY - // Dead zone at 100% feedrate - if ((feedmultiply < 100 && (feedmultiply + int(encoderPosition)) > 100) || - (feedmultiply > 100 && (feedmultiply + int(encoderPosition)) < 100)) - { - encoderPosition = 0; - feedmultiply = 100; - } + // Dead zone at 100% feedrate + if ((feedmultiply < 100 && (feedmultiply + int(encoderPosition)) > 100) || + (feedmultiply > 100 && (feedmultiply + int(encoderPosition)) < 100)) + { + encoderPosition = 0; + feedmultiply = 100; + } - if (feedmultiply == 100 && int(encoderPosition) > ENCODER_FEEDRATE_DEADZONE) - { - feedmultiply += int(encoderPosition) - ENCODER_FEEDRATE_DEADZONE; - encoderPosition = 0; - } - else if (feedmultiply == 100 && int(encoderPosition) < -ENCODER_FEEDRATE_DEADZONE) - { - feedmultiply += int(encoderPosition) + ENCODER_FEEDRATE_DEADZONE; - encoderPosition = 0; - } - else if (feedmultiply != 100) - { - feedmultiply += int(encoderPosition); - encoderPosition = 0; - } + if (feedmultiply == 100 && int(encoderPosition) > ENCODER_FEEDRATE_DEADZONE) + { + feedmultiply += int(encoderPosition) - ENCODER_FEEDRATE_DEADZONE; + encoderPosition = 0; + } + else if (feedmultiply == 100 && int(encoderPosition) < -ENCODER_FEEDRATE_DEADZONE) + { + feedmultiply += int(encoderPosition) + ENCODER_FEEDRATE_DEADZONE; + encoderPosition = 0; + } + else if (feedmultiply != 100) + { + feedmultiply += int(encoderPosition); + encoderPosition = 0; + } #endif //ULTIPANEL_FEEDMULTIPLY - if (feedmultiply < 10) - feedmultiply = 10; - else if (feedmultiply > 999) - feedmultiply = 999; + if (feedmultiply < 10) + feedmultiply = 10; + else if (feedmultiply > 999) + feedmultiply = 999; #endif //ULTIPANEL } #ifdef ULTIPANEL -static void lcd_return_to_status() { +static void lcd_return_to_status() { lcd_implementation_init( // to maybe revive the LCD if static electricity killed it. - #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) - currentMenu == lcd_status_screen - #endif - ); - lcd_goto_menu(lcd_status_screen, 0, false); +#if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) + currentMenu == lcd_status_screen +#endif + ); + + lcd_goto_menu(lcd_status_screen, 0, false); } -static void lcd_sdcard_pause() { card.pauseSDPrint(); } +static void lcd_sdcard_pause() { + card.pauseSDPrint(); +} -static void lcd_sdcard_resume() { card.startFileprint(); } +static void lcd_sdcard_resume() { + card.startFileprint(); +} float move_menu_scale; static void lcd_move_menu_axis(); + + + static void lcd_sdcard_stop() { - card.sdprinting = false; - card.closefile(); - quickStop(); - if(SD_FINISHED_STEPPERRELEASE) - { - enquecommand_P(PSTR(SD_FINISHED_RELEASECOMMAND)); - } - autotempShutdown(); + card.sdprinting = false; + card.closefile(); + quickStop(); + if (SD_FINISHED_STEPPERRELEASE) + { + enquecommand_P(PSTR(SD_FINISHED_RELEASECOMMAND)); + } + autotempShutdown(); - cancel_heatup = true; + cancel_heatup = true; - lcd_setstatus(MSG_PRINT_ABORTED); + lcd_setstatus(MSG_PRINT_ABORTED); enquecommand_P(PSTR("M84")); @@ -393,353 +441,357 @@ static void lcd_sdcard_stop() void lcd_preheat_pla() { - setTargetHotend0(plaPreheatHotendTemp); - setTargetBed(plaPreheatHPBTemp); - fanSpeed = 0; - lcd_return_to_status(); - setWatch(); // heater sanity check timer + setTargetHotend0(plaPreheatHotendTemp); + setTargetBed(plaPreheatHPBTemp); + fanSpeed = 0; + lcd_return_to_status(); + setWatch(); // heater sanity check timer } void lcd_preheat_abs() { - setTargetHotend0(absPreheatHotendTemp); - setTargetBed(absPreheatHPBTemp); - fanSpeed = 0; - lcd_return_to_status(); - setWatch(); // heater sanity check timer + setTargetHotend0(absPreheatHotendTemp); + setTargetBed(absPreheatHPBTemp); + fanSpeed = 0; + lcd_return_to_status(); + setWatch(); // heater sanity check timer } void lcd_preheat_pp() { - setTargetHotend0(ppPreheatHotendTemp); - setTargetBed(ppPreheatHPBTemp); - fanSpeed = 0; - lcd_return_to_status(); - setWatch(); // heater sanity check timer + setTargetHotend0(ppPreheatHotendTemp); + setTargetBed(ppPreheatHPBTemp); + fanSpeed = 0; + lcd_return_to_status(); + setWatch(); // heater sanity check timer } void lcd_preheat_pet() { - setTargetHotend0(petPreheatHotendTemp); - setTargetBed(petPreheatHPBTemp); - fanSpeed = 0; - lcd_return_to_status(); - setWatch(); // heater sanity check timer + setTargetHotend0(petPreheatHotendTemp); + setTargetBed(petPreheatHPBTemp); + fanSpeed = 0; + lcd_return_to_status(); + setWatch(); // heater sanity check timer } void lcd_preheat_hips() { - setTargetHotend0(hipsPreheatHotendTemp); - setTargetBed(hipsPreheatHPBTemp); - fanSpeed = 0; - lcd_return_to_status(); - setWatch(); // heater sanity check timer + setTargetHotend0(hipsPreheatHotendTemp); + setTargetBed(hipsPreheatHPBTemp); + fanSpeed = 0; + lcd_return_to_status(); + setWatch(); // heater sanity check timer } void lcd_preheat_flex() { - setTargetHotend0(flexPreheatHotendTemp); - setTargetBed(flexPreheatHPBTemp); - fanSpeed = 0; - lcd_return_to_status(); - setWatch(); // heater sanity check timer + setTargetHotend0(flexPreheatHotendTemp); + setTargetBed(flexPreheatHPBTemp); + fanSpeed = 0; + lcd_return_to_status(); + setWatch(); // heater sanity check timer } void lcd_cooldown() { - setTargetHotend0(0); - setTargetHotend1(0); - setTargetHotend2(0); - setTargetBed(0); - fanSpeed = 0; - lcd_return_to_status(); + setTargetHotend0(0); + setTargetHotend1(0); + setTargetHotend2(0); + setTargetBed(0); + fanSpeed = 0; + lcd_return_to_status(); } static void lcd_preheat_menu() { - START_MENU(); - - - MENU_ITEM(back, MSG_MAIN, lcd_main_menu); - - MENU_ITEM(function, "ABS - " STRINGIFY(ABS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(ABS_PREHEAT_HPB_TEMP), lcd_preheat_abs); - MENU_ITEM(function, "PLA - " STRINGIFY(PLA_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PLA_PREHEAT_HPB_TEMP), lcd_preheat_pla); - MENU_ITEM(function, "PET - " STRINGIFY(PET_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PET_PREHEAT_HPB_TEMP), lcd_preheat_pet); - MENU_ITEM(function, "HIPS - " STRINGIFY(HIPS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(HIPS_PREHEAT_HPB_TEMP), lcd_preheat_hips); - MENU_ITEM(function, "PP - " STRINGIFY(PP_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PP_PREHEAT_HPB_TEMP), lcd_preheat_pp); - MENU_ITEM(function, "FLEX - " STRINGIFY(FLEX_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(FLEX_PREHEAT_HPB_TEMP), lcd_preheat_flex); - - - MENU_ITEM(function, MSG_COOLDOWN, lcd_cooldown); - - END_MENU(); + START_MENU(); + + + MENU_ITEM(back, MSG_MAIN, lcd_main_menu); + + MENU_ITEM(function, PSTR("ABS - " STRINGIFY(ABS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(ABS_PREHEAT_HPB_TEMP)), lcd_preheat_abs); + MENU_ITEM(function, PSTR("PLA - " STRINGIFY(PLA_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PLA_PREHEAT_HPB_TEMP)), lcd_preheat_pla); + MENU_ITEM(function, PSTR("PET - " STRINGIFY(PET_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PET_PREHEAT_HPB_TEMP)), lcd_preheat_pet); + MENU_ITEM(function, PSTR("HIPS - " STRINGIFY(HIPS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(HIPS_PREHEAT_HPB_TEMP)), lcd_preheat_hips); + MENU_ITEM(function, PSTR("PP - " STRINGIFY(PP_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PP_PREHEAT_HPB_TEMP)), lcd_preheat_pp); + MENU_ITEM(function, PSTR("FLEX - " STRINGIFY(FLEX_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(FLEX_PREHEAT_HPB_TEMP)), lcd_preheat_flex); + + + MENU_ITEM(function, MSG_COOLDOWN, lcd_cooldown); + + END_MENU(); } static void lcd_support_menu() { - START_MENU(); - - - MENU_ITEM(back, MSG_MAIN, lcd_main_menu); - - MENU_ITEM(back, MSG_FW_VERSION " - " FW_version, lcd_main_menu); - MENU_ITEM(back, "prusa3d.com", lcd_main_menu); - MENU_ITEM(back, "forum.prusa3d.com", lcd_main_menu); - MENU_ITEM(back, "howto.prusa3d.com", lcd_main_menu); - MENU_ITEM(back, "Rev: " REVISION, lcd_main_menu); + START_MENU(); - END_MENU(); + + MENU_ITEM(back, MSG_MAIN, lcd_main_menu); + + MENU_ITEM(back, PSTR(MSG_FW_VERSION " - " FW_version), lcd_main_menu); + MENU_ITEM(back, MSG_PRUSA3D, lcd_main_menu); + MENU_ITEM(back, MSG_PRUSA3D_FORUM, lcd_main_menu); + MENU_ITEM(back, MSG_PRUSA3D_HOWTO, lcd_main_menu); + MENU_ITEM(back, PSTR("------------"), lcd_main_menu); + MENU_ITEM(back, PSTR(FILAMENT_SIZE), lcd_main_menu); + MENU_ITEM(back, PSTR(ELECTRONICS),lcd_main_menu); + MENU_ITEM(back, PSTR(NOZZLE_TYPE),lcd_main_menu); + + + END_MENU(); } void lcd_unLoadFilament() { - - if(degHotend0() > EXTRUDE_MINTEMP){ - + + if (degHotend0() > EXTRUDE_MINTEMP) { + enquecommand_P(PSTR(UNLOAD_FILAMENT_0)); - + enquecommand_P(PSTR(UNLOAD_FILAMENT_1)); - - }else{ - - lcd_implementation_clear(); - lcd.setCursor(0, 0); - - lcd.print(MSG_ERROR); - - lcd.setCursor(0, 2); - - lcd.print(MSG_PREHEAT_NOZZLE); - - - delay(2000); - lcd_implementation_clear(); - + + } else { + + lcd_implementation_clear(); + lcd.setCursor(0, 0); + + lcd_printPGM(MSG_ERROR); + + lcd.setCursor(0, 2); + + lcd_printPGM(MSG_PREHEAT_NOZZLE); + + + delay(2000); + lcd_implementation_clear(); + } - - + + lcd_return_to_status(); - + } -void lcd_change_filament(){ - - lcd_implementation_clear(); - - lcd.setCursor(0, 1); - - lcd.print(MSG_CHANGING_FILAMENT); +void lcd_change_filament() { + + lcd_implementation_clear(); + + lcd.setCursor(0, 1); + + lcd_printPGM(MSG_CHANGING_FILAMENT); } -void lcd_wait_interact(){ +void lcd_wait_interact() { - lcd_implementation_clear(); - - lcd.setCursor(0, 1); - - lcd.print(MSG_INSERT_FILAMENT); - lcd.setCursor(0, 2); - lcd.print(MSG_PRESS); + lcd_implementation_clear(); + + lcd.setCursor(0, 1); + + lcd_printPGM(MSG_INSERT_FILAMENT); + lcd.setCursor(0, 2); + lcd_printPGM(MSG_PRESS); } -void lcd_change_success(){ +void lcd_change_success() { + + lcd_implementation_clear(); - lcd_implementation_clear(); - - lcd.setCursor(0, 2); - - lcd.print(MSG_CHANGE_SUCCESS); + lcd.setCursor(0, 2); + + lcd_printPGM(MSG_CHANGE_SUCCESS); } -void lcd_loading_color(){ - - lcd_implementation_clear(); - - lcd.setCursor(0, 0); - - lcd.print(MSG_LOADING_COLOR); - lcd.setCursor(0, 2); - lcd.print(MSG_PLEASE_WAIT); +void lcd_loading_color() { + + lcd_implementation_clear(); + + lcd.setCursor(0, 0); + + lcd_printPGM(MSG_LOADING_COLOR); + lcd.setCursor(0, 2); + lcd_printPGM(MSG_PLEASE_WAIT); + + + for (int i = 0; i < 20; i++) { - - for(int i = 0; i<20; i++){ - lcd.setCursor(i, 3); lcd.print("."); - for(int j = 0;j<10 ; j++){ - manage_heater(); - manage_inactivity(true); - delay(85); - + for (int j = 0; j < 10 ; j++) { + manage_heater(); + manage_inactivity(true); + delay(85); + } - - + + } } -void lcd_loading_filament(){ +void lcd_loading_filament() { - - lcd_implementation_clear(); - - lcd.setCursor(0, 0); - - lcd.print(MSG_LOADING_FILAMENT); - lcd.setCursor(0, 2); - lcd.print(MSG_PLEASE_WAIT); - - for(int i = 0; i<20; i++){ - + lcd_implementation_clear(); + + lcd.setCursor(0, 0); + + lcd_printPGM(MSG_LOADING_FILAMENT); + lcd.setCursor(0, 2); + lcd_printPGM(MSG_PLEASE_WAIT); + + + for (int i = 0; i < 20; i++) { + lcd.setCursor(i, 3); lcd.print("."); - for(int j = 0;j<10 ; j++){ - manage_heater(); - manage_inactivity(true); - delay(110); - + for (int j = 0; j < 10 ; j++) { + manage_heater(); + manage_inactivity(true); + delay(110); + } - - + + } } -void lcd_alright(){ +void lcd_alright() { int enc_dif = 0; int cursor_pos = 1; - - - - lcd_implementation_clear(); - - lcd.setCursor(0, 0); - - lcd.print(MSG_CORRECTLY); - - lcd.setCursor(1, 1); - - lcd.print(MSG_YES); - - lcd.setCursor(1, 2); - - lcd.print(MSG_NOT_LOADED); - - - lcd.setCursor(1, 3); - lcd.print(MSG_NOT_COLOR); - - - lcd.setCursor(0, 1); - - lcd.print(">"); - - - enc_dif = encoderDiff; - - while(lcd_change_fil_state == 0){ - - manage_heater(); - manage_inactivity(true); - - if( abs((enc_dif - encoderDiff))>4 ){ - - if ( (abs(enc_dif-encoderDiff)) > 1 ){ - if (enc_dif > encoderDiff ){ - cursor_pos --; - } - - if (enc_dif < encoderDiff ){ - cursor_pos ++; - } - - if(cursor_pos >3){ - cursor_pos = 3; - } - - if(cursor_pos <1){ - cursor_pos = 1; - } - lcd.setCursor(0, 1); - lcd.print(" "); - lcd.setCursor(0, 2); - lcd.print(" "); - lcd.setCursor(0, 3); - lcd.print(" "); - lcd.setCursor(0, cursor_pos); - lcd.print(">"); - enc_dif = encoderDiff; - delay(100); - } - - } - - - if(lcd_clicked()){ - - lcd_change_fil_state = cursor_pos; - delay(500); - - } - - - - }; - - - lcd_implementation_clear(); + + + + lcd_implementation_clear(); + + lcd.setCursor(0, 0); + + lcd_printPGM(MSG_CORRECTLY); + + lcd.setCursor(1, 1); + + lcd_printPGM(MSG_YES); + + lcd.setCursor(1, 2); + + lcd_printPGM(MSG_NOT_LOADED); + + + lcd.setCursor(1, 3); + lcd_printPGM(MSG_NOT_COLOR); + + + lcd.setCursor(0, 1); + + lcd.print(">"); + + + enc_dif = encoderDiff; + + while (lcd_change_fil_state == 0) { + + manage_heater(); + manage_inactivity(true); + + if ( abs((enc_dif - encoderDiff)) > 4 ) { + + if ( (abs(enc_dif - encoderDiff)) > 1 ) { + if (enc_dif > encoderDiff ) { + cursor_pos --; + } + + if (enc_dif < encoderDiff ) { + cursor_pos ++; + } + + if (cursor_pos > 3) { + cursor_pos = 3; + } + + if (cursor_pos < 1) { + cursor_pos = 1; + } + lcd.setCursor(0, 1); + lcd.print(" "); + lcd.setCursor(0, 2); + lcd.print(" "); + lcd.setCursor(0, 3); + lcd.print(" "); + lcd.setCursor(0, cursor_pos); + lcd.print(">"); + enc_dif = encoderDiff; + delay(100); + } + + } + + + if (lcd_clicked()) { + + lcd_change_fil_state = cursor_pos; + delay(500); + + } + + + + }; + + + lcd_implementation_clear(); lcd_return_to_status(); - + } - + void lcd_LoadFilament() { - - - if(degHotend0() > EXTRUDE_MINTEMP){ - + + + if (degHotend0() > EXTRUDE_MINTEMP) { + enquecommand_P(PSTR(LOAD_FILAMENT_0)); - - enquecommand_P(PSTR(LOAD_FILAMENT_1)); - - enquecommand_P(PSTR(LOAD_FILAMENT_2)); - - }else{ - - lcd_implementation_clear(); - - lcd.setCursor(0, 0); - - lcd.print(MSG_ERROR); - - lcd.setCursor(0, 2); - - lcd.print(MSG_PREHEAT_NOZZLE); - - - delay(2000); - lcd_implementation_clear(); + + enquecommand_P(PSTR(LOAD_FILAMENT_1)); + + enquecommand_P(PSTR(LOAD_FILAMENT_2)); + + } else { + + lcd_implementation_clear(); + + lcd.setCursor(0, 0); + + lcd_printPGM(MSG_ERROR); + + lcd.setCursor(0, 2); + + lcd_printPGM(MSG_PREHEAT_NOZZLE); + + + delay(2000); + lcd_implementation_clear(); } - - + + lcd_return_to_status(); } @@ -755,12 +807,12 @@ static void _lcd_move(const char *name, int axis, int min, int max) { if (min_software_endstops && current_position[axis] < min) current_position[axis] = min; if (max_software_endstops && current_position[axis] > max) current_position[axis] = max; encoderPosition = 0; - #ifdef DELTA - calculate_delta(current_position); - plan_buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], current_position[E_AXIS], manual_feedrate[axis]/60, active_extruder); - #else - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], manual_feedrate[axis]/60, active_extruder); - #endif +#ifdef DELTA + calculate_delta(current_position); + plan_buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], current_position[E_AXIS], manual_feedrate[axis] / 60, active_extruder); +#else + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], manual_feedrate[axis] / 60, active_extruder); +#endif lcdDrawUpdate = 1; } if (lcdDrawUpdate) lcd_implementation_drawedit(name, ftostr31(current_position[axis])); @@ -770,165 +822,177 @@ static void _lcd_move(const char *name, int axis, int min, int max) { static void lcd_move_e() { - if (encoderPosition != 0) - { - current_position[E_AXIS] += float((int)encoderPosition) * move_menu_scale; - encoderPosition = 0; - #ifdef DELTA - calculate_delta(current_position); - plan_buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], current_position[E_AXIS], manual_feedrate[E_AXIS]/60, active_extruder); - #else - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], manual_feedrate[E_AXIS]/60, active_extruder); - #endif - lcdDrawUpdate = 1; - } - if (lcdDrawUpdate) - { - lcd_implementation_drawedit(PSTR("Extruder"), ftostr31(current_position[E_AXIS])); - } - if (LCD_CLICKED) lcd_goto_menu(lcd_move_menu_axis); + if (encoderPosition != 0) + { + current_position[E_AXIS] += float((int)encoderPosition) * move_menu_scale; + encoderPosition = 0; +#ifdef DELTA + calculate_delta(current_position); + plan_buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], current_position[E_AXIS], manual_feedrate[E_AXIS] / 60, active_extruder); +#else + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], manual_feedrate[E_AXIS] / 60, active_extruder); +#endif + lcdDrawUpdate = 1; + } + if (lcdDrawUpdate) + { + lcd_implementation_drawedit(PSTR("Extruder"), ftostr31(current_position[E_AXIS])); + } + if (LCD_CLICKED) lcd_goto_menu(lcd_move_menu_axis); } void EEPROM_save_B(int pos, int* value) { - union Data data; - data.value = *value; + union Data data; + data.value = *value; + + eeprom_write_byte((unsigned char*)pos, data.b[0]); + eeprom_write_byte((unsigned char*)pos + 1, data.b[1]); - eeprom_write_byte((unsigned char*)pos, data.b[0]); - eeprom_write_byte((unsigned char*)pos+1, data.b[1]); - } void EEPROM_read_B(int pos, int* value) { - union Data data; - data.b[0] = eeprom_read_byte((unsigned char*)pos); - data.b[1] = eeprom_read_byte((unsigned char*)pos+1); - *value = data.value; + union Data data; + data.b[0] = eeprom_read_byte((unsigned char*)pos); + data.b[1] = eeprom_read_byte((unsigned char*)pos + 1); + *value = data.value; } -static void lcd_move_x() { _lcd_move(PSTR("X"), X_AXIS, X_MIN_POS, X_MAX_POS); } -static void lcd_move_y() { _lcd_move(PSTR("Y"), Y_AXIS, Y_MIN_POS, Y_MAX_POS); } -static void lcd_move_z() { _lcd_move(PSTR("Z"), Z_AXIS, Z_MIN_POS, Z_MAX_POS); } +static void lcd_move_x() { + _lcd_move(PSTR("X"), X_AXIS, X_MIN_POS, X_MAX_POS); +} +static void lcd_move_y() { + _lcd_move(PSTR("Y"), Y_AXIS, Y_MIN_POS, Y_MAX_POS); +} +static void lcd_move_z() { + _lcd_move(PSTR("Z"), Z_AXIS, Z_MIN_POS, Z_MAX_POS); +} - static void _lcd_babystep(int axis, const char *msg) { - if (encoderPosition != 0) { - babystepsTodo[axis] += (int)encoderPosition; - babystepMem[axis] += (int)encoderPosition; - encoderPosition = 0; - lcdDrawUpdate = 1; - } - if (lcdDrawUpdate) lcd_implementation_drawedit_2(msg, ftostr51(babystepMem[axis])); - if (LCD_CLICKED) lcd_goto_menu(lcd_tune_menu); - EEPROM_save_B(4093,&babystepMem[0]); - EEPROM_save_B(4091,&babystepMem[1]); - EEPROM_save_B(4089,&babystepMem[2]); +static void _lcd_babystep(int axis, const char *msg) { + if (encoderPosition != 0) { + babystepsTodo[axis] += (int)encoderPosition; + babystepMem[axis] += (int)encoderPosition; + encoderPosition = 0; + lcdDrawUpdate = 1; } - static void lcd_babystep_x() { _lcd_babystep(X_AXIS, PSTR(MSG_BABYSTEPPING_X)); } - static void lcd_babystep_y() { _lcd_babystep(Y_AXIS, PSTR(MSG_BABYSTEPPING_Y)); } - static void lcd_babystep_z() { _lcd_babystep(Z_AXIS, PSTR(MSG_BABYSTEPPING_Z)); } + if (lcdDrawUpdate) lcd_implementation_drawedit_2(msg, ftostr51(babystepMem[axis])); + if (LCD_CLICKED) lcd_goto_menu(lcd_main_menu); + EEPROM_save_B(EEPROM_BABYSTEP_X, &babystepMem[0]); + EEPROM_save_B(EEPROM_BABYSTEP_Y, &babystepMem[1]); + EEPROM_save_B(EEPROM_BABYSTEP_Z, &babystepMem[2]); +} +static void lcd_babystep_x() { + _lcd_babystep(X_AXIS, (MSG_BABYSTEPPING_X)); +} +static void lcd_babystep_y() { + _lcd_babystep(Y_AXIS, (MSG_BABYSTEPPING_Y)); +} +static void lcd_babystep_z() { + _lcd_babystep(Z_AXIS, (MSG_BABYSTEPPING_Z)); +} -void lcd_adjust_z(){ +void lcd_adjust_z() { int enc_dif = 0; int cursor_pos = 1; int fsm = 0; - - - - lcd_implementation_clear(); - - lcd.setCursor(0, 0); - - lcd.print(MSG_ADJUSTZ); - - lcd.setCursor(1, 1); - - lcd.print(MSG_YES); - - lcd.setCursor(1, 2); - - lcd.print(MSG_NO); - - lcd.setCursor(0, 1); - - lcd.print(">"); - - - enc_dif = encoderDiff; - - while(fsm == 0){ - - manage_heater(); - manage_inactivity(true); - - if( abs((enc_dif - encoderDiff))>4 ){ - - if ( (abs(enc_dif-encoderDiff)) > 1 ){ - if (enc_dif > encoderDiff ){ - cursor_pos --; - } - - if (enc_dif < encoderDiff ){ - cursor_pos ++; - } - - if(cursor_pos >2){ - cursor_pos = 2; - } - - if(cursor_pos <1){ - cursor_pos = 1; - } - lcd.setCursor(0, 1); - lcd.print(" "); - lcd.setCursor(0, 2); - lcd.print(" "); - lcd.setCursor(0, cursor_pos); - lcd.print(">"); - enc_dif = encoderDiff; - delay(100); - } - - } - - - if(lcd_clicked()){ - fsm = cursor_pos; - if(fsm == 1){ - EEPROM_read_B(4093,&babystepMem[0]); - EEPROM_read_B(4091,&babystepMem[1]); - EEPROM_read_B(4089,&babystepMem[2]); - babystepsTodo[Z_AXIS] = babystepMem[2]; - }else{ - babystepMem[0] = 0; - babystepMem[1] = 0; - babystepMem[2] = 0; - - EEPROM_save_B(4093,&babystepMem[0]); - EEPROM_save_B(4091,&babystepMem[1]); - EEPROM_save_B(4089,&babystepMem[2]); - } - delay(500); - - } - - - - }; - - - lcd_implementation_clear(); + + + + lcd_implementation_clear(); + + lcd.setCursor(0, 0); + + lcd_printPGM(MSG_ADJUSTZ); + + lcd.setCursor(1, 1); + + lcd_printPGM(MSG_YES); + + lcd.setCursor(1, 2); + + lcd_printPGM(MSG_NO); + + lcd.setCursor(0, 1); + + lcd.print(">"); + + + enc_dif = encoderDiff; + + while (fsm == 0) { + + manage_heater(); + manage_inactivity(true); + + if ( abs((enc_dif - encoderDiff)) > 4 ) { + + if ( (abs(enc_dif - encoderDiff)) > 1 ) { + if (enc_dif > encoderDiff ) { + cursor_pos --; + } + + if (enc_dif < encoderDiff ) { + cursor_pos ++; + } + + if (cursor_pos > 2) { + cursor_pos = 2; + } + + if (cursor_pos < 1) { + cursor_pos = 1; + } + lcd.setCursor(0, 1); + lcd.print(" "); + lcd.setCursor(0, 2); + lcd.print(" "); + lcd.setCursor(0, cursor_pos); + lcd.print(">"); + enc_dif = encoderDiff; + delay(100); + } + + } + + + if (lcd_clicked()) { + fsm = cursor_pos; + if (fsm == 1) { + EEPROM_read_B(EEPROM_BABYSTEP_X, &babystepMem[0]); + EEPROM_read_B(EEPROM_BABYSTEP_Y, &babystepMem[1]); + EEPROM_read_B(EEPROM_BABYSTEP_Z, &babystepMem[2]); + babystepsTodo[Z_AXIS] = babystepMem[2]; + } else { + babystepMem[0] = 0; + babystepMem[1] = 0; + babystepMem[2] = 0; + + EEPROM_save_B(EEPROM_BABYSTEP_X, &babystepMem[0]); + EEPROM_save_B(EEPROM_BABYSTEP_Y, &babystepMem[1]); + EEPROM_save_B(EEPROM_BABYSTEP_Z, &babystepMem[2]); + } + delay(500); + + } + + + + }; + + + lcd_implementation_clear(); lcd_return_to_status(); - + } @@ -936,149 +1000,369 @@ void lcd_adjust_z(){ void lcd_move_menu_axis() { - START_MENU(); - MENU_ITEM(back, MSG_SETTINGS, lcd_settings_menu); - MENU_ITEM(submenu, MSG_MOVE_X, lcd_move_x); - MENU_ITEM(submenu, MSG_MOVE_Y, lcd_move_y); - if (move_menu_scale < 10.0) - { - MENU_ITEM(submenu, MSG_MOVE_Z, lcd_move_z); - MENU_ITEM(submenu, MSG_MOVE_E, lcd_move_e); - } - END_MENU(); + START_MENU(); + MENU_ITEM(back, MSG_SETTINGS, lcd_settings_menu); + MENU_ITEM(submenu, MSG_MOVE_X, lcd_move_x); + MENU_ITEM(submenu, MSG_MOVE_Y, lcd_move_y); + if (move_menu_scale < 10.0) + { + MENU_ITEM(submenu, MSG_MOVE_Z, lcd_move_z); + MENU_ITEM(submenu, MSG_MOVE_E, lcd_move_e); + } + END_MENU(); } static void lcd_move_menu_1mm() { - move_menu_scale = 1.0; - lcd_move_menu_axis(); + move_menu_scale = 1.0; + lcd_move_menu_axis(); } void EEPROM_save(int pos, uint8_t* value, uint8_t size) { - do - { - eeprom_write_byte((unsigned char*)pos, *value); - pos++; - value++; - }while(--size); + do + { + eeprom_write_byte((unsigned char*)pos, *value); + pos++; + value++; + } while (--size); } void EEPROM_read(int pos, uint8_t* value, uint8_t size) { - do - { - *value = eeprom_read_byte((unsigned char*)pos); - pos++; - value++; - }while(--size); + do + { + *value = eeprom_read_byte((unsigned char*)pos); + pos++; + value++; + } while (--size); } -static void lcd_silent_mode_set(){ - SilentModeMenu = !SilentModeMenu; - EEPROM_save(4095,(uint8_t*)&SilentModeMenu,sizeof(SilentModeMenu)); - digipot_init(); - lcd_goto_menu(lcd_settings_menu, 7); +static void lcd_silent_mode_set() { + SilentModeMenu = !SilentModeMenu; + EEPROM_save(EEPROM_SILENT, (uint8_t*)&SilentModeMenu, sizeof(SilentModeMenu)); + digipot_init(); + lcd_goto_menu(lcd_settings_menu, 7); +} +static void lcd_set_lang(unsigned char lang) { + lang_selected = lang; + firstrun = 1; + eeprom_write_byte((unsigned char *)EEPROM_LANG, lang);/*langsel=0;*/if (langsel == 1)langsel = 2; +} + +void lcd_force_language_selection() { + eeprom_write_byte((unsigned char *)EEPROM_LANG, 255); +} + +static void lcd_language_menu() +{ + START_MENU(); + if (!langsel) { + MENU_ITEM(back, MSG_SETTINGS, lcd_settings_menu); + } + if (langsel == 2) { + MENU_ITEM(back, MSG_WATCH, lcd_status_screen); + } + for (int i=0;i<LANG_NUM;i++){ + MENU_ITEM(setlang, MSG_ALL[i][LANGUAGE_NAME], i); + } + //MENU_ITEM(setlang, MSG_ALL[1][LANGUAGE_NAME], 1); + END_MENU(); } static void lcd_settings_menu() { - EEPROM_read(4095,(uint8_t*)&SilentModeMenu,sizeof(SilentModeMenu)); - START_MENU(); - - MENU_ITEM(back, MSG_MAIN, lcd_main_menu); - - MENU_ITEM(submenu, MSG_TEMPERATURE, lcd_control_temperature_menu); - - - MENU_ITEM(submenu, MSG_MOVE_AXIS, lcd_move_menu_1mm); - - MENU_ITEM(gcode, MSG_HOMEYZ, PSTR("G28 Z")); - - MENU_ITEM(gcode, MSG_DISABLE_STEPPERS, PSTR("M84")); - - - MENU_ITEM(gcode, MSG_AUTO_HOME, PSTR("G28")); - - if(SilentModeMenu == 0){ - MENU_ITEM(function, MSG_SILENT_MODE_OFF, lcd_silent_mode_set); - }else{ - MENU_ITEM(function, MSG_SILENT_MODE_ON, lcd_silent_mode_set); - } - - END_MENU(); + EEPROM_read(EEPROM_SILENT, (uint8_t*)&SilentModeMenu, sizeof(SilentModeMenu)); + START_MENU(); + + MENU_ITEM(back, MSG_MAIN, lcd_main_menu); + + MENU_ITEM(submenu, MSG_TEMPERATURE, lcd_control_temperature_menu); + + + MENU_ITEM(submenu, MSG_MOVE_AXIS, lcd_move_menu_1mm); + + MENU_ITEM(gcode, MSG_HOMEYZ, PSTR("G28 Z")); + + MENU_ITEM(gcode, MSG_DISABLE_STEPPERS, PSTR("M84")); + + + MENU_ITEM(gcode, MSG_AUTO_HOME, PSTR("G28")); + + if (SilentModeMenu == 0) { + MENU_ITEM(function, MSG_SILENT_MODE_OFF, lcd_silent_mode_set); + } else { + MENU_ITEM(function, MSG_SILENT_MODE_ON, lcd_silent_mode_set); + } + + MENU_ITEM(submenu, MSG_LANGUAGE_SELECT, lcd_language_menu); + + END_MENU(); +} +/* +void lcd_mylang_top(int hlaska) { + lcd.setCursor(0,0); + lcd.print(" "); + lcd.setCursor(0,0); + lcd_printPGM(MSG_ALL[hlaska-1][LANGUAGE_SELECT]); +} + +void lcd_mylang_drawmenu(int cursor) { + int first = 0; + if (cursor>2) first = cursor-2; + if (cursor==LANG_NUM) first = LANG_NUM-3; + lcd.setCursor(0, 1); + lcd.print(" "); + lcd.setCursor(1, 1); + lcd_printPGM(MSG_ALL[first][LANGUAGE_NAME]); + + lcd.setCursor(0, 2); + lcd.print(" "); + lcd.setCursor(1, 2); + lcd_printPGM(MSG_ALL[first+1][LANGUAGE_NAME]); + + lcd.setCursor(0, 3); + lcd.print(" "); + lcd.setCursor(1, 3); + lcd_printPGM(MSG_ALL[first+2][LANGUAGE_NAME]); + + if (cursor==1) lcd.setCursor(0, 1); + if (cursor>1 && cursor<LANG_NUM) lcd.setCursor(0, 2); + if (cursor==LANG_NUM) lcd.setCursor(0, 3); + + lcd.print(">"); + + if (cursor<LANG_NUM-1) { + lcd.setCursor(19,3); + lcd.print("\x01"); + } + if (cursor>2) { + lcd.setCursor(19,1); + lcd.print("^"); + } +} +*/ + +void lcd_mylang_drawmenu(int cursor) { + int first = 0; + if (cursor>3) first = cursor-3; + if (cursor==LANG_NUM && LANG_NUM>4) first = LANG_NUM-4; + if (cursor==LANG_NUM && LANG_NUM==4) first = LANG_NUM-4; + + + lcd.setCursor(0, 0); + lcd.print(" "); + lcd.setCursor(1, 0); + lcd_printPGM(MSG_ALL[first+0][LANGUAGE_NAME]); + + lcd.setCursor(0, 1); + lcd.print(" "); + lcd.setCursor(1, 1); + lcd_printPGM(MSG_ALL[first+1][LANGUAGE_NAME]); + + lcd.setCursor(0, 2); + lcd.print(" "); + + if (LANG_NUM > 2){ + lcd.setCursor(1, 2); + lcd_printPGM(MSG_ALL[first+2][LANGUAGE_NAME]); + } + + lcd.setCursor(0, 3); + lcd.print(" "); + if (LANG_NUM>3) { + lcd.setCursor(1, 3); + lcd_printPGM(MSG_ALL[first+3][LANGUAGE_NAME]); + } + + if (cursor==1) lcd.setCursor(0, 0); + if (cursor==2) lcd.setCursor(0, 1); + if (cursor>2) lcd.setCursor(0, 2); + if (cursor==LANG_NUM && LANG_NUM>3) lcd.setCursor(0, 3); + + lcd.print(">"); + + if (cursor<LANG_NUM-1 && LANG_NUM>4) { + lcd.setCursor(19,3); + lcd.print("\x01"); + } + if (cursor>3 && LANG_NUM>4) { + lcd.setCursor(19,0); + lcd.print("^"); + } } + +void lcd_set_custom_characters_arrows(); +void lcd_set_custom_characters_degree(); + +void lcd_mylang_drawcursor(int cursor) { + + if (cursor==1) lcd.setCursor(0, 1); + if (cursor>1 && cursor<LANG_NUM) lcd.setCursor(0, 2); + if (cursor==LANG_NUM) lcd.setCursor(0, 3); + + lcd.print(">"); + +} + +void lcd_mylang() { + int enc_dif = 0; + int cursor_pos = 1; + lang_selected=255; + int hlaska=1; + int counter=0; + lcd_set_custom_characters_arrows(); + + lcd_implementation_clear(); + //lcd_mylang_top(hlaska); + lcd_mylang_drawmenu(cursor_pos); + enc_dif = encoderDiff; + + while (lang_selected == 255) { + + manage_heater(); + manage_inactivity(true); + + if ( abs((enc_dif - encoderDiff)) > 4 ) { + + //if ( (abs(enc_dif - encoderDiff)) > 1 ) { + if (enc_dif > encoderDiff ) { + cursor_pos --; + } + + if (enc_dif < encoderDiff ) { + cursor_pos ++; + } + + if (cursor_pos > LANG_NUM) { + cursor_pos = LANG_NUM; + } + + if (cursor_pos < 1) { + cursor_pos = 1; + } + + lcd_mylang_drawmenu(cursor_pos); + enc_dif = encoderDiff; + delay(100); + //} + + } else delay(20); + + + if (lcd_clicked()) { + + lcd_set_lang(cursor_pos-1); + delay(500); + + } + /* + if (++counter == 80) { + hlaska++; + if(hlaska>LANG_NUM) hlaska=1; + lcd_mylang_top(hlaska); + lcd_mylang_drawcursor(cursor_pos); + counter=0; + } + */ + }; + + lcd_set_custom_characters_degree(); + lcd_implementation_clear(); + lcd_return_to_status(); + +} + static void lcd_main_menu() { - SDscrool = 0; - START_MENU(); - - // Majkl superawesome menu - - MENU_ITEM(back, MSG_WATCH, lcd_status_screen); - - - - if (movesplanned() || IS_SD_PRINTING) - { - MENU_ITEM(submenu, MSG_TUNE, lcd_tune_menu); - }else{ - MENU_ITEM(submenu, MSG_PREHEAT, lcd_preheat_menu); - } - #ifdef SDSUPPORT - if (card.cardOK) - { - if (card.isFileOpen()) - { - if (card.sdprinting) - MENU_ITEM(function, MSG_PAUSE_PRINT, lcd_sdcard_pause); - else - MENU_ITEM(function, MSG_RESUME_PRINT, lcd_sdcard_resume); - MENU_ITEM(function, MSG_STOP_PRINT, lcd_sdcard_stop); - }else{ - MENU_ITEM(submenu, MSG_CARD_MENU, lcd_sdcard_menu); - #if SDCARDDETECT < 1 - MENU_ITEM(gcode, MSG_CNG_SDCARD, PSTR("M21")); // SD-card changed by user - #endif - } - }else{ - MENU_ITEM(submenu, MSG_NO_CARD, lcd_sdcard_menu); - #if SDCARDDETECT < 1 - MENU_ITEM(gcode, MSG_INIT_SDCARD, PSTR("M21")); // Manually initialize the SD-card via user interface - #endif - } - #endif + SDscrool = 0; + /* + if (langsel == 1) + { + lcd_goto_menu(lcd_language_menu); + } + */ + START_MENU(); + + // Majkl superawesome menu + + + MENU_ITEM(back, MSG_WATCH, lcd_status_screen); + + if (IS_SD_PRINTING && (current_position[Z_AXIS] < 0.5) ) + { + EEPROM_read_B(EEPROM_BABYSTEP_X, &babystepMem[0]); + EEPROM_read_B(EEPROM_BABYSTEP_Y, &babystepMem[1]); + EEPROM_read_B(EEPROM_BABYSTEP_Z, &babystepMem[2]); + + MENU_ITEM(submenu, MSG_BABYSTEP_Z, lcd_babystep_z);//8 + } + + + - if (IS_SD_PRINTING) + if (movesplanned() || IS_SD_PRINTING) + { + MENU_ITEM(submenu, MSG_TUNE, lcd_tune_menu); + } else { + MENU_ITEM(submenu, MSG_PREHEAT, lcd_preheat_menu); + } + +#ifdef SDSUPPORT + if (card.cardOK) + { + if (card.isFileOpen()) { - - }else{ - - MENU_ITEM(function, MSG_LOAD_FILAMENT, lcd_LoadFilament); - MENU_ITEM(function, MSG_UNLOAD_FILAMENT, lcd_unLoadFilament); - - MENU_ITEM(submenu, MSG_SETTINGS, lcd_settings_menu); - + if (card.sdprinting) + MENU_ITEM(function, MSG_PAUSE_PRINT, lcd_sdcard_pause); + else + MENU_ITEM(function, MSG_RESUME_PRINT, lcd_sdcard_resume); + MENU_ITEM(function, MSG_STOP_PRINT, lcd_sdcard_stop); + } else { + MENU_ITEM(submenu, MSG_CARD_MENU, lcd_sdcard_menu); +#if SDCARDDETECT < 1 + MENU_ITEM(gcode, MSG_CNG_SDCARD, PSTR("M21")); // SD-card changed by user +#endif } - + } else { + MENU_ITEM(submenu, MSG_NO_CARD, lcd_sdcard_menu); +#if SDCARDDETECT < 1 + MENU_ITEM(gcode, MSG_INIT_SDCARD, PSTR("M21")); // Manually initialize the SD-card via user interface +#endif + } +#endif - - MENU_ITEM(submenu, MSG_SUPPORT, lcd_support_menu); - - END_MENU(); + if (IS_SD_PRINTING) + { + + } else { + + MENU_ITEM(function, MSG_LOAD_FILAMENT, lcd_LoadFilament); + MENU_ITEM(function, MSG_UNLOAD_FILAMENT, lcd_unLoadFilament); + + MENU_ITEM(submenu, MSG_SETTINGS, lcd_settings_menu); + + } + + + + + MENU_ITEM(submenu, MSG_SUPPORT, lcd_support_menu); + + END_MENU(); } @@ -1086,48 +1370,46 @@ static void lcd_main_menu() #ifdef SDSUPPORT static void lcd_autostart_sd() { - card.lastnr=0; - card.setroot(); - card.checkautostart(true); + card.lastnr = 0; + card.setroot(); + card.checkautostart(true); } #endif -static void lcd_silent_mode_set_tune(){ - SilentModeMenu = !SilentModeMenu; - EEPROM_save(4095,(uint8_t*)&SilentModeMenu,sizeof(SilentModeMenu)); - digipot_init(); - lcd_goto_menu(lcd_tune_menu, 9); +static void lcd_silent_mode_set_tune() { + SilentModeMenu = !SilentModeMenu; + EEPROM_save(EEPROM_SILENT, (uint8_t*)&SilentModeMenu, sizeof(SilentModeMenu)); + digipot_init(); + lcd_goto_menu(lcd_tune_menu, 9); } static void lcd_tune_menu() { - EEPROM_read(4095,(uint8_t*)&SilentModeMenu,sizeof(SilentModeMenu)); + EEPROM_read(EEPROM_SILENT, (uint8_t*)&SilentModeMenu, sizeof(SilentModeMenu)); - EEPROM_read_B(4093,&babystepMem[0]); - EEPROM_read_B(4091,&babystepMem[1]); - EEPROM_read_B(4089,&babystepMem[2]); + - START_MENU(); - MENU_ITEM(back, MSG_MAIN, lcd_main_menu); //1 - MENU_ITEM_EDIT(int3, MSG_SPEED, &feedmultiply, 10, 999);//2 + START_MENU(); + MENU_ITEM(back, MSG_MAIN, lcd_main_menu); //1 + MENU_ITEM_EDIT(int3, MSG_SPEED, &feedmultiply, 10, 999);//2 - MENU_ITEM_EDIT(int3, MSG_NOZZLE, &target_temperature[0], 0, HEATER_0_MAXTEMP - 10);//3 - MENU_ITEM_EDIT(int3, MSG_BED, &target_temperature_bed, 0, BED_MAXTEMP - 10);//4 + MENU_ITEM_EDIT(int3, MSG_NOZZLE, &target_temperature[0], 0, HEATER_0_MAXTEMP - 10);//3 + MENU_ITEM_EDIT(int3, MSG_BED, &target_temperature_bed, 0, BED_MAXTEMP - 10);//4 - MENU_ITEM_EDIT(int3, MSG_FAN_SPEED, &fanSpeed, 0, 255);//5 - MENU_ITEM_EDIT(int3, MSG_FLOW, &extrudemultiply, 10, 999);//6 + MENU_ITEM_EDIT(int3, MSG_FAN_SPEED, &fanSpeed, 0, 255);//5 + MENU_ITEM_EDIT(int3, MSG_FLOW, &extrudemultiply, 10, 999);//6 #ifdef FILAMENTCHANGEENABLE - MENU_ITEM(gcode, MSG_FILAMENTCHANGE, PSTR("M600"));//7 + MENU_ITEM(gcode, MSG_FILAMENTCHANGE, PSTR("M600"));//7 #endif - MENU_ITEM(submenu, MSG_BABYSTEP_Z, lcd_babystep_z);//8 - if(SilentModeMenu == 0){ - MENU_ITEM(function, MSG_SILENT_MODE_OFF, lcd_silent_mode_set_tune); - }else{ - MENU_ITEM(function, MSG_SILENT_MODE_ON, lcd_silent_mode_set_tune); - } - END_MENU(); + + if (SilentModeMenu == 0) { + MENU_ITEM(function, MSG_SILENT_MODE_OFF, lcd_silent_mode_set_tune); + } else { + MENU_ITEM(function, MSG_SILENT_MODE_ON, lcd_silent_mode_set_tune); + } + END_MENU(); } @@ -1135,154 +1417,154 @@ static void lcd_tune_menu() static void lcd_move_menu_01mm() { - move_menu_scale = 0.1; - lcd_move_menu_axis(); + move_menu_scale = 0.1; + lcd_move_menu_axis(); } static void lcd_control_temperature_menu() { #ifdef PIDTEMP - // set up temp variables - undo the default scaling - raw_Ki = unscalePID_i(Ki); - raw_Kd = unscalePID_d(Kd); + // set up temp variables - undo the default scaling + raw_Ki = unscalePID_i(Ki); + raw_Kd = unscalePID_d(Kd); #endif - START_MENU(); - MENU_ITEM(back, MSG_SETTINGS, lcd_settings_menu); - //MENU_ITEM(back, MSG_CONTROL, lcd_control_menu); + START_MENU(); + MENU_ITEM(back, MSG_SETTINGS, lcd_settings_menu); + //MENU_ITEM(back, MSG_CONTROL, lcd_control_menu); #if TEMP_SENSOR_0 != 0 - MENU_ITEM_EDIT(int3, MSG_NOZZLE, &target_temperature[0], 0, HEATER_0_MAXTEMP - 10); + MENU_ITEM_EDIT(int3, MSG_NOZZLE, &target_temperature[0], 0, HEATER_0_MAXTEMP - 10); #endif #if TEMP_SENSOR_1 != 0 - MENU_ITEM_EDIT(int3, MSG_NOZZLE1, &target_temperature[1], 0, HEATER_1_MAXTEMP - 10); + MENU_ITEM_EDIT(int3, MSG_NOZZLE1, &target_temperature[1], 0, HEATER_1_MAXTEMP - 10); #endif #if TEMP_SENSOR_2 != 0 - MENU_ITEM_EDIT(int3, MSG_NOZZLE2, &target_temperature[2], 0, HEATER_2_MAXTEMP - 10); + MENU_ITEM_EDIT(int3, MSG_NOZZLE2, &target_temperature[2], 0, HEATER_2_MAXTEMP - 10); #endif #if TEMP_SENSOR_BED != 0 - MENU_ITEM_EDIT(int3, MSG_BED, &target_temperature_bed, 0, BED_MAXTEMP - 3); + MENU_ITEM_EDIT(int3, MSG_BED, &target_temperature_bed, 0, BED_MAXTEMP - 3); #endif - MENU_ITEM_EDIT(int3, MSG_FAN_SPEED, &fanSpeed, 0, 255); + MENU_ITEM_EDIT(int3, MSG_FAN_SPEED, &fanSpeed, 0, 255); #if defined AUTOTEMP && (TEMP_SENSOR_0 != 0) - MENU_ITEM_EDIT(bool, MSG_AUTOTEMP, &autotemp_enabled); - MENU_ITEM_EDIT(float3, MSG_MIN, &autotemp_min, 0, HEATER_0_MAXTEMP - 10); - MENU_ITEM_EDIT(float3, MSG_MAX, &autotemp_max, 0, HEATER_0_MAXTEMP - 10); - MENU_ITEM_EDIT(float32, MSG_FACTOR, &autotemp_factor, 0.0, 1.0); + MENU_ITEM_EDIT(bool, MSG_AUTOTEMP, &autotemp_enabled); + MENU_ITEM_EDIT(float3, MSG_MIN, &autotemp_min, 0, HEATER_0_MAXTEMP - 10); + MENU_ITEM_EDIT(float3, MSG_MAX, &autotemp_max, 0, HEATER_0_MAXTEMP - 10); + MENU_ITEM_EDIT(float32, MSG_FACTOR, &autotemp_factor, 0.0, 1.0); #endif - END_MENU(); + END_MENU(); } #if SDCARDDETECT == -1 static void lcd_sd_refresh() { - card.initsd(); - currentMenuViewOffset = 0; + card.initsd(); + currentMenuViewOffset = 0; } #endif static void lcd_sd_updir() { - SDscrool = 0; - card.updir(); - currentMenuViewOffset = 0; + SDscrool = 0; + card.updir(); + currentMenuViewOffset = 0; } void lcd_sdcard_menu() { - int tempScrool = 0; - if (lcdDrawUpdate == 0 && LCD_CLICKED == 0) - //delay(100); - return; // nothing to do (so don't thrash the SD card) - uint16_t fileCnt = card.getnrfilenames(); + int tempScrool = 0; + if (lcdDrawUpdate == 0 && LCD_CLICKED == 0) + //delay(100); + return; // nothing to do (so don't thrash the SD card) + uint16_t fileCnt = card.getnrfilenames(); - START_MENU(); - MENU_ITEM(back, MSG_MAIN, lcd_main_menu); - card.getWorkDirName(); - if(card.filename[0]=='/') - { + START_MENU(); + MENU_ITEM(back, MSG_MAIN, lcd_main_menu); + card.getWorkDirName(); + if (card.filename[0] == '/') + { #if SDCARDDETECT == -1 - MENU_ITEM(function, LCD_STR_REFRESH MSG_REFRESH, lcd_sd_refresh); + MENU_ITEM(function, LCD_STR_REFRESH MSG_REFRESH, lcd_sd_refresh); #endif - }else{ - MENU_ITEM(function, LCD_STR_FOLDER "..", lcd_sd_updir); - } + } else { + MENU_ITEM(function, LCD_STR_FOLDER "..", lcd_sd_updir); + } - for(uint16_t i=0;i<fileCnt;i++) + for (uint16_t i = 0; i < fileCnt; i++) + { + if (_menuItemNr == _lineNr) { - if (_menuItemNr == _lineNr) - { - #ifndef SDCARD_RATHERRECENTFIRST - card.getfilename(i); - #else - card.getfilename(fileCnt-1-i); - #endif - if (card.filenameIsDir) - { - MENU_ITEM(sddirectory, MSG_CARD_MENU, card.filename, card.longFilename); - }else{ - - MENU_ITEM(sdfile, MSG_CARD_MENU, card.filename, card.longFilename); - - - - - } - }else{ - MENU_ITEM_DUMMY(); - } +#ifndef SDCARD_RATHERRECENTFIRST + card.getfilename(i); +#else + card.getfilename(fileCnt - 1 - i); +#endif + if (card.filenameIsDir) + { + MENU_ITEM(sddirectory, MSG_CARD_MENU, card.filename, card.longFilename); + } else { + + MENU_ITEM(sdfile, MSG_CARD_MENU, card.filename, card.longFilename); + + + + + } + } else { + MENU_ITEM_DUMMY(); } - END_MENU(); + } + END_MENU(); } #define menu_edit_type(_type, _name, _strFunc, scale) \ - void menu_edit_ ## _name () \ + void menu_edit_ ## _name () \ + { \ + if ((int32_t)encoderPosition < 0) encoderPosition = 0; \ + if ((int32_t)encoderPosition > maxEditValue) encoderPosition = maxEditValue; \ + if (lcdDrawUpdate) \ + lcd_implementation_drawedit(editLabel, _strFunc(((_type)((int32_t)encoderPosition + minEditValue)) / scale)); \ + if (LCD_CLICKED) \ { \ - if ((int32_t)encoderPosition < 0) encoderPosition = 0; \ - if ((int32_t)encoderPosition > maxEditValue) encoderPosition = maxEditValue; \ - if (lcdDrawUpdate) \ - lcd_implementation_drawedit(editLabel, _strFunc(((_type)((int32_t)encoderPosition + minEditValue)) / scale)); \ - if (LCD_CLICKED) \ - { \ - *((_type*)editValue) = ((_type)((int32_t)encoderPosition + minEditValue)) / scale; \ - lcd_goto_menu(prevMenu, prevEncoderPosition); \ - } \ - } \ - void menu_edit_callback_ ## _name () { \ - menu_edit_ ## _name (); \ - if (LCD_CLICKED) (*callbackFunc)(); \ + *((_type*)editValue) = ((_type)((int32_t)encoderPosition + minEditValue)) / scale; \ + lcd_goto_menu(prevMenu, prevEncoderPosition); \ } \ - static void menu_action_setting_edit_ ## _name (const char* pstr, _type* ptr, _type minValue, _type maxValue) \ - { \ - prevMenu = currentMenu; \ - prevEncoderPosition = encoderPosition; \ - \ - lcdDrawUpdate = 2; \ - currentMenu = menu_edit_ ## _name; \ - \ - editLabel = pstr; \ - editValue = ptr; \ - minEditValue = minValue * scale; \ - maxEditValue = maxValue * scale - minEditValue; \ - encoderPosition = (*ptr) * scale - minEditValue; \ - }\ - static void menu_action_setting_edit_callback_ ## _name (const char* pstr, _type* ptr, _type minValue, _type maxValue, menuFunc_t callback) \ - { \ - prevMenu = currentMenu; \ - prevEncoderPosition = encoderPosition; \ - \ - lcdDrawUpdate = 2; \ - currentMenu = menu_edit_callback_ ## _name; \ - \ - editLabel = pstr; \ - editValue = ptr; \ - minEditValue = minValue * scale; \ - maxEditValue = maxValue * scale - minEditValue; \ - encoderPosition = (*ptr) * scale - minEditValue; \ - callbackFunc = callback;\ - } + } \ + void menu_edit_callback_ ## _name () { \ + menu_edit_ ## _name (); \ + if (LCD_CLICKED) (*callbackFunc)(); \ + } \ + static void menu_action_setting_edit_ ## _name (const char* pstr, _type* ptr, _type minValue, _type maxValue) \ + { \ + prevMenu = currentMenu; \ + prevEncoderPosition = encoderPosition; \ + \ + lcdDrawUpdate = 2; \ + currentMenu = menu_edit_ ## _name; \ + \ + editLabel = pstr; \ + editValue = ptr; \ + minEditValue = minValue * scale; \ + maxEditValue = maxValue * scale - minEditValue; \ + encoderPosition = (*ptr) * scale - minEditValue; \ + }\ + static void menu_action_setting_edit_callback_ ## _name (const char* pstr, _type* ptr, _type minValue, _type maxValue, menuFunc_t callback) \ + { \ + prevMenu = currentMenu; \ + prevEncoderPosition = encoderPosition; \ + \ + lcdDrawUpdate = 2; \ + currentMenu = menu_edit_callback_ ## _name; \ + \ + editLabel = pstr; \ + editValue = ptr; \ + minEditValue = minValue * scale; \ + maxEditValue = maxValue * scale - minEditValue; \ + encoderPosition = (*ptr) * scale - minEditValue; \ + callbackFunc = callback;\ + } menu_edit_type(int, int3, itostr3, 1) menu_edit_type(float, float3, ftostr3, 1) menu_edit_type(float, float32, ftostr32, 100) @@ -1298,206 +1580,223 @@ menu_edit_type(unsigned long, long5, ftostr5, 0.01) static void lcd_quick_feedback() { - lcdDrawUpdate = 2; - blocking_enc = millis() + 500; - lcd_implementation_quick_feedback(); + lcdDrawUpdate = 2; + blocking_enc = millis() + 500; + lcd_implementation_quick_feedback(); } /** Menu action functions **/ -static void menu_action_back(menuFunc_t data) { lcd_goto_menu(data); } -static void menu_action_submenu(menuFunc_t data) { lcd_goto_menu(data); } -static void menu_action_gcode(const char* pgcode) { enquecommand_P(pgcode); } -static void menu_action_function(menuFunc_t data) { (*data)(); } +static void menu_action_back(menuFunc_t data) { + lcd_goto_menu(data); +} +static void menu_action_submenu(menuFunc_t data) { + lcd_goto_menu(data); +} +static void menu_action_gcode(const char* pgcode) { + enquecommand_P(pgcode); +} +static void menu_action_setlang(unsigned char lang) { + lcd_set_lang(lang); +} +static void menu_action_function(menuFunc_t data) { + (*data)(); +} static void menu_action_sdfile(const char* filename, char* longFilename) { - char cmd[30]; - char* c; - sprintf_P(cmd, PSTR("M23 %s"), filename); - for(c = &cmd[4]; *c; c++) - *c = tolower(*c); - enquecommand(cmd); - enquecommand_P(PSTR("M24")); - lcd_return_to_status(); + char cmd[30]; + char* c; + sprintf_P(cmd, PSTR("M23 %s"), filename); + for (c = &cmd[4]; *c; c++) + *c = tolower(*c); + enquecommand(cmd); + enquecommand_P(PSTR("M24")); + lcd_return_to_status(); } static void menu_action_sddirectory(const char* filename, char* longFilename) { - card.chdir(filename); - encoderPosition = 0; + card.chdir(filename); + encoderPosition = 0; } static void menu_action_setting_edit_bool(const char* pstr, bool* ptr) { - *ptr = !(*ptr); + *ptr = !(*ptr); } static void menu_action_setting_edit_callback_bool(const char* pstr, bool* ptr, menuFunc_t callback) { - menu_action_setting_edit_bool(pstr, ptr); - (*callback)(); + menu_action_setting_edit_bool(pstr, ptr); + (*callback)(); } #endif//ULTIPANEL /** LCD API **/ void lcd_init() { - lcd_implementation_init(); + lcd_implementation_init(); #ifdef NEWPANEL - SET_INPUT(BTN_EN1); - SET_INPUT(BTN_EN2); - WRITE(BTN_EN1,HIGH); - WRITE(BTN_EN2,HIGH); - #if BTN_ENC > 0 - SET_INPUT(BTN_ENC); - WRITE(BTN_ENC,HIGH); - #endif - #ifdef REPRAPWORLD_KEYPAD - pinMode(SHIFT_CLK,OUTPUT); - pinMode(SHIFT_LD,OUTPUT); - pinMode(SHIFT_OUT,INPUT); - WRITE(SHIFT_OUT,HIGH); - WRITE(SHIFT_LD,HIGH); - #endif + SET_INPUT(BTN_EN1); + SET_INPUT(BTN_EN2); + WRITE(BTN_EN1, HIGH); + WRITE(BTN_EN2, HIGH); +#if BTN_ENC > 0 + SET_INPUT(BTN_ENC); + WRITE(BTN_ENC, HIGH); +#endif +#ifdef REPRAPWORLD_KEYPAD + pinMode(SHIFT_CLK, OUTPUT); + pinMode(SHIFT_LD, OUTPUT); + pinMode(SHIFT_OUT, INPUT); + WRITE(SHIFT_OUT, HIGH); + WRITE(SHIFT_LD, HIGH); +#endif #else // Not NEWPANEL - #ifdef SR_LCD_2W_NL // Non latching 2 wire shift register - pinMode (SR_DATA_PIN, OUTPUT); - pinMode (SR_CLK_PIN, OUTPUT); - #elif defined(SHIFT_CLK) - pinMode(SHIFT_CLK,OUTPUT); - pinMode(SHIFT_LD,OUTPUT); - pinMode(SHIFT_EN,OUTPUT); - pinMode(SHIFT_OUT,INPUT); - WRITE(SHIFT_OUT,HIGH); - WRITE(SHIFT_LD,HIGH); - WRITE(SHIFT_EN,LOW); - #else - #ifdef ULTIPANEL - #error ULTIPANEL requires an encoder - #endif - #endif // SR_LCD_2W_NL +#ifdef SR_LCD_2W_NL // Non latching 2 wire shift register + pinMode (SR_DATA_PIN, OUTPUT); + pinMode (SR_CLK_PIN, OUTPUT); +#elif defined(SHIFT_CLK) + pinMode(SHIFT_CLK, OUTPUT); + pinMode(SHIFT_LD, OUTPUT); + pinMode(SHIFT_EN, OUTPUT); + pinMode(SHIFT_OUT, INPUT); + WRITE(SHIFT_OUT, HIGH); + WRITE(SHIFT_LD, HIGH); + WRITE(SHIFT_EN, LOW); +#else +#ifdef ULTIPANEL +#error ULTIPANEL requires an encoder +#endif +#endif // SR_LCD_2W_NL #endif//!NEWPANEL #if defined (SDSUPPORT) && defined(SDCARDDETECT) && (SDCARDDETECT > 0) - pinMode(SDCARDDETECT,INPUT); - WRITE(SDCARDDETECT, HIGH); - lcd_oldcardstatus = IS_SD_INSERTED; + pinMode(SDCARDDETECT, INPUT); + WRITE(SDCARDDETECT, HIGH); + lcd_oldcardstatus = IS_SD_INSERTED; #endif//(SDCARDDETECT > 0) #ifdef LCD_HAS_SLOW_BUTTONS - slow_buttons = 0; + slow_buttons = 0; #endif - lcd_buttons_update(); + lcd_buttons_update(); #ifdef ULTIPANEL - encoderDiff = 0; + encoderDiff = 0; #endif } + + + +//#include <avr/pgmspace.h> + + void lcd_update() { - static unsigned long timeoutToStatus = 0; + static unsigned long timeoutToStatus = 0; - #ifdef LCD_HAS_SLOW_BUTTONS - slow_buttons = lcd_implementation_read_slow_buttons(); // buttons which take too long to read in interrupt context - #endif +#ifdef LCD_HAS_SLOW_BUTTONS + slow_buttons = lcd_implementation_read_slow_buttons(); // buttons which take too long to read in interrupt context +#endif - lcd_buttons_update(); + lcd_buttons_update(); - #if (SDCARDDETECT > 0) - if((IS_SD_INSERTED != lcd_oldcardstatus && lcd_detected())) - { - lcdDrawUpdate = 2; - lcd_oldcardstatus = IS_SD_INSERTED; - lcd_implementation_init( // to maybe revive the LCD if static electricity killed it. - #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) - currentMenu == lcd_status_screen - #endif - ); +#if (SDCARDDETECT > 0) + if ((IS_SD_INSERTED != lcd_oldcardstatus && lcd_detected())) + { + lcdDrawUpdate = 2; + lcd_oldcardstatus = IS_SD_INSERTED; + lcd_implementation_init( // to maybe revive the LCD if static electricity killed it. +#if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) + currentMenu == lcd_status_screen +#endif + ); - if(lcd_oldcardstatus) - { - card.initsd(); - LCD_MESSAGEPGM(MSG_SD_INSERTED); - } - else - { - card.release(); - LCD_MESSAGEPGM(MSG_SD_REMOVED); - } + if (lcd_oldcardstatus) + { + card.initsd(); + LCD_MESSAGERPGM(MSG_SD_INSERTED); } - #endif//CARDINSERTED - - if (lcd_next_update_millis < millis()) + else { + card.release(); + LCD_MESSAGERPGM(MSG_SD_REMOVED); + } + } +#endif//CARDINSERTED + + if (lcd_next_update_millis < millis()) + { #ifdef ULTIPANEL - #ifdef REPRAPWORLD_KEYPAD - if (REPRAPWORLD_KEYPAD_MOVE_Z_UP) { - reprapworld_keypad_move_z_up(); - } - if (REPRAPWORLD_KEYPAD_MOVE_Z_DOWN) { - reprapworld_keypad_move_z_down(); - } - if (REPRAPWORLD_KEYPAD_MOVE_X_LEFT) { - reprapworld_keypad_move_x_left(); - } - if (REPRAPWORLD_KEYPAD_MOVE_X_RIGHT) { - reprapworld_keypad_move_x_right(); - } - if (REPRAPWORLD_KEYPAD_MOVE_Y_DOWN) { - reprapworld_keypad_move_y_down(); - } - if (REPRAPWORLD_KEYPAD_MOVE_Y_UP) { - reprapworld_keypad_move_y_up(); - } - if (REPRAPWORLD_KEYPAD_MOVE_HOME) { - reprapworld_keypad_move_home(); - } - #endif - if (abs(encoderDiff) >= ENCODER_PULSES_PER_STEP) - { - lcdDrawUpdate = 1; - encoderPosition += encoderDiff / ENCODER_PULSES_PER_STEP; - encoderDiff = 0; - timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS; - } - if (LCD_CLICKED) - timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS; +#ifdef REPRAPWORLD_KEYPAD + if (REPRAPWORLD_KEYPAD_MOVE_Z_UP) { + reprapworld_keypad_move_z_up(); + } + if (REPRAPWORLD_KEYPAD_MOVE_Z_DOWN) { + reprapworld_keypad_move_z_down(); + } + if (REPRAPWORLD_KEYPAD_MOVE_X_LEFT) { + reprapworld_keypad_move_x_left(); + } + if (REPRAPWORLD_KEYPAD_MOVE_X_RIGHT) { + reprapworld_keypad_move_x_right(); + } + if (REPRAPWORLD_KEYPAD_MOVE_Y_DOWN) { + reprapworld_keypad_move_y_down(); + } + if (REPRAPWORLD_KEYPAD_MOVE_Y_UP) { + reprapworld_keypad_move_y_up(); + } + if (REPRAPWORLD_KEYPAD_MOVE_HOME) { + reprapworld_keypad_move_home(); + } +#endif + if (abs(encoderDiff) >= ENCODER_PULSES_PER_STEP) + { + lcdDrawUpdate = 1; + encoderPosition += encoderDiff / ENCODER_PULSES_PER_STEP; + encoderDiff = 0; + timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS; + } + if (LCD_CLICKED) + timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS; #endif//ULTIPANEL #ifdef DOGLCD // Changes due to different driver architecture of the DOGM display - blink++; // Variable for fan animation and alive dot - u8g.firstPage(); - do - { - u8g.setFont(u8g_font_6x10_marlin); - u8g.setPrintPos(125,0); - if (blink % 2) u8g.setColorIndex(1); else u8g.setColorIndex(0); // Set color for the alive dot - u8g.drawPixel(127,63); // draw alive dot - u8g.setColorIndex(1); // black on white - (*currentMenu)(); - if (!lcdDrawUpdate) break; // Terminate display update, when nothing new to draw. This must be done before the last dogm.next() - } while( u8g.nextPage() ); + blink++; // Variable for fan animation and alive dot + u8g.firstPage(); + do + { + u8g.setFont(u8g_font_6x10_marlin); + u8g.setPrintPos(125, 0); + if (blink % 2) u8g.setColorIndex(1); else u8g.setColorIndex(0); // Set color for the alive dot + u8g.drawPixel(127, 63); // draw alive dot + u8g.setColorIndex(1); // black on white + (*currentMenu)(); + if (!lcdDrawUpdate) break; // Terminate display update, when nothing new to draw. This must be done before the last dogm.next() + } while ( u8g.nextPage() ); #else - (*currentMenu)(); + (*currentMenu)(); #endif #ifdef LCD_HAS_STATUS_INDICATORS - lcd_implementation_update_indicators(); + lcd_implementation_update_indicators(); #endif #ifdef ULTIPANEL - if(timeoutToStatus < millis() && currentMenu != lcd_status_screen) - { - lcd_return_to_status(); - lcdDrawUpdate = 2; - } -#endif//ULTIPANEL - if (lcdDrawUpdate == 2) lcd_implementation_clear(); - if (lcdDrawUpdate) lcdDrawUpdate--; - lcd_next_update_millis = millis() + LCD_UPDATE_INTERVAL; + if (timeoutToStatus < millis() && currentMenu != lcd_status_screen) + { + lcd_return_to_status(); + lcdDrawUpdate = 2; } +#endif//ULTIPANEL + if (lcdDrawUpdate == 2) lcd_implementation_clear(); + if (lcdDrawUpdate) lcdDrawUpdate--; + lcd_next_update_millis = millis() + LCD_UPDATE_INTERVAL; + } } void lcd_ignore_click(bool b) { - ignore_click = b; - wait_for_unclick = false; + ignore_click = b; + wait_for_unclick = false; } void lcd_finishstatus() { @@ -1508,50 +1807,50 @@ void lcd_finishstatus() { } } lcd_status_message[LCD_WIDTH] = '\0'; - #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) - #if PROGRESS_MSG_EXPIRE > 0 - messageTick = - #endif +#if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) +#if PROGRESS_MSG_EXPIRE > 0 + messageTick = +#endif progressBarTick = millis(); - #endif +#endif lcdDrawUpdate = 2; - #ifdef FILAMENT_LCD_DISPLAY - message_millis = millis(); //get status message to show up for a while - #endif +#ifdef FILAMENT_LCD_DISPLAY + message_millis = millis(); //get status message to show up for a while +#endif } void lcd_setstatus(const char* message) { - if (lcd_status_message_level > 0) - return; - strncpy(lcd_status_message, message, LCD_WIDTH); - lcd_finishstatus(); + if (lcd_status_message_level > 0) + return; + strncpy(lcd_status_message, message, LCD_WIDTH); + lcd_finishstatus(); } void lcd_setstatuspgm(const char* message) { - if (lcd_status_message_level > 0) - return; - strncpy_P(lcd_status_message, message, LCD_WIDTH); - lcd_finishstatus(); + if (lcd_status_message_level > 0) + return; + strncpy_P(lcd_status_message, message, LCD_WIDTH); + lcd_finishstatus(); } void lcd_setalertstatuspgm(const char* message) { - lcd_setstatuspgm(message); - lcd_status_message_level = 1; + lcd_setstatuspgm(message); + lcd_status_message_level = 1; #ifdef ULTIPANEL - lcd_return_to_status(); + lcd_return_to_status(); #endif//ULTIPANEL } void lcd_reset_alert_level() { - lcd_status_message_level = 0; + lcd_status_message_level = 0; } #ifdef DOGLCD void lcd_setcontrast(uint8_t value) { - lcd_contrast = value & 63; - u8g.setContrast(lcd_contrast); + lcd_contrast = value & 63; + u8g.setContrast(lcd_contrast); } #endif @@ -1560,82 +1859,82 @@ void lcd_setcontrast(uint8_t value) void lcd_buttons_update() { #ifdef NEWPANEL - uint8_t newbutton=0; - if(READ(BTN_EN1)==0) newbutton|=EN_A; - if(READ(BTN_EN2)==0) newbutton|=EN_B; - #if BTN_ENC > 0 - if((blocking_enc<millis()) && (READ(BTN_ENC)==0)) - newbutton |= EN_C; - #endif - buttons = newbutton; - #ifdef LCD_HAS_SLOW_BUTTONS - buttons |= slow_buttons; - #endif - #ifdef REPRAPWORLD_KEYPAD - // for the reprapworld_keypad - uint8_t newbutton_reprapworld_keypad=0; - WRITE(SHIFT_LD,LOW); - WRITE(SHIFT_LD,HIGH); - for(int8_t i=0;i<8;i++) { - newbutton_reprapworld_keypad = newbutton_reprapworld_keypad>>1; - if(READ(SHIFT_OUT)) - newbutton_reprapworld_keypad|=(1<<7); - WRITE(SHIFT_CLK,HIGH); - WRITE(SHIFT_CLK,LOW); - } - buttons_reprapworld_keypad=~newbutton_reprapworld_keypad; //invert it, because a pressed switch produces a logical 0 - #endif + uint8_t newbutton = 0; + if (READ(BTN_EN1) == 0) newbutton |= EN_A; + if (READ(BTN_EN2) == 0) newbutton |= EN_B; +#if BTN_ENC > 0 + if ((blocking_enc < millis()) && (READ(BTN_ENC) == 0)) + newbutton |= EN_C; +#endif + buttons = newbutton; +#ifdef LCD_HAS_SLOW_BUTTONS + buttons |= slow_buttons; +#endif +#ifdef REPRAPWORLD_KEYPAD + // for the reprapworld_keypad + uint8_t newbutton_reprapworld_keypad = 0; + WRITE(SHIFT_LD, LOW); + WRITE(SHIFT_LD, HIGH); + for (int8_t i = 0; i < 8; i++) { + newbutton_reprapworld_keypad = newbutton_reprapworld_keypad >> 1; + if (READ(SHIFT_OUT)) + newbutton_reprapworld_keypad |= (1 << 7); + WRITE(SHIFT_CLK, HIGH); + WRITE(SHIFT_CLK, LOW); + } + buttons_reprapworld_keypad = ~newbutton_reprapworld_keypad; //invert it, because a pressed switch produces a logical 0 +#endif #else //read it from the shift register - uint8_t newbutton=0; - WRITE(SHIFT_LD,LOW); - WRITE(SHIFT_LD,HIGH); - unsigned char tmp_buttons=0; - for(int8_t i=0;i<8;i++) - { - newbutton = newbutton>>1; - if(READ(SHIFT_OUT)) - newbutton|=(1<<7); - WRITE(SHIFT_CLK,HIGH); - WRITE(SHIFT_CLK,LOW); - } - buttons=~newbutton; //invert it, because a pressed switch produces a logical 0 + uint8_t newbutton = 0; + WRITE(SHIFT_LD, LOW); + WRITE(SHIFT_LD, HIGH); + unsigned char tmp_buttons = 0; + for (int8_t i = 0; i < 8; i++) + { + newbutton = newbutton >> 1; + if (READ(SHIFT_OUT)) + newbutton |= (1 << 7); + WRITE(SHIFT_CLK, HIGH); + WRITE(SHIFT_CLK, LOW); + } + buttons = ~newbutton; //invert it, because a pressed switch produces a logical 0 #endif//!NEWPANEL - //manage encoder rotation - uint8_t enc=0; - if (buttons & EN_A) enc |= B01; - if (buttons & EN_B) enc |= B10; - if(enc != lastEncoderBits) + //manage encoder rotation + uint8_t enc = 0; + if (buttons & EN_A) enc |= B01; + if (buttons & EN_B) enc |= B10; + if (enc != lastEncoderBits) + { + switch (enc) { - switch(enc) - { - case encrot0: - if(lastEncoderBits==encrot3) - encoderDiff++; - else if(lastEncoderBits==encrot1) - encoderDiff--; - break; - case encrot1: - if(lastEncoderBits==encrot0) - encoderDiff++; - else if(lastEncoderBits==encrot2) - encoderDiff--; - break; - case encrot2: - if(lastEncoderBits==encrot1) - encoderDiff++; - else if(lastEncoderBits==encrot3) - encoderDiff--; - break; - case encrot3: - if(lastEncoderBits==encrot2) - encoderDiff++; - else if(lastEncoderBits==encrot0) - encoderDiff--; - break; - } + case encrot0: + if (lastEncoderBits == encrot3) + encoderDiff++; + else if (lastEncoderBits == encrot1) + encoderDiff--; + break; + case encrot1: + if (lastEncoderBits == encrot0) + encoderDiff++; + else if (lastEncoderBits == encrot2) + encoderDiff--; + break; + case encrot2: + if (lastEncoderBits == encrot1) + encoderDiff++; + else if (lastEncoderBits == encrot3) + encoderDiff--; + break; + case encrot3: + if (lastEncoderBits == encrot2) + encoderDiff++; + else if (lastEncoderBits == encrot0) + encoderDiff--; + break; } - lastEncoderBits = enc; + } + lastEncoderBits = enc; } bool lcd_detected(void) @@ -1650,7 +1949,7 @@ bool lcd_detected(void) void lcd_buzz(long duration, uint16_t freq) { #ifdef LCD_USE_I2C_BUZZER - lcd.buzz(duration,freq); + lcd.buzz(duration, freq); #endif } @@ -1673,88 +1972,88 @@ char *ftostr3(const float &x) char *itostr2(const uint8_t &x) { //sprintf(conv,"%5.1f",x); - int xx=x; - conv[0]=(xx/10)%10+'0'; - conv[1]=(xx)%10+'0'; - conv[2]=0; + int xx = x; + conv[0] = (xx / 10) % 10 + '0'; + conv[1] = (xx) % 10 + '0'; + conv[2] = 0; return conv; } // Convert float to string with 123.4 format, dropping sign char *ftostr31(const float &x) { - int xx=x*10; - conv[0]=(xx>=0)?'+':'-'; - xx=abs(xx); - conv[1]=(xx/1000)%10+'0'; - conv[2]=(xx/100)%10+'0'; - conv[3]=(xx/10)%10+'0'; - conv[4]='.'; - conv[5]=(xx)%10+'0'; - conv[6]=0; + int xx = x * 10; + conv[0] = (xx >= 0) ? '+' : '-'; + xx = abs(xx); + conv[1] = (xx / 1000) % 10 + '0'; + conv[2] = (xx / 100) % 10 + '0'; + conv[3] = (xx / 10) % 10 + '0'; + conv[4] = '.'; + conv[5] = (xx) % 10 + '0'; + conv[6] = 0; return conv; } // Convert float to string with 123.4 format char *ftostr31ns(const float &x) { - int xx=x*10; + int xx = x * 10; //conv[0]=(xx>=0)?'+':'-'; - xx=abs(xx); - conv[0]=(xx/1000)%10+'0'; - conv[1]=(xx/100)%10+'0'; - conv[2]=(xx/10)%10+'0'; - conv[3]='.'; - conv[4]=(xx)%10+'0'; - conv[5]=0; + xx = abs(xx); + conv[0] = (xx / 1000) % 10 + '0'; + conv[1] = (xx / 100) % 10 + '0'; + conv[2] = (xx / 10) % 10 + '0'; + conv[3] = '.'; + conv[4] = (xx) % 10 + '0'; + conv[5] = 0; return conv; } char *ftostr32(const float &x) { - long xx=x*100; + long xx = x * 100; if (xx >= 0) - conv[0]=(xx/10000)%10+'0'; + conv[0] = (xx / 10000) % 10 + '0'; else - conv[0]='-'; - xx=abs(xx); - conv[1]=(xx/1000)%10+'0'; - conv[2]=(xx/100)%10+'0'; - conv[3]='.'; - conv[4]=(xx/10)%10+'0'; - conv[5]=(xx)%10+'0'; - conv[6]=0; + conv[0] = '-'; + xx = abs(xx); + conv[1] = (xx / 1000) % 10 + '0'; + conv[2] = (xx / 100) % 10 + '0'; + conv[3] = '.'; + conv[4] = (xx / 10) % 10 + '0'; + conv[5] = (xx) % 10 + '0'; + conv[6] = 0; return conv; } // Convert float to string with 1.234 format char *ftostr43(const float &x) { - long xx = x * 1000; - if (xx >= 0) - conv[0] = (xx / 1000) % 10 + '0'; - else - conv[0] = '-'; - xx = abs(xx); - conv[1] = '.'; - conv[2] = (xx / 100) % 10 + '0'; - conv[3] = (xx / 10) % 10 + '0'; - conv[4] = (xx) % 10 + '0'; - conv[5] = 0; - return conv; + long xx = x * 1000; + if (xx >= 0) + conv[0] = (xx / 1000) % 10 + '0'; + else + conv[0] = '-'; + xx = abs(xx); + conv[1] = '.'; + conv[2] = (xx / 100) % 10 + '0'; + conv[3] = (xx / 10) % 10 + '0'; + conv[4] = (xx) % 10 + '0'; + conv[5] = 0; + return conv; } //Float to string with 1.23 format char *ftostr12ns(const float &x) { - long xx=x*100; - - xx=abs(xx); - conv[0]=(xx/100)%10+'0'; - conv[1]='.'; - conv[2]=(xx/10)%10+'0'; - conv[3]=(xx)%10+'0'; - conv[4]=0; + long xx = x * 100; + + xx = abs(xx); + conv[0] = (xx / 100) % 10 + '0'; + conv[1] = '.'; + conv[2] = (xx / 10) % 10 + '0'; + conv[3] = (xx) % 10 + '0'; + conv[4] = 0; return conv; } @@ -1806,13 +2105,13 @@ char *ftostr32sp(const float &x) { char *itostr31(const int &xx) { - conv[0]=(xx>=0)?'+':'-'; - conv[1]=(xx/1000)%10+'0'; - conv[2]=(xx/100)%10+'0'; - conv[3]=(xx/10)%10+'0'; - conv[4]='.'; - conv[5]=(xx)%10+'0'; - conv[6]=0; + conv[0] = (xx >= 0) ? '+' : '-'; + conv[1] = (xx / 1000) % 10 + '0'; + conv[2] = (xx / 100) % 10 + '0'; + conv[3] = (xx / 10) % 10 + '0'; + conv[4] = '.'; + conv[5] = (xx) % 10 + '0'; + conv[6] = 0; return conv; } @@ -1821,18 +2120,18 @@ char *itostr3(const int &x) { int xx = x; if (xx < 0) { - conv[0]='-'; - xx = -xx; + conv[0] = '-'; + xx = -xx; } else if (xx >= 100) - conv[0]=(xx/100)%10+'0'; + conv[0] = (xx / 100) % 10 + '0'; else - conv[0]=' '; + conv[0] = ' '; if (xx >= 10) - conv[1]=(xx/10)%10+'0'; + conv[1] = (xx / 10) % 10 + '0'; else - conv[1]=' '; - conv[2]=(xx)%10+'0'; - conv[3]=0; + conv[1] = ' '; + conv[2] = (xx) % 10 + '0'; + conv[3] = 0; return conv; } @@ -1841,21 +2140,21 @@ char *itostr3left(const int &xx) { if (xx >= 100) { - conv[0]=(xx/100)%10+'0'; - conv[1]=(xx/10)%10+'0'; - conv[2]=(xx)%10+'0'; - conv[3]=0; + conv[0] = (xx / 100) % 10 + '0'; + conv[1] = (xx / 10) % 10 + '0'; + conv[2] = (xx) % 10 + '0'; + conv[3] = 0; } else if (xx >= 10) { - conv[0]=(xx/10)%10+'0'; - conv[1]=(xx)%10+'0'; - conv[2]=0; + conv[0] = (xx / 10) % 10 + '0'; + conv[1] = (xx) % 10 + '0'; + conv[2] = 0; } else { - conv[0]=(xx)%10+'0'; - conv[1]=0; + conv[0] = (xx) % 10 + '0'; + conv[1] = 0; } return conv; } @@ -1885,32 +2184,32 @@ char *ftostr5(const float &x) { // Convert float to string with +1234.5 format char *ftostr51(const float &x) { - long xx=x*10; - conv[0]=(xx>=0)?'+':'-'; - xx=abs(xx); - conv[1]=(xx/10000)%10+'0'; - conv[2]=(xx/1000)%10+'0'; - conv[3]=(xx/100)%10+'0'; - conv[4]=(xx/10)%10+'0'; - conv[5]='.'; - conv[6]=(xx)%10+'0'; - conv[7]=0; + long xx = x * 10; + conv[0] = (xx >= 0) ? '+' : '-'; + xx = abs(xx); + conv[1] = (xx / 10000) % 10 + '0'; + conv[2] = (xx / 1000) % 10 + '0'; + conv[3] = (xx / 100) % 10 + '0'; + conv[4] = (xx / 10) % 10 + '0'; + conv[5] = '.'; + conv[6] = (xx) % 10 + '0'; + conv[7] = 0; return conv; } // Convert float to string with +123.45 format char *ftostr52(const float &x) { - long xx=x*100; - conv[0]=(xx>=0)?'+':'-'; - xx=abs(xx); - conv[1]=(xx/10000)%10+'0'; - conv[2]=(xx/1000)%10+'0'; - conv[3]=(xx/100)%10+'0'; - conv[4]='.'; - conv[5]=(xx/10)%10+'0'; - conv[6]=(xx)%10+'0'; - conv[7]=0; + long xx = x * 100; + conv[0] = (xx >= 0) ? '+' : '-'; + xx = abs(xx); + conv[1] = (xx / 10000) % 10 + '0'; + conv[2] = (xx / 1000) % 10 + '0'; + conv[3] = (xx / 100) % 10 + '0'; + conv[4] = '.'; + conv[5] = (xx / 10) % 10 + '0'; + conv[6] = (xx) % 10 + '0'; + conv[7] = 0; return conv; } @@ -1934,4 +2233,4 @@ void copy_and_scalePID_d() #endif } -#endif //ULTRA_LCD +#endif //ULTRA_LCD
\ No newline at end of file |