diff --git a/Documentation/Logo/Marlin Logo LCD High.png b/Documentation/Logo/Marlin Logo LCD High.png new file mode 100644 index 000000000..81225c3de Binary files /dev/null and b/Documentation/Logo/Marlin Logo LCD High.png differ diff --git a/Documentation/Logo/Marlin Logo LCD Low.png b/Documentation/Logo/Marlin Logo LCD Low.png new file mode 100644 index 000000000..34b80c493 Binary files /dev/null and b/Documentation/Logo/Marlin Logo LCD Low.png differ diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 9b77f96f4..dfc1965e6 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -24,8 +24,11 @@ // User-specified version info of this build to display in [Pronterface, etc] terminal window during // startup. Implementation of an idea by Prof Braino to inform user that any changes made to this // build by the user have been successfully uploaded into firmware. +#define STRING_VERSION "v1.0.2" +#define STRING_URL "reprap.org" #define STRING_VERSION_CONFIG_H __DATE__ " " __TIME__ // build date and time #define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes. +#define STRING_SPLASH STRING_VERSION " - " STRING_URL // will be shown during bootup // SERIAL_PORT selects which serial port should be used for communication with the host. // This allows the connection of wireless adapters (for instance) to non-default port pins. diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 50c4581a2..c2dd54bbb 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -297,7 +297,7 @@ // using: //#define MENU_ADDAUTOSTART -// Show a progress bar on the LCD when printing from SD? +// Show a progress bar on HD44780 LCDs for SD printing //#define LCD_PROGRESS_BAR #ifdef LCD_PROGRESS_BAR @@ -309,6 +309,12 @@ #define PROGRESS_MSG_EXPIRE 0 // Enable this to show messages for MSG_TIME then hide them //#define PROGRESS_MSG_ONCE + #ifdef DOGLCD + #warning LCD_PROGRESS_BAR does not apply to graphical displays at this time. + #endif + #ifdef FILAMENT_LCD_DISPLAY + #error LCD_PROGRESS_BAR and FILAMENT_LCD_DISPLAY are not fully compatible. Comment out this line to use both. + #endif #endif // The hardware watchdog should reset the microcontroller disabling all outputs, in case the firmware gets stuck and doesn't do temperature regulation. diff --git a/Marlin/DOGMbitmaps.h b/Marlin/DOGMbitmaps.h index b149b7609..b735477e3 100644 --- a/Marlin/DOGMbitmaps.h +++ b/Marlin/DOGMbitmaps.h @@ -1,28 +1,78 @@ -#define START_BMPWIDTH 60 //Width in pixels - http://www.digole.com/tools/PicturetoC_Hex_converter.php -#define START_BMPHEIGHT 64 //Height in pixels -#define START_BMPBYTEWIDTH 8 //Width in bytes -const unsigned char start_bmp[574] PROGMEM = { //AVR-GCC, WinAVR -0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0x30,0x00,0x00,0x00,0x00,0x00,0x3f,0xff, -0x40,0x00,0x00,0x00,0x00,0x00,0x1f,0xff, -0xc0,0x00,0x00,0x00,0x00,0x00,0x0f,0xff, -0x80,0x83,0x00,0x00,0x01,0x80,0x07,0xff, -0x83,0xef,0xc0,0x00,0x01,0x8c,0x03,0xff, -0x87,0xff,0xe0,0x00,0x01,0x8c,0x01,0xff, -0x8e,0x38,0x60,0x00,0x01,0x80,0x00,0xff, -0x8c,0x18,0x67,0xe0,0xf9,0x8c,0x7e,0x7f, -0x8c,0x18,0x6f,0xf1,0xfd,0x8c,0xfe,0x3f, -0x8c,0x18,0x6e,0x31,0x8d,0x8c,0xc7,0x1f, -0x8c,0x18,0x6c,0x39,0x8d,0x8c,0xc3,0x1f, -0x8c,0x18,0x6c,0x19,0x81,0x8c,0xc3,0x1f, -0x8c,0x18,0x6e,0x19,0x81,0x8c,0xc3,0x1f, -0x8c,0x18,0x6f,0x9f,0x81,0xef,0xc3,0x1f, -0x8c,0x18,0x67,0xdf,0x80,0xef,0xc3,0x1f, -0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x1f, -0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x2f, -0x30,0x00,0x00,0x00,0x00,0x00,0x00,0xcf, -0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0x8f -}; +// BitMap for splashscreen +// Generated with: http://www.digole.com/tools/PicturetoC_Hex_converter.php +// Please note that using the high-res version takes about 0.5KB of +#ifdef START_BMPHIGH + #define START_BMPWIDTH 112 + #define START_BMPHEIGHT 38 + #define START_BMPBYTEWIDTH 14 + #define START_BMPBYTES 532 // START_BMPWIDTH * START_BMPHEIGHT / 8 + + const unsigned char start_bmp[START_BMPBYTES] PROGMEM = { + 0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff + ,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff + ,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff + ,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff + ,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff + ,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff + ,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff + ,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x3f,0xff + ,0xc0,0x0f,0xc0,0xfc,0x00,0x00,0x00,0x00,0x00,0x78,0x18,0x00,0x1f,0xff + ,0xc0,0x3f,0xe1,0xff,0x00,0x00,0x00,0x00,0x00,0x78,0x3c,0x00,0x0f,0xff + ,0xc0,0x7f,0xf3,0xff,0x80,0x00,0x00,0x00,0x00,0x78,0x3c,0x00,0x07,0xff + ,0xc0,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x78,0x3c,0x00,0x03,0xff + ,0xc1,0xf8,0x7f,0x87,0xe0,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xff + ,0xc1,0xf0,0x3f,0x03,0xe0,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xff + ,0xc1,0xe0,0x1e,0x01,0xe0,0x1f,0x00,0x03,0xe0,0x78,0x3c,0x03,0xf0,0x7f + ,0xc1,0xe0,0x1e,0x01,0xe0,0x7f,0xc0,0x0f,0xf8,0x78,0x3c,0x07,0xfc,0x3f + ,0xc1,0xe0,0x1e,0x01,0xe1,0xff,0xe0,0x1f,0xfc,0x78,0x3c,0x0f,0xfe,0x1f + ,0xc1,0xe0,0x1e,0x01,0xe3,0xff,0xf0,0x3f,0xfe,0x78,0x3c,0x1f,0xfe,0x0f + ,0xc1,0xe0,0x1e,0x01,0xe3,0xf3,0xf8,0x3f,0x3e,0x78,0x3c,0x3f,0x3f,0x07 + ,0xc1,0xe0,0x1e,0x01,0xe7,0xe0,0xfc,0x7c,0x1f,0x78,0x3c,0x3e,0x1f,0x07 + ,0xc1,0xe0,0x1e,0x01,0xe7,0xc0,0x7c,0x7c,0x0f,0x78,0x3c,0x3c,0x0f,0x03 + ,0xc1,0xe0,0x1e,0x01,0xe7,0x80,0x7c,0x78,0x0f,0x78,0x3c,0x3c,0x0f,0x03 + ,0xc1,0xe0,0x1e,0x01,0xe7,0x80,0x3c,0x78,0x00,0x78,0x3c,0x3c,0x0f,0x03 + ,0xc1,0xe0,0x1e,0x01,0xe7,0x80,0x3c,0x78,0x00,0x78,0x3c,0x3c,0x0f,0x03 + ,0xc1,0xe0,0x1e,0x01,0xe7,0x80,0x3c,0x78,0x00,0x78,0x3c,0x3c,0x0f,0x03 + ,0xc1,0xe0,0x1e,0x01,0xe7,0xc0,0x3c,0x78,0x00,0x78,0x3c,0x3c,0x0f,0x03 + ,0xc1,0xe0,0x1e,0x01,0xe3,0xe0,0x3c,0x78,0x00,0x7c,0x3c,0x3c,0x0f,0x03 + ,0xc1,0xe0,0x1e,0x01,0xe3,0xff,0x3f,0xf8,0x00,0x7f,0xbc,0x3c,0x0f,0x03 + ,0xc1,0xe0,0x1e,0x01,0xe1,0xff,0x3f,0xf8,0x00,0x3f,0xbf,0xfc,0x0f,0x03 + ,0xc1,0xe0,0x1e,0x01,0xe0,0xff,0x3f,0xf8,0x00,0x1f,0xbf,0xfc,0x0f,0x03 + ,0xc1,0xe0,0x1e,0x01,0xe0,0x7f,0x3f,0xf8,0x00,0x0f,0xbf,0xfc,0x0f,0x03 + ,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07 + ,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06 + ,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e + ,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c + ,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78 + ,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0 + ,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80 }; +#else + #define START_BMPWIDTH 56 + #define START_BMPHEIGHT 19 + #define START_BMPBYTEWIDTH 7 + #define START_BMPBYTES 133 // START_BMPWIDTH * START_BMPHEIGHT / 8 + + const unsigned char start_bmp[START_BMPBYTES] PROGMEM = { + 0x1f,0xff,0xff,0xff,0xff,0xff,0xff + ,0x60,0x00,0x00,0x00,0x00,0x01,0xff + ,0x40,0x00,0x00,0x00,0x00,0x00,0xff + ,0x80,0x00,0x00,0x00,0x00,0x00,0x7f + ,0x83,0xcf,0x00,0x00,0x0c,0x30,0x3f + ,0x87,0xff,0x80,0x00,0x0c,0x30,0x1f + ,0x86,0x79,0x80,0x00,0x0c,0x00,0x0f + ,0x8c,0x30,0xc7,0x83,0x8c,0x30,0xe7 + ,0x8c,0x30,0xcf,0xc7,0xcc,0x31,0xf3 + ,0x8c,0x30,0xdc,0xec,0xec,0x33,0xb9 + ,0x8c,0x30,0xd8,0x6c,0x6c,0x33,0x19 + ,0x8c,0x30,0xd0,0x6c,0x0c,0x33,0x19 + ,0x8c,0x30,0xd8,0x6c,0x0c,0x33,0x19 + ,0x8c,0x30,0xdc,0x6c,0x0e,0x3b,0x19 + ,0x8c,0x30,0xcf,0x7c,0x07,0x9f,0x19 + ,0x8c,0x30,0xc7,0x7c,0x03,0x8f,0x19 + ,0x40,0x00,0x00,0x00,0x00,0x00,0x02 + ,0x60,0x00,0x00,0x00,0x00,0x00,0x06 + ,0x1f,0xff,0xff,0xff,0xff,0xff,0xf8 }; +#endif // Here comes a compile-time operation to match the extruder symbols // on the info screen to the set number of extruders in configuration.h diff --git a/Marlin/dogm_lcd_implementation.h b/Marlin/dogm_lcd_implementation.h index bcbe5f792..6f595ce77 100644 --- a/Marlin/dogm_lcd_implementation.h +++ b/Marlin/dogm_lcd_implementation.h @@ -1,19 +1,20 @@ /** - *dogm_lcd_implementation.h + * dogm_lcd_implementation.h * - *Graphics LCD implementation for 128x64 pixel LCDs by STB for ErikZalm/Marlin - *Demonstrator: http://www.reprap.org/wiki/STB_Electronics - *License: http://opensource.org/licenses/BSD-3-Clause + * Graphics LCD implementation for 128x64 pixel LCDs by STB for ErikZalm/Marlin + * Demonstrator: http://www.reprap.org/wiki/STB_Electronics + * License: http://opensource.org/licenses/BSD-3-Clause * - *With the use of: - *u8glib by Oliver Kraus - *http://code.google.com/p/u8glib/ - *License: http://opensource.org/licenses/BSD-3-Clause + * With the use of: + * u8glib by Oliver Kraus + * http://code.google.com/p/u8glib/ + * License: http://opensource.org/licenses/BSD-3-Clause */ +#ifndef DOGM_LCD_IMPLEMENTATION_H +#define DOGM_LCD_IMPLEMENTATION_H -#ifndef ULTRA_LCD_IMPLEMENTATION_DOGM_H -#define ULTRA_LCD_IMPLEMENTATION_DOGM_H +#define MARLIN_VERSION "1.0.2" /** * Implementation of the LCD display routines for a DOGM128 graphic display. These are common LCD 128x64 pixel graphic displays. @@ -51,12 +52,12 @@ */ // DOGM parameters (size in pixels) -#define DOG_CHAR_WIDTH 6 -#define DOG_CHAR_HEIGHT 12 -#define DOG_CHAR_WIDTH_LARGE 9 -#define DOG_CHAR_HEIGHT_LARGE 18 +#define DOG_CHAR_WIDTH 6 +#define DOG_CHAR_HEIGHT 12 +#define DOG_CHAR_WIDTH_LARGE 9 +#define DOG_CHAR_HEIGHT_LARGE 18 -#define START_ROW 0 +#define START_ROW 0 /* Custom characters defined in font font_6x10_marlin.c */ #define LCD_STR_DEGREE "\xB0" @@ -69,7 +70,7 @@ #define LCD_STR_BEDTEMP "\xFE" #define LCD_STR_THERMOMETER "\xFF" -#define FONT_STATUSMENU u8g_font_6x9 +#define FONT_STATUSMENU u8g_font_6x9 int lcd_contrast; @@ -82,78 +83,64 @@ U8GLIB_ST7920_128X64_RRD u8g(0); U8GLIB_NHD_C12864 u8g(DOGLCD_CS, DOGLCD_A0); #else // for regular DOGM128 display with HW-SPI -U8GLIB_DOGM128 u8g(DOGLCD_CS, DOGLCD_A0); // HW-SPI Com: CS, A0 +U8GLIB_DOGM128 u8g(DOGLCD_CS, DOGLCD_A0); // HW-SPI Com: CS, A0 #endif static void lcd_implementation_init() { -#ifdef LCD_PIN_BL - pinMode(LCD_PIN_BL, OUTPUT); // Enable LCD backlight - digitalWrite(LCD_PIN_BL, HIGH); -#endif + #ifdef LCD_PIN_BL // Enable LCD backlight + pinMode(LCD_PIN_BL, OUTPUT); + digitalWrite(LCD_PIN_BL, HIGH); + #endif - u8g.setContrast(lcd_contrast); - // Uncomment this if you have the first generation (V1.10) of STBs board - // pinMode(17, OUTPUT); // Enable LCD backlight - // digitalWrite(17, HIGH); + u8g.setContrast(lcd_contrast); + // FIXME: remove this workaround + // Uncomment this if you have the first generation (V1.10) of STBs board + // pinMode(17, OUTPUT); // Enable LCD backlight + // digitalWrite(17, HIGH); + +#ifdef LCD_SCREEN_ROT_90 + u8g.setRot90(); // Rotate screen by 90° +#elif defined(LCD_SCREEN_ROT_180) + u8g.setRot180(); // Rotate screen by 180° +#elif defined(LCD_SCREEN_ROT_270) + u8g.setRot270(); // Rotate screen by 270° +#endif + // FIXME: whats the purpose of the box? Maybe clear screen? u8g.firstPage(); - do { + do { u8g.setFont(u8g_font_6x10_marlin); u8g.setColorIndex(1); u8g.drawBox (0, 0, u8g.getWidth(), u8g.getHeight()); u8g.setColorIndex(1); - } while( u8g.nextPage() ); + } while(u8g.nextPage()); -#ifdef LCD_SCREEN_ROT_90 - u8g.setRot90(); // Rotate screen by 90° -#endif - -#ifdef LCD_SCREEN_ROT_180 - u8g.setRot180(); // Rotate screen by 180° -#endif - -#ifdef LCD_SCREEN_ROT_270 - u8g.setRot270(); // Rotate screen by 270° -#endif - - + // Show splashscreen + int off = (u8g.getWidth() - START_BMPWIDTH) / 2; + int txtX = (u8g.getWidth() - sizeof(STRING_SPLASH) - 1) / 2; + int txtY = u8g.getHeight() - 10; u8g.firstPage(); do { - // RepRap init bmp - u8g.drawBitmapP(7,7,START_BMPBYTEWIDTH,START_BMPHEIGHT,start_bmp); - // Welcome message + #ifdef START_BMPHIGH + u8g.drawBitmapP(off, off, START_BMPBYTEWIDTH, START_BMPHEIGHT, start_bmp); + #else + u8g.setScale2x2(); + u8g.drawBitmapP(off, off, START_BMPBYTEWIDTH, START_BMPHEIGHT, start_bmp); + u8g.undoScale(); + #endif - - - u8g.setFont(u8g_font_5x8); - u8g.drawStr(7,51,"V1.0.2 - marlin.reprap.org"); - - } while( u8g.nextPage() ); + u8g.setFont(u8g_font_5x8); + u8g.drawStr(txtX, txtY, STRING_SPLASH); + } while(u8g.nextPage()); } -static void lcd_implementation_clear() -{ -// NO NEED TO IMPLEMENT LIKE SO. Picture loop automatically clears the display. -// -// Check this article: http://arduino.cc/forum/index.php?topic=91395.25;wap2 -// -// u8g.firstPage(); -// do { -// u8g.setColorIndex(0); -// u8g.drawBox (0, 0, u8g.getWidth(), u8g.getHeight()); -// u8g.setColorIndex(1); -// } while( u8g.nextPage() ); -} +static void lcd_implementation_clear() { } // Automatically cleared by Picture Loop /* Arduino < 1.0.0 is missing a function to print PROGMEM strings, so we need to implement our own */ -static void lcd_printPGM(const char* str) -{ - char c; - while((c = pgm_read_byte(str++)) != '\0') - { - u8g.print(c); - } +static void lcd_printPGM(const char* str) { + char c; + while ((c = pgm_read_byte(str++))) u8g.print(c); } static void _draw_heater_status(int x, int heater) { @@ -176,49 +163,44 @@ static void _draw_heater_status(int x, int heater) { } } -static void lcd_implementation_status_screen() -{ +static void lcd_implementation_status_screen() { - static unsigned char fan_rot = 0; + static unsigned char fan_rot = 0; - u8g.setColorIndex(1); // black on white + u8g.setColorIndex(1); // black on white + + // Symbols menu graphics, animated fan + u8g.drawBitmapP(9,1,STATUS_SCREENBYTEWIDTH,STATUS_SCREENHEIGHT, (blink % 2) && fanSpeed ? status_screen0_bmp : status_screen1_bmp); - // Symbols menu graphics, animated fan - u8g.drawBitmapP(9,1,STATUS_SCREENBYTEWIDTH,STATUS_SCREENHEIGHT, (blink % 2) && fanSpeed ? status_screen0_bmp : status_screen1_bmp); + #ifdef SDSUPPORT + // SD Card Symbol + u8g.drawBox(42,42,8,7); + u8g.drawBox(50,44,2,5); + u8g.drawFrame(42,49,10,4); + u8g.drawPixel(50,43); + + // Progress bar frame + u8g.drawFrame(54,49,73,4); + + // SD Card Progress bar and clock + u8g.setFont(FONT_STATUSMENU); - #ifdef SDSUPPORT - //SD Card Symbol - u8g.drawBox(42,42,8,7); - u8g.drawBox(50,44,2,5); - u8g.drawFrame(42,49,10,4); - u8g.drawPixel(50,43); - // Progress bar - u8g.drawFrame(54,49,73,4); - - // SD Card Progress bar and clock - u8g.setFont(FONT_STATUSMENU); - - if (IS_SD_PRINTING) - { - // Progress bar - u8g.drawBox(55,50, (unsigned int)( (71 * card.percentDone())/100) ,2); - } + if (IS_SD_PRINTING) { + // Progress bar solid part + u8g.drawBox(55, 50, (unsigned int)(71.f * card.percentDone() / 100.f), 2); + } + + u8g.setPrintPos(80,47); + if (starttime != 0) { + uint16_t time = millis()/60000 - starttime/60000; + u8g.print(itostr2(time/60)); + u8g.print(':'); + u8g.print(itostr2(time%60)); + } else { - // do nothing - } - - u8g.setPrintPos(80,47); - if(starttime != 0) - { - uint16_t time = millis()/60000 - starttime/60000; - - u8g.print(itostr2(time/60)); - u8g.print(':'); - u8g.print(itostr2(time%60)); - }else{ - lcd_printPGM(PSTR("--:--")); - } - #endif + lcd_printPGM(PSTR("--:--")); + } + #endif // Extruders _draw_heater_status(6, 0); @@ -232,107 +214,101 @@ static void lcd_implementation_status_screen() // Heatbed _draw_heater_status(81, -1); - // Fan - u8g.setFont(FONT_STATUSMENU); - u8g.setPrintPos(104,27); - #if defined(FAN_PIN) && FAN_PIN > -1 - u8g.print(itostr3(int((fanSpeed*100)/256 + 1))); - u8g.print("%"); - #else - u8g.print("---"); - #endif - - - // X, Y, Z-Coordinates - u8g.setFont(FONT_STATUSMENU); - u8g.drawBox(0,29,128,10); - u8g.setColorIndex(0); // white on black - u8g.setPrintPos(2,37); - u8g.print("X"); - u8g.drawPixel(8,33); - u8g.drawPixel(8,35); - u8g.setPrintPos(10,37); - u8g.print(ftostr31ns(current_position[X_AXIS])); - u8g.setPrintPos(43,37); - lcd_printPGM(PSTR("Y")); - u8g.drawPixel(49,33); - u8g.drawPixel(49,35); - u8g.setPrintPos(51,37); - u8g.print(ftostr31ns(current_position[Y_AXIS])); - u8g.setPrintPos(83,37); - u8g.print("Z"); - u8g.drawPixel(89,33); - u8g.drawPixel(89,35); - u8g.setPrintPos(91,37); - u8g.print(ftostr31(current_position[Z_AXIS])); - u8g.setColorIndex(1); // black on white - - // Feedrate - u8g.setFont(u8g_font_6x10_marlin); - u8g.setPrintPos(3,49); - u8g.print(LCD_STR_FEEDRATE[0]); - u8g.setFont(FONT_STATUSMENU); - u8g.setPrintPos(12,48); - u8g.print(itostr3(feedmultiply)); - u8g.print('%'); + // Fan + u8g.setFont(FONT_STATUSMENU); + u8g.setPrintPos(104,27); + #if defined(FAN_PIN) && FAN_PIN > -1 + u8g.print(itostr3(int((fanSpeed*100)/256 + 1))); + u8g.print("%"); + #else + u8g.print("---"); + #endif - // Status line - u8g.setFont(FONT_STATUSMENU); - u8g.setPrintPos(0,61); - #ifndef FILAMENT_LCD_DISPLAY - u8g.print(lcd_status_message); - #else - if(message_millis+5000>millis()){ //Display both Status message line and Filament display on the last line - u8g.print(lcd_status_message); - } - else - { - lcd_printPGM(PSTR("dia:")); - u8g.print(ftostr12ns(filament_width_meas)); - lcd_printPGM(PSTR(" factor:")); - u8g.print(itostr3(extrudemultiply)); - u8g.print('%'); - } - #endif + // X, Y, Z-Coordinates + u8g.setFont(FONT_STATUSMENU); + u8g.drawBox(0,29,128,10); + u8g.setColorIndex(0); // white on black + u8g.setPrintPos(2,37); + u8g.print("X"); + u8g.drawPixel(8,33); + u8g.drawPixel(8,35); + u8g.setPrintPos(10,37); + u8g.print(ftostr31ns(current_position[X_AXIS])); + u8g.setPrintPos(43,37); + lcd_printPGM(PSTR("Y")); + u8g.drawPixel(49,33); + u8g.drawPixel(49,35); + u8g.setPrintPos(51,37); + u8g.print(ftostr31ns(current_position[Y_AXIS])); + u8g.setPrintPos(83,37); + u8g.print("Z"); + u8g.drawPixel(89,33); + u8g.drawPixel(89,35); + u8g.setPrintPos(91,37); + u8g.print(ftostr31(current_position[Z_AXIS])); + u8g.setColorIndex(1); // black on white + + // Feedrate + u8g.setFont(u8g_font_6x10_marlin); + u8g.setPrintPos(3,49); + u8g.print(LCD_STR_FEEDRATE[0]); + u8g.setFont(FONT_STATUSMENU); + u8g.setPrintPos(12,48); + u8g.print(itostr3(feedmultiply)); + u8g.print('%'); + // Status line + u8g.setFont(FONT_STATUSMENU); + u8g.setPrintPos(0,61); + #ifndef FILAMENT_LCD_DISPLAY + u8g.print(lcd_status_message); + #else + if (millis() < message_millis + 5000) { //Display both Status message line and Filament display on the last line + u8g.print(lcd_status_message); + } + else { + lcd_printPGM(PSTR("dia:")); + u8g.print(ftostr12ns(filament_width_meas)); + lcd_printPGM(PSTR(" factor:")); + u8g.print(itostr3(extrudemultiply)); + u8g.print('%'); + } + #endif } -static void lcd_implementation_drawmenu_generic(uint8_t row, const char* pstr, char pre_char, char post_char) -{ - char c; - - uint8_t n = LCD_WIDTH - 1 - 2; - - if ((pre_char == '>') || (pre_char == LCD_STR_UPLEVEL[0] )) - { - u8g.setColorIndex(1); // black on white - u8g.drawBox (0, row*DOG_CHAR_HEIGHT + 3, 128, DOG_CHAR_HEIGHT); - u8g.setColorIndex(0); // following text must be white on black - } else u8g.setColorIndex(1); // unmarked text is black on white - - u8g.setPrintPos(0 * DOG_CHAR_WIDTH, (row + 1) * DOG_CHAR_HEIGHT); - u8g.print(pre_char == '>' ? ' ' : pre_char); // Row selector is obsolete +static void lcd_implementation_drawmenu_generic(uint8_t row, const char* pstr, char pre_char, char post_char) { + char c; + + uint8_t n = LCD_WIDTH - 1 - 2; + + if ((pre_char == '>') || (pre_char == LCD_STR_UPLEVEL[0] )) { + u8g.setColorIndex(1); // black on white + u8g.drawBox (0, row*DOG_CHAR_HEIGHT + 3, 128, DOG_CHAR_HEIGHT); + u8g.setColorIndex(0); // following text must be white on black + } + else { + u8g.setColorIndex(1); // unmarked text is black on white + } + + u8g.setPrintPos(0 * DOG_CHAR_WIDTH, (row + 1) * DOG_CHAR_HEIGHT); + u8g.print(pre_char == '>' ? ' ' : pre_char); // Row selector is obsolete - - while( (c = pgm_read_byte(pstr)) != '\0' ) - { - u8g.print(c); - pstr++; - n--; - } - while(n--){ - u8g.print(' '); - } - - u8g.print(post_char); - u8g.print(' '); - u8g.setColorIndex(1); // restore settings to black on white + while((c = pgm_read_byte(pstr))) { + u8g.print(c); + pstr++; + n--; + } + while(n--) u8g.print(' '); + + u8g.print(post_char); + u8g.print(' '); + u8g.setColorIndex(1); // restore settings to black on white } static void _drawmenu_setting_edit_generic(uint8_t row, const char* pstr, char pre_char, const char* data, bool pgm) { char c; uint8_t n = LCD_WIDTH - 1 - 2 - (pgm ? strlen_P(data) : strlen(data)); - + u8g.setPrintPos(0 * DOG_CHAR_WIDTH, (row + 1) * DOG_CHAR_HEIGHT); u8g.print(pre_char); @@ -391,14 +367,13 @@ static void _drawmenu_setting_edit_generic(uint8_t row, const char* pstr, char p #define lcd_implementation_drawmenu_setting_edit_callback_bool_selected(row, pstr, pstr2, data, callback) lcd_implementation_drawmenu_setting_edit_generic_P(row, pstr, '>', (*(data))?PSTR(MSG_ON):PSTR(MSG_OFF)) #define lcd_implementation_drawmenu_setting_edit_callback_bool(row, pstr, pstr2, data, callback) lcd_implementation_drawmenu_setting_edit_generic_P(row, pstr, ' ', (*(data))?PSTR(MSG_ON):PSTR(MSG_OFF)) -void lcd_implementation_drawedit(const char* pstr, char* value) -{ - u8g.setPrintPos(0 * DOG_CHAR_WIDTH_LARGE, (u8g.getHeight() - 1 - DOG_CHAR_HEIGHT_LARGE) - (1 * DOG_CHAR_HEIGHT_LARGE) - START_ROW ); - u8g.setFont(u8g_font_9x18); - lcd_printPGM(pstr); - u8g.print(':'); - u8g.setPrintPos((14 - strlen(value)) * DOG_CHAR_WIDTH_LARGE, (u8g.getHeight() - 1 - DOG_CHAR_HEIGHT_LARGE) - (1 * DOG_CHAR_HEIGHT_LARGE) - START_ROW ); - u8g.print(value); +void lcd_implementation_drawedit(const char* pstr, char* value) { + u8g.setPrintPos(0 * DOG_CHAR_WIDTH_LARGE, (u8g.getHeight() - 1 - DOG_CHAR_HEIGHT_LARGE) - (1 * DOG_CHAR_HEIGHT_LARGE) - START_ROW ); + u8g.setFont(u8g_font_9x18); + lcd_printPGM(pstr); + u8g.print(':'); + u8g.setPrintPos((14 - strlen(value)) * DOG_CHAR_WIDTH_LARGE, (u8g.getHeight() - 1 - DOG_CHAR_HEIGHT_LARGE) - (1 * DOG_CHAR_HEIGHT_LARGE) - START_ROW ); + u8g.print(value); } static void _drawmenu_sd(uint8_t row, const char* pstr, const char* filename, char * const longFilename, bool isDir, bool isSelected) { @@ -417,7 +392,7 @@ static void _drawmenu_sd(uint8_t row, const char* pstr, const char* filename, ch } u8g.setPrintPos(0 * DOG_CHAR_WIDTH, (row + 1) * DOG_CHAR_HEIGHT); - u8g.print(' '); // Indent by 1 char + u8g.print(' '); // Indent by 1 char if (isDir) u8g.print(LCD_STR_FOLDER[0]); @@ -445,20 +420,16 @@ static void _drawmenu_sd(uint8_t row, const char* pstr, const char* filename, ch #define lcd_implementation_drawmenu_function_selected(row, pstr, data) lcd_implementation_drawmenu_generic(row, pstr, '>', ' ') #define lcd_implementation_drawmenu_function(row, pstr, data) lcd_implementation_drawmenu_generic(row, pstr, ' ', ' ') -static void lcd_implementation_quick_feedback() -{ - -#if BEEPER > -1 +static void lcd_implementation_quick_feedback() { + #if BEEPER > -1 SET_OUTPUT(BEEPER); - for(int8_t i=0;i<10;i++) - { - WRITE(BEEPER,HIGH); - delay(3); - WRITE(BEEPER,LOW); - delay(3); + for(int8_t i=0; i<10; i++) { + WRITE(BEEPER,HIGH); + delay(3); + WRITE(BEEPER,LOW); + delay(3); } -#endif + #endif } -#endif//ULTRA_LCD_IMPLEMENTATION_DOGM_H - +#endif //__DOGM_LCD_IMPLEMENTATION_H diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp index f380d45cc..db9073e18 100644 --- a/Marlin/ultralcd.cpp +++ b/Marlin/ultralcd.cpp @@ -196,7 +196,7 @@ static void lcd_goto_menu(menuFunc_t menu, const uint32_t encoder=0, const bool if (feedback) lcd_quick_feedback(); // For LCD_PROGRESS_BAR re-initialize the custom characters - #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) + #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) && !defined(DOGLCD) lcd_set_custom_characters(menu == lcd_status_screen); #endif } @@ -205,7 +205,7 @@ static void lcd_goto_menu(menuFunc_t menu, const uint32_t encoder=0, const bool /* Main status screen. It's up to the implementation specific part to show what is needed. As this is very display dependent */ static void lcd_status_screen() { - #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) + #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) && !defined(DOGLCD) uint16_t mil = millis(); #ifndef PROGRESS_MSG_ONCE if (mil > progressBarTick + PROGRESS_BAR_MSG_TIME + PROGRESS_BAR_BAR_TIME) { @@ -237,11 +237,12 @@ static void lcd_status_screen() lcd_status_update_delay--; else lcdDrawUpdate = 1; - if (lcdDrawUpdate) - { + + if (lcdDrawUpdate) { lcd_implementation_status_screen(); 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; @@ -266,7 +267,7 @@ static void lcd_status_screen() { 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) + #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) && !defined(DOGLCD) currentMenu == lcd_status_screen #endif ); @@ -1216,7 +1217,7 @@ void lcd_update() 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) + #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) && !defined(DOGLCD) currentMenu == lcd_status_screen #endif ); @@ -1319,7 +1320,7 @@ void lcd_finishstatus() { } } lcd_status_message[LCD_WIDTH] = '\0'; - #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) + #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) && !defined(DOGLCD) #if PROGRESS_MSG_EXPIRE > 0 messageTick = #endif diff --git a/Marlin/ultralcd.h b/Marlin/ultralcd.h index a175f4a75..30175be39 100644 --- a/Marlin/ultralcd.h +++ b/Marlin/ultralcd.h @@ -49,7 +49,7 @@ #ifdef FILAMENT_LCD_DISPLAY extern unsigned long message_millis; #endif - + void lcd_buzz(long duration,uint16_t freq); bool lcd_clicked();