Commit 0d88052d authored by MagoKimbra's avatar MagoKimbra

Merge remote-tracking branch 'refs/remotes/origin/master' into dev

parents 928bcfc7 3ecc37ff
### Version 4.2.8
* Add board folder with files of various board containing the pins
* Add End time on Graphics display when SD print
* Rewrite macros
* Fix M109 so it won't wait for cooling
* Clear code
......
......@@ -38,55 +38,112 @@
// be displayed.
#if HOTENDS == 1
#define STATUS_SCREENWIDTH 115 //Width in pixels
#define STATUS_SCREENHEIGHT 19 //Height in pixels
#define STATUS_SCREENBYTEWIDTH 15 //Width in bytes
const unsigned char status_screen0_bmp[] PROGMEM = { //AVR-GCC, WinAVR
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x0C, 0x60,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x0E, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x0F, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x0F, 0xA0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x07, 0xA0,
0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x40, 0x60, 0x20,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x00, 0x40, 0xF0, 0x20,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x00, 0x40, 0xF0, 0x20,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x40, 0x60, 0x20,
0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x5E, 0x07, 0xA0,
0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x10, 0x00, 0x5F, 0x0F, 0xA0,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x10, 0x00, 0x4F, 0x0F, 0x20,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x47, 0x0E, 0x20,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x63, 0x0C, 0x60,
0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xE0,
0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00
};
#ifdef COLOR_MIXING_EXTRUDER
#define STATUS_SCREENWIDTH 115 //Width in pixels
#define STATUS_SCREENHEIGHT 19 //Height in pixels
#define STATUS_SCREENBYTEWIDTH 15 //Width in bytes
const unsigned char status_screen0_bmp[] PROGMEM = {
0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 127, 255, 224,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 224, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 252, 96, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 252, 32, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 240, 32, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 64, 96, 32, 31, 192, 15, 224,
7, 240, 3, 248, 0, 0, 0, 0, 88, 1, 160, 249, 240, 124,
120, 61, 220, 30, 238, 0, 65, 4, 0, 92, 99, 160, 246,
240, 123, 248, 60, 156, 31, 94, 0, 32, 130, 0, 94, 247,
160, 246, 240, 123, 248, 61, 92, 31, 190, 0, 32, 130,
0, 94, 247, 160, 49, 192, 27, 224, 13, 208, 7, 184, 0,
65, 4, 0, 92, 99, 160, 54, 192, 27, 224, 13, 208, 7,
184, 0, 130, 8, 0, 88,1, 160, 246, 240, 123, 248, 61,
220, 31, 190, 1, 4, 16, 0, 64, 96, 32, 241, 240, 124,
120, 61, 220, 31, 190, 1, 4, 16, 0, 64, 240, 32, 255,
240, 127, 248, 63, 252, 31, 254, 0, 130, 8, 0, 65, 248,
32, 31, 192, 15, 224, 7, 240, 3, 248, 0, 65, 4, 0, 97,
248, 96, 15, 128, 7, 192, 3, 224, 1, 240, 0, 0, 0, 0,
112, 0, 224, 7, 0, 3, 128, 1, 192, 0, 224, 1, 255, 255,
128, 127, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, 1, 255,
255, 128, 0, 0, 0
};
#define STATUS_SCREENWIDTH 115 //Width in pixels
#define STATUS_SCREENHEIGHT 19 //Height in pixels
#define STATUS_SCREENBYTEWIDTH 15 //Width in bytes
const unsigned char status_screen1_bmp[] PROGMEM = { //AVR-GCC, WinAVR
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xF8, 0x60,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xF8, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xF0, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x01, 0xA0,
0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x5C, 0x63, 0xA0,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x00, 0x5E, 0xF7, 0xA0,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x00, 0x5E, 0xF7, 0xA0,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x5C, 0x63, 0xA0,
0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x58, 0x01, 0xA0,
0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x10, 0x00, 0x40, 0x60, 0x20,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x10, 0x00, 0x40, 0xF0, 0x20,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x41, 0xF8, 0x20,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x61, 0xF8, 0x60,
0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xE0,
0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00
};
#define STATUS_SCREENWIDTH 115 //Width in pixels
#define STATUS_SCREENHEIGHT 19 //Height in pixels
#define STATUS_SCREENBYTEWIDTH 15 //Width in bytes
const unsigned char status_screen1_bmp[] PROGMEM = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 255, 224,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 224, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 14, 96, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 15, 32, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 15, 160, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 95, 15, 160, 31, 192, 15,
224, 7, 240, 3, 248, 0, 0, 0, 0, 95, 15, 160, 249,
240, 124, 120, 61, 220, 30, 238, 0, 65, 4, 0, 64,
240, 32, 246, 240, 123, 248, 60, 156, 31, 94, 0, 32,
130, 0, 64, 240, 32, 246, 240, 123, 248, 61, 92, 31,
190, 0, 32, 130, 0, 64, 240, 32, 49, 192, 27, 224,
13, 208, 7, 184, 0, 65, 4, 0, 64, 240, 32, 54, 192,
27, 224, 13, 208, 7, 184, 0, 130, 8, 0, 95, 15, 160,
246, 240, 123, 248, 61, 220, 31, 190, 1, 4, 16, 0, 95,
15, 160, 241, 240, 124, 120, 61, 220, 31, 190, 1, 4,
16, 0, 95, 15, 160, 255, 240, 127, 248, 63, 252, 31,
254, 0, 130, 8, 0, 79, 15, 32, 31, 192, 15, 224, 7,
240, 3, 248, 0, 65, 4, 0, 103, 14, 96, 15, 128, 7,
192, 3, 224, 1, 240, 0, 0, 0, 0, 112, 0, 224, 7, 0,
3, 128, 1, 192, 0, 224, 1, 255, 255, 128, 127, 255,
224, 0, 0, 0, 0, 0, 0, 0, 0, 1, 255, 255, 128, 0,
0, 0
};
#else // no COLOR_MIXING_EXTRUDER
#define STATUS_SCREENWIDTH 115 //Width in pixels
#define STATUS_SCREENHEIGHT 19 //Height in pixels
#define STATUS_SCREENBYTEWIDTH 15 //Width in bytes
const unsigned char status_screen0_bmp[] PROGMEM = { //AVR-GCC, WinAVR
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x0C, 0x60,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x0E, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x0F, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x0F, 0xA0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x07, 0xA0,
0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x40, 0x60, 0x20,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x00, 0x40, 0xF0, 0x20,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x00, 0x40, 0xF0, 0x20,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x40, 0x60, 0x20,
0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x5E, 0x07, 0xA0,
0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x10, 0x00, 0x5F, 0x0F, 0xA0,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x10, 0x00, 0x4F, 0x0F, 0x20,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x47, 0x0E, 0x20,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x63, 0x0C, 0x60,
0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xE0,
0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00
};
#define STATUS_SCREENWIDTH 115 //Width in pixels
#define STATUS_SCREENHEIGHT 19 //Height in pixels
#define STATUS_SCREENBYTEWIDTH 15 //Width in bytes
const unsigned char status_screen1_bmp[] PROGMEM = { //AVR-GCC, WinAVR
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xF8, 0x60,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xF8, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xF0, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x01, 0xA0,
0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x5C, 0x63, 0xA0,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x00, 0x5E, 0xF7, 0xA0,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x00, 0x5E, 0xF7, 0xA0,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x5C, 0x63, 0xA0,
0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x58, 0x01, 0xA0,
0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x10, 0x00, 0x40, 0x60, 0x20,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x10, 0x00, 0x40, 0xF0, 0x20,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x41, 0xF8, 0x20,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x61, 0xF8, 0x60,
0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xE0,
0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00
};
#endif // no COLOR_MIXING_EXTRUDER
#elif HOTENDS == 2
#define STATUS_SCREENWIDTH 115 //Width in pixels
#define STATUS_SCREENHEIGHT 19 //Height in pixels
......
......@@ -308,28 +308,56 @@ static void lcd_implementation_status_screen() {
u8g.drawBox(55, 50, (unsigned int)(71.f * card.percentDone() / 100.f), 2 - TALL_FONT_CORRECTION);
}
u8g.setPrintPos(80, 48);
u8g.setPrintPos(53, 47);
if (print_job_start_ms != 0) {
#if HAS(LCD_POWER_SENSOR)
if (millis() < print_millis + 1000) {
uint16_t time = (millis() - print_job_start_ms) / 60000;
uint16_t end_time = (time * (100 - card.percentDone())) / card.percentDone();
lcd_print('S');
lcd_print(itostr2(time/60));
lcd_print(':');
lcd_print(itostr2(time%60));
u8g.setPrintPos(90,47);
if (end_time > 1380 || end_time == 0)
u8g.print('E--:--');
else if (end_time > 0) {
u8g.print('E');
u8g.print(itostr2(end_time / 60));
u8g.print(':');
u8g.print(itostr2(end_time %60));
}
}
else {
lcd_print(itostr4(power_consumption_hour-startpower));
lcd_print(itostr4(power_consumption_hour - startpower));
lcd_print((char*)"Wh");
}
#else
uint16_t time = (millis() - print_job_start_ms) / 60000;
uint16_t end_time = (time * (100 - card.percentDone())) / card.percentDone();
lcd_print('S');
lcd_print(itostr2(time / 60));
lcd_print(':');
lcd_print(itostr2(time % 60));
lcd_print(itostr2(time %60));
u8g.setPrintPos(90,47);
if (end_time > (60 * 23))
u8g.print('E--:--');
else if (end_time >= 0) {
u8g.print('E');
u8g.print(itostr2(end_time / 60));
u8g.print(':');
u8g.print(itostr2(end_time %60));
}
#endif
}
else {
lcd_printPGM(PSTR("--:--"));
lcd_printPGM(PSTR("S--:--"));
u8g.setPrintPos(90,47);
lcd_printPGM(PSTR("E--:--"));
}
#endif
......
......@@ -614,7 +614,7 @@ float junction_deviation = 0.1;
// For a mixing extruder, get steps for each
#if ENABLED(COLOR_MIXING_EXTRUDER)
for (uint8_t i = 0; i < DRIVER_EXTRUDERS; i++)
block->mix_steps[i] = block->steps[E_AXIS] * mixing_factor[i];
block->mix_event_count[i] = block->step_event_count / mixing_factor[i];
#endif
// Add update block variables for LASER BEAM control
......
......@@ -31,7 +31,7 @@ typedef struct {
long steps[NUM_AXIS]; // Step count along each axis
#if ENABLED(COLOR_MIXING_EXTRUDER)
float mix_steps[DRIVER_EXTRUDERS]; // Step count for each stepper in a mixing extruder
unsigned long mix_event_count[DRIVER_EXTRUDERS]; // Step count for each stepper in a mixing extruder
#endif
unsigned long step_event_count; // The number of step events required to complete this block
......
......@@ -658,7 +658,8 @@ ISR(TIMER1_COMPA_vect) {
counter_x = counter_y = counter_z = counter_e = new_count;
#if ENABLED(COLOR_MIXING_EXTRUDER)
for (int8_t i = 0; i < DRIVER_EXTRUDERS; i++) counter_m[i] = new_count;
for (uint8_t i = 0; i < DRIVER_EXTRUDERS; i++)
counter_m[i] = -(current_block->mix_event_count[i] >> 1);
#endif
step_events_completed = 0;
......@@ -703,9 +704,9 @@ ISR(TIMER1_COMPA_vect) {
#if ENABLED(COLOR_MIXING_EXTRUDER)
long dir = TEST(out_bits, E_AXIS) ? -1 : 1;
for (uint8_t j = 0; j < DRIVER_EXTRUDERS; j++) {
counter_m[j] += current_block->mix_steps[j];
counter_m[j] += current_block->steps[E_AXIS];
if (counter_m[j] > 0) {
counter_m[j] -= current_block->step_event_count;
counter_m[j] -= current_block->mix_event_count[j];
e_steps[j] += dir;
}
}
......@@ -726,13 +727,9 @@ ISR(TIMER1_COMPA_vect) {
#if DISABLED(ADVANCE)
#if ENABLED(COLOR_MIXING_EXTRUDER)
counter_e += current_block->steps[E_AXIS];
if (counter_e > 0) {
for (uint8_t j = 0; j < DRIVER_EXTRUDERS; j++) {
counter_m[j] += current_block->mix_steps[j];
if (counter_m[j] > 0) En_STEP_WRITE(j, !INVERT_E_STEP_PIN);
}
counter_e -= current_block->step_event_count;
count_position[E_AXIS] += count_direction[E_AXIS];
for (uint8_t j = 0; j < DRIVER_EXTRUDERS; j++) {
counter_m[j] += current_block->steps[E_AXIS];
if (counter_m[j] > 0) En_STEP_WRITE(j, !INVERT_E_STEP_PIN);
}
#else
STEP_START(e, E);
......@@ -755,6 +752,11 @@ ISR(TIMER1_COMPA_vect) {
STEP_END(z, Z);
#if DISABLED(ADVANCE)
#if ENABLED(COLOR_MIXING_EXTRUDER)
// Always count the single E axis
if (counter_e > 0) {
counter_e -= current_block->step_event_count;
count_position[E_AXIS] += count_direction[E_AXIS];
}
for (uint8_t j = 0; j < DRIVER_EXTRUDERS; j++) {
if (counter_m[j] > 0) {
counter_m[j] -= current_block->step_event_count;
......@@ -791,7 +793,14 @@ ISR(TIMER1_COMPA_vect) {
//NOLESS(advance, current_block->advance);
// Do E steps + advance steps
e_steps[current_block->active_driver] += ((advance >> 8) - old_advance);
#if ENABLED(COLOR_MIXING_EXTRUDER)
// Move mixing steppers proportionally
for (uint8_t j = 0; j < DRIVER_EXTRUDERS; j++)
e_steps[j] += ((advance >> 8) - old_advance) * current_block->step_event_count / current_block->mix_event_count[j];
#else
e_steps[current_block->active_driver] += ((advance >> 8) - old_advance);
#endif
old_advance = advance >> 8;
#endif // ADVANCE
......@@ -819,7 +828,14 @@ ISR(TIMER1_COMPA_vect) {
// Do E steps + advance steps
uint32_t advance_whole = advance >> 8;
e_steps[current_block->active_driver] += advance_whole - old_advance;
#if ENABLED(MIXING_EXTRUDER_FEATURE)
for (uint8_t j = 0; j < DRIVER_EXTRUDERS; j++)
e_steps[current_block->active_driver] += (advance_whole - old_advance) * current_block->mix_factor[j];
#else
e_steps[current_block->active_driver] += advance_whole - old_advance;
#endif
old_advance = advance_whole;
#endif //ADVANCE
}
......
......@@ -55,4 +55,3 @@ void NexObject::printObjInfo(void)
}
dbSerialPrintln("]");
}
......@@ -56,25 +56,25 @@ protected: /* methods */
/*
* Get page id.
*
* @return the id of page.
* @return the id of page.
*/
uint8_t getObjPid(void);
uint8_t getObjPid(void);
/*
* Get component id.
*
* @return the id of component.
* @return the id of component.
*/
uint8_t getObjCid(void);
/*
* Get component name.
*
* @return the name of component.
* @return the name of component.
*/
const char *getObjName(void);
private: /* data */
const char *getObjName(void);
private: /* data */
uint8_t __pid; /* Page ID */
uint8_t __cid; /* Component ID */
const char *__name; /* An unique name */
......
......@@ -42,4 +42,23 @@ bool NexPicture::setPic(uint32_t number)
sendCommand(cmd.c_str());
return recvRetCommandFinished();
}
bool NexPicture::setHide()
{
String cmd;
cmd += "vis ";
cmd += getObjName();
cmd += ",0";
sendCommand(cmd.c_str());
return recvRetCommandFinished();
}
bool NexPicture::setShow()
{
String cmd;
cmd += "vis ";
cmd += getObjName();
cmd += ",1";
sendCommand(cmd.c_str());
return recvRetCommandFinished();
}
......@@ -34,26 +34,34 @@ public: /* methods */
* @copydoc NexObject::NexObject(uint8_t pid, uint8_t cid, const char *name);
*/
NexPicture(uint8_t pid, uint8_t cid, const char *name);
/**
* Get picture's number.
*
* @param number - an output parameter to save picture number.
*
* @retval true - success.
* @retval false - failed.
*
* @param number - an output parameter to save picture number.
*
* @retval true - success.
* @retval false - failed.
*/
bool getPic(uint32_t *number);
/**
* Set picture's number.
*
*
* @param number -the picture number.
*
* @retval true - success.
* @retval false - failed.
* @retval false - failed.
*/
bool setPic(uint32_t number);
/**
* Set Hide / Show component
*
* @return true if success, false for failure.
*/
bool setHide();
bool setShow();
};
/**
......
......@@ -53,3 +53,23 @@ bool NexText::setColor(uint32_t value)
sendCommand(cmd.c_str());
return recvRetCommandFinished();
}
bool NexText::setHide()
{
String cmd;
cmd += "vis ";
cmd += getObjName();
cmd += ",0";
sendCommand(cmd.c_str());
return recvRetCommandFinished();
}
bool NexText::setShow()
{
String cmd;
cmd += "vis ";
cmd += getObjName();
cmd += ",1";
sendCommand(cmd.c_str());
return recvRetCommandFinished();
}
......@@ -34,24 +34,32 @@ public: /* methods */
* @copydoc NexObject::NexObject(uint8_t pid, uint8_t cid, const char *name);
*/
NexText(uint8_t pid, uint8_t cid, const char *name);
/**
* Get text attribute of component.
*
* @param buffer - buffer storing text returned.
* @param len - length of buffer.
* @return The real length of text returned.
* @param buffer - buffer storing text returned.
* @param len - length of buffer.
* @return The real length of text returned.
*/
uint16_t getText(char *buffer, uint16_t len);
/**
* Set text attribute of component.
*
* @param buffer - text buffer terminated with '\0'.
* @return true if success, false for failure.
* @param buffer - text buffer terminated with '\0'.
* @return true if success, false for failure.
*/
bool setText(const char *buffer);
bool setColor(uint32_t value);
/**
* Set Hide / Show component
*
* @return true if success, false for failure.
*/
bool setHide();
bool setShow();
};
/**
......
......@@ -92,4 +92,3 @@ void NexTouch::iterate(NexTouch **list, uint8_t pid, uint8_t cid, int32_t event)
}
}
}
......@@ -7,13 +7,17 @@
#include "Nextion.h"
bool NextionON = false;
bool PageInfo = false;
uint8_t NextionPage = 0;
char buffer[100] = {0};
uint32_t slidermaxval = 20;
char lcd_status_message[30] = WELCOME_MSG;
uint8_t lcd_status_message_level = 0;
static millis_t next_lcd_update_ms;
#if ENABLED(SDSUPPORT)
uint8_t SDstatus = 0; // 0 SD not insert, 1 SD insert, 2 SD printing
#endif
#if ENABLED(NEXTION_GFX)
GFX gfx = GFX(200, 190);
#endif
......@@ -26,6 +30,7 @@
NexPage Psdcard = NexPage(4, 0, "sdcard");
NexPage Psetup = NexPage(5, 0, "setup");
NexPage Pmove = NexPage(6, 0, "move");
NexPage Pfeed = NexPage(7, 0, "feed");
// Page 0 Start
NexTimer startimer = NexTimer(0, 1, "tm0");
......@@ -35,10 +40,10 @@
NexText Hotend1 = NexText(1, 4, "t1");
NexText Hotend21 = NexText(1, 5, "h2");
NexText Hotend2 = NexText(1, 6, "t2");
NexText LedStatus = NexText(1, 7, "t4");
NexText LedCoord = NexText(1, 8, "t5");
NexText LedStatus = NexText(1, 7, "status");
NexText LedCoord1 = NexText(1, 8, "icoord");
NexPicture Menu = NexPicture(1, 9, "p0");
NexPicture MSD = NexPicture(1, 10, "p1");
NexPicture MSD1 = NexPicture(1, 10, "p1");
NexPicture MSetup = NexPicture(1, 11, "p2");
NexPicture Hend0 = NexPicture(1, 12, "p3");
NexHotspot hot0 = NexHotspot(1, 13, "hot0");
......@@ -49,10 +54,14 @@
NexPicture Fanpic = NexPicture(1, 18, "p6");
NexVar Hotend = NexVar(1, 19, "he");
NexVar Bed = NexVar(1, 20, "bed");
NexVar Fan = NexVar(1, 21, "fn");
NexTimer fantimer = NexTimer(1, 22, "tm0");
NexProgressBar sdbar = NexProgressBar(1, 23, "j0");
NexPicture NPlay = NexPicture(1, 24, "p7");
NexPicture NStop = NexPicture(1, 25, "p8");
NexVar SD = NexVar(1, 26, "sd");
NexVar RFID = NexVar(1, 27, "rfid");
NexPicture Feedpic = NexPicture(1, 18, "p9");
// Page 2 Temp
NexText set0 = NexText(2, 2, "set0");
......@@ -62,10 +71,11 @@
NexVar set1 = NexVar(2, 17, "set1");
// Page 3 Menu
NexPicture MSD3 = NexPicture(3, 2, "p1");
NexPicture Exit1 = NexPicture(3, 4, "p3");
// Page 4 SDCard
NexSlider sdlist = NexSlider(4, 1, "h0");
NexSlider sdlist = NexSlider(4, 1, "h0");
NexText sdrow0 = NexText(4, 3, "t0");
NexText sdrow1 = NexText(4, 4, "t1");
NexText sdrow2 = NexText(4, 5, "t2");
......@@ -85,9 +95,11 @@
NexHotspot ScrollDown = NexHotspot(4, 22, "m1");
// Page 5 Setup
NexPicture MSD5 = NexPicture(5, 2, "p1");
NexPicture Exit3 = NexPicture(5, 4, "p3");
// Page 6 Move
NexPicture MSD6 = NexPicture(6, 2, "p1");
NexPicture XYHome = NexPicture(6, 5, "p4");
NexPicture XYUp = NexPicture(6, 6, "p5");
NexPicture XYRight = NexPicture(6, 7, "p6");
......@@ -97,14 +109,23 @@
NexPicture ZUp = NexPicture(6, 11, "p10");
NexPicture ZDown = NexPicture(6, 12, "p11");
NexVar movecmd = NexVar(6, 18, "vacmd");
NexText LedCoord6 = NexText(6, 19, "mcoord");
// Page 7 Feed
NexVar Feedrate = NexVar(7, 1, "feedrate");
NexPicture Feedok = NexPicture(7, 3, "p0");
NexTouch *nex_listen_list[] =
{
&Pstart,
&Menu,
&MSD,
&MSD1,
&MSD3,
&MSD5,
&MSD6,
&MSetup,
&Fanpic,
&Feedpic,
&NPlay,
&NStop,
&hot0,
......@@ -134,6 +155,7 @@
&ZHome,
&ZUp,
&ZDown,
&Feedok,
NULL
};
......@@ -168,9 +190,33 @@
};
void setpageInfo() {
Pinfo.show();
if (NextionPage == 0) {
Pinfo.show();
PageInfo = true;
#if HAS(TEMP_0)
Hotend.setValue(1);
#endif
#if HAS(TEMP_1)
Hotend.setValue(2);
#endif
#if HAS(TEMP_2)
Hotend.setValue(3);
#elif HAS(TEMP_BED)
Bed.setValue(1);
Hotend21.setText("BED");
#endif
Feedrate.setValue(100);
#if HAS(FAN)
Fan.setValue(1);
#endif
lcd_setstatus(lcd_status_message);
}
Pinfo.show();
NextionPage = 1;
#if ENABLED(NEXTION_GFX)
#if MECH(DELTA)
......@@ -179,34 +225,18 @@
gfx_clear(X_MAX_POS, Y_MAX_POS, Z_MAX_POS);
#endif
#endif
#if HAS_TEMP_0
Hotend.setValue(1);
#endif
#if HAS_TEMP_1
Hotend.setValue(2);
#endif
#if HAS_TEMP_2
Hotend.setValue(3);
#elif HAS_TEMP_BED
Hotend21.setText("BED");
Bed.setValue(1);
#endif
lcd_setstatus(lcd_status_message);
}
#if ENABLED(SDSUPPORT)
void printrowsd(uint8_t row, const bool folder, const char* filename) {
if (folder) {
folder_list[row]->setPic(18);
folder_list[row]->setShow();
row_list[row]->attachPop(sdfolderPopCallback, row_list[row]);
} else if (filename == "") {
folder_list[row]->setPic(17);
folder_list[row]->setHide();
row_list[row]->detachPop();
} else {
folder_list[row]->setPic(17);
folder_list[row]->setHide();
row_list[row]->attachPop(sdfilePopCallback, row_list[row]);
}
row_list[row]->setText(filename);
......@@ -218,12 +248,12 @@
card.getWorkDirName();
if (fullName[0] != '/') {
Folderup.setPic(20);
Folderup.setShow();
Folderup.attachPop(sdfolderUpPopCallback);
sdfolder.setText(fullName);
} else {
Folderup.detachPop();
Folderup.setPic(19);
Folderup.setHide();
sdfolder.setText("");
}
......@@ -239,8 +269,23 @@
sendCommand("ref 0");
}
static void setpagesdcard() {
PageInfo = false;
static void menu_action_sdfile(const char* filename) {
char cmd[30];
char* c;
sprintf_P(cmd, PSTR("M23 %s"), filename);
for(c = &cmd[4]; *c; c++) *c = tolower(*c);
enqueuecommand(cmd);
enqueuecommands_P(PSTR("M24"));
setpageInfo();
}
static void menu_action_sddirectory(const char* filename) {
card.chdir(filename);
setpageSDPopCallback(&MSD1);
}
void setpageSDPopCallback(void *ptr) {
NextionPage = 4;
Psdcard.show();
uint16_t fileCnt = card.getnrfilenames();
......@@ -267,21 +312,6 @@
setrowsdcard(number);
}
static void menu_action_sdfile(const char* filename) {
char cmd[30];
char* c;
sprintf_P(cmd, PSTR("M23 %s"), filename);
for(c = &cmd[4]; *c; c++) *c = tolower(*c);
enqueuecommand(cmd);
enqueuecommands_P(PSTR("M24"));
setpageInfo();
}
static void menu_action_sddirectory(const char* filename) {
card.chdir(filename);
setpagesdcard();
}
void sdfilePopCallback(void *ptr) {
memset(buffer, 0, sizeof(buffer));
......@@ -322,9 +352,8 @@
void sdfolderUpPopCallback(void *ptr) {
card.updir();
setpagesdcard();
setpageSDPopCallback(&MSD1);
}
#endif
void ExitPopCallback(void *ptr) {
......@@ -337,7 +366,7 @@
void hotPopCallback(void *ptr) {
Ptemp.show();
PageInfo = false;
NextionPage = 2;
memset(buffer, 0, sizeof(buffer));
if (ptr == &hot0) {
if (degTargetHotend(0) != 0) {
......@@ -397,18 +426,17 @@
void setpagePopCallback(void *ptr) {
if (ptr == &Menu) {
PageInfo = false;
NextionPage = 3;
Pmenu.show();
}
else if (ptr == &MSetup) {
PageInfo = false;
NextionPage = 5;
Psetup.show();
}
#if ENABLED(SDSUPPORT)
else if (ptr == &MSD)
setpagesdcard();
#endif
else if (ptr == &Feedpic) {
NextionPage = 7;
Pfeed.show();
}
}
void setfanPopCallback(void *ptr) {
......@@ -422,12 +450,13 @@
enqueuecommands_P(PSTR("G91"));
enqueuecommands_P(buffer);
enqueuecommands_P(PSTR("G90"));
NextionPage = 6;
}
#if ENABLED(SDSUPPORT)
void PlayPausePopCallback(void *ptr) {
if (card.cardOK && card.isFileOpen()) {
if (card.sdprinting)
if (IS_SD_PRINTING)
card.pausePrint();
else
card.startPrint();
......@@ -443,6 +472,8 @@
#endif
void lcd_init() {
HAL::delayMilliseconds(2000);
for (uint8_t i = 0; i < 10; i++) {
NextionON = nexInit();
if (NextionON) break;
......@@ -468,7 +499,10 @@
#endif
#if ENABLED(SDSUPPORT)
MSD.attachPop(setpagePopCallback, &MSD);
MSD1.attachPop(setpageSDPopCallback);
MSD3.attachPop(setpageSDPopCallback);
MSD5.attachPop(setpageSDPopCallback);
MSD6.attachPop(setpageSDPopCallback);
sdlist.attachPop(sdlistPopCallback);
ScrollUp.attachPop(sdlistPopCallback);
ScrollDown.attachPop(sdlistPopCallback);
......@@ -489,6 +523,7 @@
Menu.attachPop(setpagePopCallback, &Menu);
MSetup.attachPop(setpagePopCallback, &MSetup);
Feedpic.attachPop(setpagePopCallback, &Feedpic);
Fanpic.attachPop(setfanPopCallback, &Fanpic);
m11.attachPop(sethotPopCallback, &m11);
tup.attachPop(settempPopCallback, &tup);
......@@ -501,6 +536,7 @@
ZHome.attachPop(setmovePopCallback);
ZUp.attachPop(setmovePopCallback);
ZDown.attachPop(setmovePopCallback);
Feedok.attachPop(ExitPopCallback);
startimer.enable();
}
......@@ -548,7 +584,7 @@
else
strcat(buffer, "---");
strcat(buffer, TEST(axis_known_position, Z_AXIS) || !TEST(axis_was_homed, Z_AXIS) ? PSTR("Z ") : PSTR("? "));
strcat(buffer, TEST(axis_known_position, Z_AXIS) || !TEST(axis_was_homed, Z_AXIS) ? PSTR(" Z ") : PSTR("? "));
if (TEST(axis_was_homed, Z_AXIS)) {
valuetemp = ftostr32sp(current_position[Z_AXIS] + 0.00001);
strcat(buffer, valuetemp);
......@@ -556,7 +592,8 @@
else
strcat(buffer, "---");
LedCoord.setText(buffer);
LedCoord1.setText(buffer);
LedCoord6.setText(buffer);
}
void lcd_update() {
......@@ -567,51 +604,78 @@
millis_t ms = millis();
if (ms > next_lcd_update_ms && PageInfo) {
if (fanSpeed > 0) fantimer.enable();
else fantimer.disable();
#if HAS_TEMP_0
temptoLCD(0, degHotend(0), degTargetHotend(0));
#endif
#if HAS_TEMP_1
temptoLCD(1, degHotend(1), degTargetHotend(1));
#endif
#if HAS_TEMP_2
temptoLCD(2, degHotend(2), degTargetHotend(2));
#elif HAS_TEMP_BED
temptoLCD(2, degBed(), degTargetBed());
#endif
coordtoLCD();
#if ENABLED(SDSUPPORT)
if (card.cardOK) {
MSD.setPic(7);
NPlay.setPic(38);
NStop.setPic(41);
}
else {
MSD.setPic(6);
NPlay.setPic(39);
NStop.setPic(42);
}
if (card.isFileOpen()) {
if (card.sdprinting) {
// Progress bar solid part
sdbar.setValue(card.percentDone());
NPlay.setPic(40);
if (ms > next_lcd_update_ms) {
if (NextionPage == 1) {
if (fanSpeed > 0) fantimer.enable();
else fantimer.disable();
uint32_t* temp_feedrate;
Feedrate.getValue(temp_feedrate);
feedrate_multiplier = (int)temp_feedrate;
#if HAS(TEMP_0)
temptoLCD(0, degHotend(0), degTargetHotend(0));
#endif
#if HAS(TEMP_1)
temptoLCD(1, degHotend(1), degTargetHotend(1));
#endif
#if HAS(TEMP_2)
temptoLCD(2, degHotend(2), degTargetHotend(2));
#elif HAS(TEMP_BED)
temptoLCD(2, degBed(), degTargetBed());
#endif
coordtoLCD();
#if ENABLED(SDSUPPORT)
if (card.isFileOpen()) {
if (SDstatus != 2) {
SDstatus = 2;
SD.setValue(2);
NPlay.setShow();
NStop.setShow();
}
if(IS_SD_PRINTING) {
// Progress bar solid part
sdbar.setValue(card.percentDone());
NPlay.setPic(15);
// Estimate End Time
uint16_t time = (millis() - print_job_start_ms) / 60000;
uint16_t end_time = (time * (100 - card.percentDone())) / card.percentDone();
if (end_time > (60 * 23)) {
lcd_setstatus("End --:--");
}
else if (end_time >= 0) {
char temp[30];
sprintf_P(temp, PSTR("End %i:%i"), end_time / 60, end_time%60);
lcd_setstatus(temp);
}
}
else {
NPlay.setPic(14);
}
}
else {
NPlay.setPic(38);
else if (card.cardOK && SDstatus != 1) {
SDstatus = 1;
SD.setValue(1);
MSD1.setShow();
NPlay.setHide();
NStop.setHide();
}
}
#endif
else if (!card.cardOK && SDstatus != 0) {
SDstatus = 0;
SD.setValue(0);
MSD1.setHide();
NPlay.setHide();
NStop.setHide();
}
#endif
}
else if (NextionPage == 6) {
coordtoLCD();
}
next_lcd_update_ms = ms + LCD_UPDATE_INTERVAL;
}
}
......@@ -638,17 +702,17 @@
#if ENABLED(NEXTION_GFX)
void gfx_clear(float x, float y, float z) {
if (PageInfo && (Printing || IS_SD_PRINTING))
if ((NextionPage == 1) && (Printing || IS_SD_PRINTING))
gfx.clear(x, y, z);
}
void gfx_cursor_to(float x, float y, float z) {
if (PageInfo && (Printing || IS_SD_PRINTING))
if ((NextionPage == 1) && (Printing || IS_SD_PRINTING))
gfx.cursor_to(x, y, z);
}
void gfx_line_to(float x, float y, float z){
if (PageInfo && (Printing || IS_SD_PRINTING))
if ((NextionPage == 1) && (Printing || IS_SD_PRINTING))
gfx.line_to(VC_TOOL, x, y, z);
}
#endif
......
......@@ -2,7 +2,7 @@
#define NEXTIONLCD_H
#if ENABLED(NEXTION)
#define LCD_UPDATE_INTERVAL 5000
#define LCD_UPDATE_INTERVAL 4000
void ExitPopCallback(void *ptr);
void setpagePopCallback(void *ptr);
......@@ -25,6 +25,7 @@
#endif
#if ENABLED(SDSUPPORT)
void setpageSDPopCallback(void *ptr);
void sdlistPopCallback(void *ptr);
void sdfilePopCallback(void *ptr);
void sdfolderPopCallback(void *ptr);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment