From d3969b527bb9f0d7d753b25f6d0758f5e80db534 Mon Sep 17 00:00:00 2001 From: Marcio Teixeira Date: Thu, 15 Feb 2018 14:41:22 -0700 Subject: [PATCH] Enhancements to the Touch UI - Now able to set the temperature and fan speed - Implemented a kill screen --- Marlin/AO_FT810_Constants.h | 22 +++ Marlin/AO_FT810_Functions.h | 14 +- Marlin/AO_FT810_UI_Screens.h | 360 +++++++++++++++++++++++----------- Marlin/AO_UI_Marlin_LCD_API.h | 23 ++- Marlin/Conditionals_LulzBot.h | 4 +- Marlin/Marlin_main.cpp | 2 +- 6 files changed, 297 insertions(+), 128 deletions(-) diff --git a/Marlin/AO_FT810_Constants.h b/Marlin/AO_FT810_Constants.h index cb29450e6..b0b82c13e 100644 --- a/Marlin/AO_FT810_Constants.h +++ b/Marlin/AO_FT810_Constants.h @@ -689,6 +689,28 @@ namespace FTDI { MUTE = 0x60, UNMUTE = 0x61 }; + + enum note_t { + END_SONG = 0x00, + NOTE_D3 = 0x33, + NOTE_D3S = 0x34, + NOTE_F3 = 0x35, + NOTE_F3S = 0x36, + NOTE_G3 = 0x37, + NOTE_G3S = 0x38, + NOTE_A3 = 0x39, + NOTE_A3S = 0x3A, + NOTE_B3 = 0x3B, + NOTE_C4 = 0x3C, + NOTE_C4S = 0x3D, + NOTE_D4 = 0x3E, + NOTE_D4S = 0x3F, + NOTE_E4 = 0x40, + NOTE_F4 = 0x41, + NOTE_F4S = 0x42, + NOTE_G4 = 0x43, + NOTE_G4S = 0x44 + }; } // If LCD_IS_FT800 is defined, then copy the FT800 namespace into the FTDI namespace diff --git a/Marlin/AO_FT810_Functions.h b/Marlin/AO_FT810_Functions.h index ebd260164..cbd051b67 100644 --- a/Marlin/AO_FT810_Functions.h +++ b/Marlin/AO_FT810_Functions.h @@ -790,7 +790,7 @@ class CLCD::SoundPlayer { public: struct sound_t { effect_t effect; // The sound effect number - uint8_t note; // The MIDI note value + note_t note; // The MIDI note value uint8_t sixteenths; // Duration of note, in sixteeths of a second, or zero to play to completion }; @@ -799,22 +799,22 @@ class CLCD::SoundPlayer { uint32_t next; public: - static const uint8_t MIDDLE_C = 60; // C4 - static void setVolume(uint8_t volume); - static void play(effect_t effect, uint8_t note = MIDDLE_C); + static void play(effect_t effect, note_t note = NOTE_C4); static bool soundPlaying(); void play(const sound_t* seq); void onIdle(); + + bool hasMoreNotes() {return sequence != 0;}; }; void CLCD::SoundPlayer::setVolume(uint8_t vol) { CLCD::Mem_Write8(REG_VOL_SOUND, vol); } -void CLCD::SoundPlayer::play(effect_t effect, uint8_t note) { +void CLCD::SoundPlayer::play(effect_t effect, note_t note) { CLCD::Mem_Write16(REG_SOUND, (note << 8) | effect); CLCD::Mem_Write8( REG_PLAY, 1); @@ -842,14 +842,14 @@ void CLCD::SoundPlayer::onIdle() { if(readyForNextNote) { const effect_t fx = effect_t(pgm_read_byte_near(&sequence->effect)); - const uint8_t nt = pgm_read_byte_near(&sequence->note); + const note_t nt = note_t(pgm_read_byte_near(&sequence->note)); const uint16_t ms = uint32_t(pgm_read_byte_near(&sequence->sixteenths)) * 1000 / 16; if(ms == 0 && fx == SILENCE && nt == 0) { sequence = 0; } else { next = ms ? (millis() + ms) : 0; - play(fx, nt != 0 ? nt : MIDDLE_C); + play(fx, nt != 0 ? nt : NOTE_C4); sequence++; } } diff --git a/Marlin/AO_FT810_UI_Screens.h b/Marlin/AO_FT810_UI_Screens.h index 955141902..5c405a8f8 100644 --- a/Marlin/AO_FT810_UI_Screens.h +++ b/Marlin/AO_FT810_UI_Screens.h @@ -22,10 +22,6 @@ char lcd_status_message[STATUS_MESSAGE_BUFFER_LENGTH] = WELCOME_MSG; static float marlin_x_axis = 100; static float marlin_y_axis = 50; static float marlin_z_axis = 170; -static int marlin_e0_temp = 25; -static int marlin_e1_temp = 25; -static int marlin_bed_temp = 25; -static int marlin_fan_speed = 25; static float marlin_x_steps = 100; static float marlin_y_steps = 100; static float marlin_z_steps = 100; @@ -114,6 +110,12 @@ class AboutScreen : public UIScreen { static void onIdle(); }; +class KillScreen : public UIScreen { + public: + static void onEntry(); + static void onRefresh(); +}; + class StatusScreen : public UIScreen { private: static void static_axis_position(); @@ -161,25 +163,38 @@ class AdvancedSettingsScreen : public UIScreen { class ValueAdjusters : public UIScreen { private: static uint8_t increment; - static void draw_increment_btn(const uint8_t tag, uint8_t decimals); + static void draw_increment_btn(uint8_t line, const uint8_t tag, uint8_t decimals); protected: + struct stacker_t { + uint8_t line; + + void static_parts(); + void dynamic_parts(); + }; + struct heading_t { const char *label; - uint8_t decimals; - void static_parts() const; - void dynamic_parts() const; + void static_parts(stacker_t &s) const; + void dynamic_parts(stacker_t &s) const; }; struct adjuster_t { - uint8_t line; + uint8_t tag; const char *label; const char *units; uint32_t color; uint8_t decimals; - void static_parts() const; - void dynamic_parts(float value) const; + void static_parts(stacker_t &s) const; + void dynamic_parts(stacker_t &s,float value) const; + }; + + struct increment_t { + const uint8_t decimals; + + void static_parts(stacker_t &s) const; + void dynamic_parts(stacker_t &s) const; }; static float getIncrement(); @@ -216,6 +231,7 @@ class TemperatureScreen : public ValueAdjusters { SCREEN_TABLE { DECL_SCREEN(BootScreen), DECL_SCREEN(AboutScreen), + DECL_SCREEN(KillScreen), DECL_SCREEN(CalibrationScreen), DECL_SCREEN(StatusScreen), DECL_SCREEN(MenuScreen), @@ -330,9 +346,10 @@ void BootScreen::onIdle() { CLCD::SoundPlayer sound; const PROGMEM CLCD::SoundPlayer::sound_t chimes[] = { - {CHIMES, 55, 13}, - {CHIMES, 64, 13}, - {CHIMES, 60, 19} + {CHIMES, NOTE_G3, 13}, + {CHIMES, NOTE_E4, 13}, + {CHIMES, NOTE_C4, 19}, + {SILENCE, END_SONG, 0} }; const PROGMEM CLCD::SoundPlayer::sound_t samples[] = { @@ -399,6 +416,49 @@ void AboutScreen::onIdle() { sound.onIdle(); } +/************************************ KILL SCREEN *******************************/ + +const PROGMEM CLCD::SoundPlayer::sound_t sad_trombone[] = { + {TRUMPET, NOTE_A3S, 10}, + {TRUMPET, NOTE_A3 , 10}, + {TRUMPET, NOTE_G3S, 10}, + {TRUMPET, NOTE_G3, 20}, + {SILENCE, END_SONG, 0} +}; + +void KillScreen::onEntry() { + UIScreen::onEntry(); + + CLCD::Mem_Write8(REG_VOL_SOUND, 0xFF); + sound.play(sad_trombone); + + // Marlin won't call the idle function anymore, so we + // have to do it to play the sounds. + while(sound.hasMoreNotes()) { + sound.onIdle(); + } +} + +void KillScreen::onRefresh() { + CLCD::CommandFifo cmd; + cmd.Cmd(CMD_DLSTART); + cmd.Cmd_Clear_Color(Theme::about_bg); + cmd.Cmd_Clear(1,1,1); + + #define GRID_COLS 4 + #define GRID_ROWS 8 + + BTX( BTN_POS(1,2), BTN_SIZE(4,1), lcd_status_message, FONT_LRG); + + BTX( BTN_POS(1,3), BTN_SIZE(4,1), F("PRINTER HALTED"), FONT_LRG); + + BTX( BTN_POS(1,6), BTN_SIZE(4,1), F("Please reset"), FONT_LRG); + + cmd.Cmd(DL_DISPLAY); + cmd.Cmd(CMD_SWAP); + cmd.Cmd_Execute(); +} + /*********************************** STATUS SCREEN ******************************/ #if defined(LCD_PORTRAIT) #define GRID_ROWS 9 @@ -940,18 +1000,36 @@ void CalibrationRegistersScreen::onTouchStart(uint8_t tag) { #define GRID_ROWS 6 #endif -void ValueAdjusters::draw_increment_btn(const uint8_t tag, uint8_t decimals) { +void ValueAdjusters::stacker_t::static_parts() { + CLCD::CommandFifo cmd; + cmd.Cmd_Clear_Color(Theme::adjust_bg); + cmd.Cmd_Clear(1,1,1); + + #if defined(LCD_PORTRAIT) + BTN_TAG(1) THEME(navi_btn) BTN( BTN_POS(1,10), BTN_SIZE(6,1), F("Back"), MENU_BTN_STYLE); + #else + BTN_TAG(1) THEME(navi_btn) BTN( BTN_POS(8,6), BTN_SIZE(2,1), F("Back"), MENU_BTN_STYLE); + #endif + + line = 1; +} + +void ValueAdjusters::stacker_t::dynamic_parts() { + line = 1; +} + +void ValueAdjusters::draw_increment_btn(uint8_t line, const uint8_t tag, uint8_t decimals) { CLCD::CommandFifo cmd; const char *label = PSTR("?"); uint8_t pos; switch(tag) { - case 20: label = PSTR( ".001"); pos = decimals - 3; break; - case 21: label = PSTR( ".01"); pos = decimals - 2; break; - case 22: label = PSTR( "0.1"); pos = decimals - 1; break; - case 23: label = PSTR( "1" ); pos = decimals + 0; break; - case 24: label = PSTR( "10" ); pos = decimals + 1; break; - case 25: label = PSTR("100" ); pos = decimals + 2; break; + case 240: label = PSTR( ".001"); pos = decimals - 3; break; + case 241: label = PSTR( ".01" ); pos = decimals - 2; break; + case 242: label = PSTR( "0.1" ); pos = decimals - 1; break; + case 243: label = PSTR( "1" ); pos = decimals + 0; break; + case 244: label = PSTR( "10" ); pos = decimals + 1; break; + case 245: label = PSTR("100" ); pos = decimals + 2; break; default: #if defined(UI_FRAMEWORK_DEBUG) #if defined(SERIAL_PROTOCOLLNPAIR) @@ -961,14 +1039,15 @@ void ValueAdjusters::draw_increment_btn(const uint8_t tag, uint8_t decimals) { Serial.println(tag); #endif #endif + ; } BTN_TAG(tag) switch(pos) { #if defined(LCD_PORTRAIT) - case 0: BTN( BTN_POS(3,8), BTN_SIZE(1,1), progmem_str(label), FONT_SML, OPT_3D); break; - case 1: BTN( BTN_POS(4,8), BTN_SIZE(1,1), progmem_str(label), FONT_SML, OPT_3D); break; - case 2: BTN( BTN_POS(5,8), BTN_SIZE(1,1), progmem_str(label), FONT_SML, OPT_3D); break; + case 0: BTN( BTN_POS(3,line), BTN_SIZE(1,1), progmem_str(label), FONT_SML, OPT_3D); break; + case 1: BTN( BTN_POS(4,line), BTN_SIZE(1,1), progmem_str(label), FONT_SML, OPT_3D); break; + case 2: BTN( BTN_POS(5,line), BTN_SIZE(1,1), progmem_str(label), FONT_SML, OPT_3D); break; #else case 0: BTN( BTN_POS(8,2), BTN_SIZE(2,1), progmem_str(label), FONT_MED, OPT_3D); break; case 1: BTN( BTN_POS(8,3), BTN_SIZE(2,1), progmem_str(label), FONT_MED, OPT_3D); break; @@ -977,33 +1056,46 @@ void ValueAdjusters::draw_increment_btn(const uint8_t tag, uint8_t decimals) { } } -void ValueAdjusters::heading_t::static_parts() const { +void ValueAdjusters::increment_t::static_parts(stacker_t &s) const { CLCD::CommandFifo cmd; - cmd.Cmd_Clear_Color(Theme::adjust_bg); - cmd.Cmd_Clear(1,1,1); - - // Draw all the buttons in the off state. - THEME(toggle_off); - draw_increment_btn(23 - decimals, decimals); - draw_increment_btn(24 - decimals, decimals); - draw_increment_btn(25 - decimals, decimals); #if defined(LCD_PORTRAIT) - BTN_TAG(0) THEME(adjust_bg) BTN( BTN_POS(1,1), BTN_SIZE(6,1), (progmem_str) label, FONT_MED, OPT_FLAT); - BTN_TAG(0) THEME(adjust_bg) BTN( BTN_POS(1,7), BTN_SIZE(6,1), F("Increment:"), FONT_MED, OPT_FLAT); - BTN_TAG(1) THEME(navi_btn) BTN( BTN_POS(1,10), BTN_SIZE(6,1), F("Back"), MENU_BTN_STYLE); + BTN_TAG(0) THEME(adjust_bg) BTN( BTN_POS(1, s.line), BTN_SIZE(6,1), F("Increment:"), FONT_MED, OPT_FLAT); #else - BTN_TAG(0) THEME(adjust_bg) BTN( BTN_POS(3,1), BTN_SIZE(4,1), (progmem_str) label, FONT_MED, OPT_FLAT); - BTN_TAG(0) THEME(adjust_bg) BTN( BTN_POS(8,1), BTN_SIZE(2,1), F("Increment"), FONT_MED, OPT_FLAT); - BTN_TAG(1) THEME(navi_btn) BTN( BTN_POS(8,6), BTN_SIZE(2,1), F("Back"), MENU_BTN_STYLE); + BTN_TAG(0) THEME(adjust_bg) BTN( BTN_POS(8,1), BTN_SIZE(2,1), F("Increment"), FONT_MED, OPT_FLAT); #endif + + // Draw all the buttons in the off state. + THEME(toggle_off); + draw_increment_btn(s.line+1, 243 - decimals, decimals); + draw_increment_btn(s.line+1, 244 - decimals, decimals); + draw_increment_btn(s.line+1, 245 - decimals, decimals); + s.line += 2; + + increment = 243 - decimals; } -void ValueAdjusters::heading_t::dynamic_parts() const { +void ValueAdjusters::increment_t::dynamic_parts(stacker_t &s) const { CLCD::CommandFifo cmd; THEME(toggle_on); - draw_increment_btn(increment, decimals); + draw_increment_btn(s.line+1, increment, decimals); + s.line += 2; +} + +void ValueAdjusters::heading_t::static_parts(stacker_t &s) const { + CLCD::CommandFifo cmd; + + #if defined(LCD_PORTRAIT) + BTN_TAG(0) THEME(adjust_bg) BTN( BTN_POS(1, s.line), BTN_SIZE(6,1), (progmem_str) label, FONT_MED, OPT_FLAT); + #else + BTN_TAG(0) THEME(adjust_bg) BTN( BTN_POS(3, s.line), BTN_SIZE(4,1), (progmem_str) label, FONT_MED, OPT_FLAT); + #endif + s.line++; +} + +void ValueAdjusters::heading_t::dynamic_parts(stacker_t &s) const { + s.line++; } #if defined(LCD_PORTRAIT) @@ -1020,20 +1112,17 @@ void ValueAdjusters::heading_t::dynamic_parts() const { #endif #endif -void ValueAdjusters::adjuster_t::static_parts() const { +void ValueAdjusters::adjuster_t::static_parts(stacker_t &s) const { CLCD::CommandFifo cmd; progmem_str str = (progmem_str) label; - const uint8_t tag = line * 2; - - BTN_TAG( 0 ) RGB(color) BTN( BTN_POS(3,line+1), BTN_SIZE(2,1), F(""), FONT_SML, OPT_FLAT); - BTN_TAG( 0 ) THEME(adjust_bg) BTN( BTN_POS(1,line+1), BTN_SIZE(2,1), str, FONT_SML, OPT_FLAT); - BTN_TAG(tag ) THEME(incr_btn) BTN( BTN_POS(5,line+1), BTN_SIZE(1,1), F("-"), FONT_MED, OPT_3D); - BTN_TAG(tag + 1) THEME(incr_btn) BTN( BTN_POS(6,line+1), BTN_SIZE(1,1), F("+"), FONT_MED, OPT_3D); - - increment = 23 - decimals; + BTN_TAG( 0 ) RGB(color) BTN( BTN_POS(3,s.line), BTN_SIZE(2,1), F(""), FONT_SML, OPT_FLAT); + BTN_TAG( 0 ) THEME(adjust_bg) BTN( BTN_POS(1,s.line), BTN_SIZE(2,1), str, FONT_SML, OPT_FLAT); + BTN_TAG(tag ) THEME(incr_btn) BTN( BTN_POS(5,s.line), BTN_SIZE(1,1), F("-"), FONT_MED, OPT_3D); + BTN_TAG(tag + 1) THEME(incr_btn) BTN( BTN_POS(6,s.line), BTN_SIZE(1,1), F("+"), FONT_MED, OPT_3D); + s.line++; } -void ValueAdjusters::adjuster_t::dynamic_parts(float value) const { +void ValueAdjusters::adjuster_t::dynamic_parts(stacker_t &s, float value) const { CLCD::CommandFifo cmd; char b[32]; @@ -1042,26 +1131,27 @@ void ValueAdjusters::adjuster_t::dynamic_parts(float value) const { strcat_P(b, (const char*) units); BTN_TAG(0) - BTX( BTN_POS(3,line+1), BTN_SIZE(2,1), b, FONT_SML); + BTX( BTN_POS(3,s.line), BTN_SIZE(2,1), b, FONT_SML); + s.line++; } void ValueAdjusters::onTouchStart(uint8_t tag) { switch(tag) { - case 1: GOTO_PREVIOUS(); return; - case 2 ... 9: current_screen.onTouchHeld(tag); return; - case 20 ... 25: increment = tag; break; + case 1: GOTO_PREVIOUS(); return; + case 240 ... 245: increment = tag; break; + default: current_screen.onTouchHeld(tag); return; } current_screen.onRefresh(); } float ValueAdjusters::getIncrement() { switch(increment) { - case 20: return 0.001; - case 21: return 0.01; - case 22: return 0.1; - case 23: return 1.0; - case 24: return 10.0; - case 25: return 100.0; + case 240: return 0.001; + case 241: return 0.01; + case 242: return 0.1; + case 243: return 1.0; + case 244: return 10.0; + case 245: return 100.0; } } @@ -1076,25 +1166,31 @@ void MoveAxisScreen::onRefresh() { CLCD::CommandFifo cmd; cmd.Cmd(CMD_DLSTART); - /* # Label: Units: Color: Precision: */ - const heading_t a = { PSTR("Move Axis"), 1 }; - const adjuster_t b = {1, PSTR("X:"), PSTR("mm"), Theme::x_axis, 1 }; - const adjuster_t c = {2, PSTR("Y:"), PSTR("mm"), Theme::y_axis, 1 }; - const adjuster_t d = {3, PSTR("Z:"), PSTR("mm"), Theme::z_axis, 1 }; + /* Tag Label: Units: Color: Precision: */ + const heading_t h = { PSTR("Move Axis") }; + const adjuster_t x = {2, PSTR("X:"), PSTR("mm"), Theme::x_axis, 1 }; + const adjuster_t y = {4, PSTR("Y:"), PSTR("mm"), Theme::y_axis, 1 }; + const adjuster_t z = {6, PSTR("Z:"), PSTR("mm"), Theme::z_axis, 1 }; + const increment_t i = { 1 }; + stacker_t s; if(dlcache.hasData()) { dlcache.append(); } else { - a.static_parts(); - b.static_parts(); - c.static_parts(); - d.static_parts(); + s.static_parts(); + h.static_parts(s); + x.static_parts(s); + y.static_parts(s); + z.static_parts(s); + i.static_parts(s); dlcache.store(); } - a.dynamic_parts(); - b.dynamic_parts(marlin_x_axis); - c.dynamic_parts(marlin_y_axis); - d.dynamic_parts(marlin_z_axis); + s.dynamic_parts(); + h.dynamic_parts(s); + x.dynamic_parts(s,marlin_x_axis); + y.dynamic_parts(s,marlin_y_axis); + z.dynamic_parts(s,marlin_z_axis); + i.dynamic_parts(s); cmd.Cmd(DL_DISPLAY); cmd.Cmd(CMD_SWAP); @@ -1120,25 +1216,36 @@ void TemperatureScreen::onRefresh() { CLCD::CommandFifo cmd; cmd.Cmd(CMD_DLSTART); - /* # Label: Units: Color: Precision: */ - const heading_t a = { PSTR("Nozzle:"), 0 }; - const adjuster_t b = {1, PSTR("Nozzle:"), PSTR("C"), Theme::temp, 0 }; - const adjuster_t c = {2, PSTR("Bed:"), PSTR("C"), Theme::temp, 0 }; - const adjuster_t d = {3, PSTR("Fan Speed:"), PSTR("%"), Theme::fan_speed, 0 }; + /* Tag Label: Units: Color: Precision: */ + const heading_t h = { PSTR("Temperature:") }; + #if EXTRUDERS == 1 + const adjuster_t n1 = {2, PSTR("Nozzle:"), PSTR("C"), Theme::temp, 0 }; + #else + const adjuster_t n1 = {2, PSTR("Nozzle 1:"), PSTR("C"), Theme::temp, 0 }; + const adjuster_t n2 = {4, PSTR("Nozzle 2:"), PSTR("C"), Theme::temp, 0 }; + #endif + const adjuster_t b = {20, PSTR("Bed:"), PSTR("C"), Theme::temp, 0 }; + const adjuster_t f1 = {10, PSTR("Fan Speed:"), PSTR("%"), Theme::fan_speed, 0 }; + const increment_t i = { 0 }; - if(dlcache.hasData()) { + stacker_t s; + if(dlcache.hasData()) { dlcache.append(); } else { - a.static_parts(); - b.static_parts(); - c.static_parts(); - d.static_parts(); + s .static_parts(); + h .static_parts(s); + n1.static_parts(s); + b .static_parts(s); + f1.static_parts(s); + i .static_parts(s); dlcache.store(); } - a.dynamic_parts(); - b.dynamic_parts(marlin_e0_temp); - c.dynamic_parts(marlin_bed_temp); - d.dynamic_parts(marlin_fan_speed); + s .dynamic_parts(); + h .dynamic_parts(s); + n1.dynamic_parts(s, Marlin_LCD_API::getTargetTemp_celsius(1)); + b .dynamic_parts(s, Marlin_LCD_API::getTargetTemp_celsius(0)); + f1.dynamic_parts(s, Marlin_LCD_API::getFan_percent(0)); + i .dynamic_parts(s); cmd.Cmd(DL_DISPLAY); cmd.Cmd(CMD_SWAP); @@ -1147,12 +1254,14 @@ void TemperatureScreen::onRefresh() { void TemperatureScreen::onTouchHeld(uint8_t tag) { switch(tag) { - case 2: marlin_e0_temp -= getIncrement(); break; - case 3: marlin_e0_temp += getIncrement(); break; - case 4: marlin_bed_temp -= getIncrement(); break; - case 5: marlin_bed_temp += getIncrement(); break; - case 6: marlin_fan_speed -= getIncrement(); break; - case 7: marlin_fan_speed += getIncrement(); break; + case 20: Marlin_LCD_API::setTargetTemp_celsius(0, Marlin_LCD_API::getTargetTemp_celsius(0) - getIncrement()); break; + case 21: Marlin_LCD_API::setTargetTemp_celsius(0, Marlin_LCD_API::getTargetTemp_celsius(0) + getIncrement()); break; + case 2: Marlin_LCD_API::setTargetTemp_celsius(1, Marlin_LCD_API::getTargetTemp_celsius(1) - getIncrement()); break; + case 3: Marlin_LCD_API::setTargetTemp_celsius(1, Marlin_LCD_API::getTargetTemp_celsius(1) + getIncrement()); break; + case 4: Marlin_LCD_API::setTargetTemp_celsius(2, Marlin_LCD_API::getTargetTemp_celsius(2) - getIncrement()); break; + case 5: Marlin_LCD_API::setTargetTemp_celsius(2, Marlin_LCD_API::getTargetTemp_celsius(2) + getIncrement()); break; + case 10: Marlin_LCD_API::setFan_percent( 0, Marlin_LCD_API::getFan_percent(0) - getIncrement()); break; + case 11: Marlin_LCD_API::setFan_percent( 0, Marlin_LCD_API::getFan_percent(0) + getIncrement()); break; } onRefresh(); } @@ -1164,28 +1273,34 @@ void StepsScreen::onRefresh() { CLCD::CommandFifo cmd; cmd.Cmd(CMD_DLSTART); - /* # Label: Units: Color: Precision: */ - const heading_t a = { PSTR("Steps/mm"), 0}; - const adjuster_t b = {1, PSTR("X:"), PSTR(""), Theme::x_axis, 0}; - const adjuster_t c = {2, PSTR("Y:"), PSTR(""), Theme::y_axis, 0}; - const adjuster_t d = {3, PSTR("Z:"), PSTR(""), Theme::z_axis, 0}; - const adjuster_t e = {4, PSTR("E:"), PSTR(""), Theme::e_axis, 0}; + /* Tag Label: Units: Color: Precision: */ + const heading_t h = { PSTR("Steps/mm") }; + const adjuster_t x = {2, PSTR("X:"), PSTR(""), Theme::x_axis, 0 }; + const adjuster_t y = {4, PSTR("Y:"), PSTR(""), Theme::y_axis, 0 }; + const adjuster_t z = {6, PSTR("Z:"), PSTR(""), Theme::z_axis, 0 }; + const adjuster_t e = {8, PSTR("E:"), PSTR(""), Theme::e_axis, 0 }; + const increment_t i = { 0 }; + stacker_t s; if(dlcache.hasData()) { dlcache.append(); } else { - a.static_parts(); - b.static_parts(); - c.static_parts(); - d.static_parts(); - e.static_parts(); + s.static_parts(); + h.static_parts(s); + x.static_parts(s); + y.static_parts(s); + z.static_parts(s); + e.static_parts(s); + i.static_parts(s); dlcache.store(); } - a.dynamic_parts(); - b.dynamic_parts(marlin_x_steps ); - c.dynamic_parts(marlin_y_steps ); - d.dynamic_parts(marlin_z_steps ); - e.dynamic_parts(marlin_e0_steps); + s.dynamic_parts(); + h.dynamic_parts(s); + x.dynamic_parts(s,marlin_x_steps ); + y.dynamic_parts(s,marlin_y_steps ); + z.dynamic_parts(s,marlin_z_steps ); + e.dynamic_parts(s,marlin_e0_steps); + i.dynamic_parts(s); cmd.Cmd(DL_DISPLAY); cmd.Cmd(CMD_SWAP); @@ -1213,19 +1328,25 @@ void ZOffsetScreen::onRefresh() { CLCD::CommandFifo cmd; cmd.Cmd(CMD_DLSTART); - /* # Label: Units: Color: Precision: */ - const heading_t a = { PSTR("Z Offset"), 3 }; - const adjuster_t b = {2, PSTR("Z Offset:"), PSTR("mm"), Theme::z_axis, 3 }; + /* Tag Label: Units: Color: Precision: */ + const heading_t h = { PSTR("Z Offset") }; + const adjuster_t z = {4, PSTR("Z Offset:"), PSTR("mm"), Theme::z_axis, 3 }; + const increment_t i = { 3 }; + stacker_t s; if(dlcache.hasData()) { dlcache.append(); } else { - a.static_parts(); - b.static_parts(); + s.static_parts(); + h.static_parts(s); + z.static_parts(s); + i.static_parts(s); dlcache.store(); } - a.dynamic_parts(); - b.dynamic_parts(marlin_z_offset); + s.dynamic_parts(); + h.dynamic_parts(s); + z.dynamic_parts(s,marlin_z_offset); + i.dynamic_parts(s); cmd.Cmd(DL_DISPLAY); cmd.Cmd(CMD_SWAP); @@ -1355,3 +1476,8 @@ void lcd_buttons_update() {} inline void lcd_reset_alert_level() {} inline bool lcd_detected() { return true; } inline void lcd_refresh() {current_screen.onIdle();} + +void kill_screen(const char* lcd_msg) { + strncpy_P(lcd_status_message, lcd_msg, STATUS_MESSAGE_BUFFER_LENGTH); + GOTO_SCREEN(KillScreen); +} diff --git a/Marlin/AO_UI_Marlin_LCD_API.h b/Marlin/AO_UI_Marlin_LCD_API.h index 07ad5ddd3..128c6cdfa 100644 --- a/Marlin/AO_UI_Marlin_LCD_API.h +++ b/Marlin/AO_UI_Marlin_LCD_API.h @@ -43,6 +43,13 @@ class Marlin_LCD_API { static const bool isAxisPositionKnown(const axis_t axis); static const progmem_str getFirmwareName(); + + static const void setTargetTemp_celsius(const uint8_t extruder, float temp); + static const void setFan_percent(const uint8_t fan, float percent); + + static float clamp(float value, float minimum, float maximum) {return max(min(value,maximum),minimum);}; + + static void showKillScreen(const char* lcd_msg); }; #if defined(MSG_MARLIN) @@ -66,7 +73,7 @@ const float Marlin_LCD_API::getTargetTemp_celsius(const uint8_t extruder) { } const float Marlin_LCD_API::getFan_percent(const uint8_t fan) { - return ((fanSpeeds[fan] + 1) * 100) / 256; + return ((float(fanSpeeds[fan]) + 1) * 100) / 256; } const float Marlin_LCD_API::getAxisPosition_mm(const Marlin_LCD_API::axis_t axis) { @@ -109,4 +116,18 @@ const bool Marlin_LCD_API::isAxisPositionKnown(const axis_t axis) { const Marlin_LCD_API::progmem_str Marlin_LCD_API::getFirmwareName() { return F("Marlin " SHORT_BUILD_VERSION LULZBOT_FW_VERSION); } + +const void Marlin_LCD_API::setTargetTemp_celsius(const uint8_t extruder, float temp) { + if(extruder) { + thermalManager.setTargetHotend(clamp(temp,0,500), extruder-1); + } else { + thermalManager.setTargetBed(clamp(temp,0,200)); + } +} + +const void Marlin_LCD_API::setFan_percent(const uint8_t fan, float percent) { + if (fan < FAN_COUNT) { + fanSpeeds[fan] = clamp(round(percent*256/100-1), 0, 255); + } +} #endif \ No newline at end of file diff --git a/Marlin/Conditionals_LulzBot.h b/Marlin/Conditionals_LulzBot.h index 46efae88b..854d1544e 100644 --- a/Marlin/Conditionals_LulzBot.h +++ b/Marlin/Conditionals_LulzBot.h @@ -130,7 +130,7 @@ #define LULZBOT_USE_EINSYRAMBO #define LULZBOT_USE_EINSY_RETRO #define LULZBOT_USE_TOUCH_UI - #define LULZBOT_USE_HIGH_RES + //#define LULZBOT_USE_HIGH_RES #define LULZBOT_TWO_PIECE_BED #define LULZBOT_USE_AUTOLEVELING #define LULZBOT_SENSORLESS_HOMING @@ -1759,7 +1759,7 @@ #endif #define LCD_PORTRAIT #define LCD_UPSIDE_DOWN - #define UI_FRAMEWORK_DEBUG + //#define UI_FRAMEWORK_DEBUG #endif /***************************** CUSTOM SPLASH SCREEN *****************************/ diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index 7909960c0..47378a8b6 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -14378,7 +14378,7 @@ void kill(const char* lcd_msg) { thermalManager.disable_all_heaters(); disable_all_steppers(); - #if ENABLED(ULTRA_LCD) + #if ENABLED(ULTRA_LCD) || ENABLED(LULZBOT_USE_TOUCH_UI) kill_screen(lcd_msg); #else UNUSED(lcd_msg);