Merge pull request #3271 from thinkyhead/rc_blink_limiter

Keep blinking limited to LCD_UPDATE_INTERVAL
This commit is contained in:
Scott Lahteine 2016-03-28 20:05:56 -07:00
commit f83c03f594
4 changed files with 45 additions and 35 deletions

View File

@ -304,9 +304,11 @@ static void _draw_heater_status(int x, int heater) {
static void lcd_implementation_status_screen() { static void lcd_implementation_status_screen() {
u8g.setColorIndex(1); // black on white u8g.setColorIndex(1); // black on white
bool blink = lcd_blink();
#if HAS_FAN0 #if HAS_FAN0
// Symbols menu graphics, animated fan // Symbols menu graphics, animated fan
u8g.drawBitmapP(9, 1, STATUS_SCREENBYTEWIDTH, STATUS_SCREENHEIGHT, (blink % 2) && fanSpeeds[0] ? status_screen0_bmp : status_screen1_bmp); u8g.drawBitmapP(9, 1, STATUS_SCREENBYTEWIDTH, STATUS_SCREENHEIGHT, blink && fanSpeeds[0] ? status_screen0_bmp : status_screen1_bmp);
#endif #endif
#if ENABLED(SDSUPPORT) #if ENABLED(SDSUPPORT)
@ -375,12 +377,12 @@ static void lcd_implementation_status_screen() {
#endif #endif
u8g.setColorIndex(0); // white on black u8g.setColorIndex(0); // white on black
u8g.setPrintPos(2, XYZ_BASELINE); u8g.setPrintPos(2, XYZ_BASELINE);
if (blink & 1) if (blink)
lcd_printPGM(PSTR("X")); lcd_printPGM(PSTR("X"));
else { else {
if (!axis_homed[X_AXIS]) if (!axis_homed[X_AXIS])
lcd_printPGM(PSTR("?")); lcd_printPGM(PSTR("?"));
else else {
#if DISABLED(DISABLE_REDUCED_ACCURACY_WARNING) #if DISABLED(DISABLE_REDUCED_ACCURACY_WARNING)
if (!axis_known_position[X_AXIS]) if (!axis_known_position[X_AXIS])
lcd_printPGM(PSTR(" ")); lcd_printPGM(PSTR(" "));
@ -388,18 +390,19 @@ static void lcd_implementation_status_screen() {
#endif #endif
lcd_printPGM(PSTR("X")); lcd_printPGM(PSTR("X"));
} }
}
u8g.drawPixel(8, XYZ_BASELINE - 5); u8g.drawPixel(8, XYZ_BASELINE - 5);
u8g.drawPixel(8, XYZ_BASELINE - 3); u8g.drawPixel(8, XYZ_BASELINE - 3);
u8g.setPrintPos(10, XYZ_BASELINE); u8g.setPrintPos(10, XYZ_BASELINE);
lcd_print(ftostr31ns(current_position[X_AXIS])); lcd_print(ftostr31ns(current_position[X_AXIS]));
u8g.setPrintPos(43, XYZ_BASELINE); u8g.setPrintPos(43, XYZ_BASELINE);
if (blink & 1) if (blink)
lcd_printPGM(PSTR("Y")); lcd_printPGM(PSTR("Y"));
else { else {
if (!axis_homed[Y_AXIS]) if (!axis_homed[Y_AXIS])
lcd_printPGM(PSTR("?")); lcd_printPGM(PSTR("?"));
else else {
#if DISABLED(DISABLE_REDUCED_ACCURACY_WARNING) #if DISABLED(DISABLE_REDUCED_ACCURACY_WARNING)
if (!axis_known_position[Y_AXIS]) if (!axis_known_position[Y_AXIS])
lcd_printPGM(PSTR(" ")); lcd_printPGM(PSTR(" "));
@ -407,18 +410,19 @@ static void lcd_implementation_status_screen() {
#endif #endif
lcd_printPGM(PSTR("Y")); lcd_printPGM(PSTR("Y"));
} }
}
u8g.drawPixel(49, XYZ_BASELINE - 5); u8g.drawPixel(49, XYZ_BASELINE - 5);
u8g.drawPixel(49, XYZ_BASELINE - 3); u8g.drawPixel(49, XYZ_BASELINE - 3);
u8g.setPrintPos(51, XYZ_BASELINE); u8g.setPrintPos(51, XYZ_BASELINE);
lcd_print(ftostr31ns(current_position[Y_AXIS])); lcd_print(ftostr31ns(current_position[Y_AXIS]));
u8g.setPrintPos(83, XYZ_BASELINE); u8g.setPrintPos(83, XYZ_BASELINE);
if (blink & 1) if (blink)
lcd_printPGM(PSTR("Z")); lcd_printPGM(PSTR("Z"));
else { else {
if (!axis_homed[Z_AXIS]) if (!axis_homed[Z_AXIS])
lcd_printPGM(PSTR("?")); lcd_printPGM(PSTR("?"));
else else {
#if DISABLED(DISABLE_REDUCED_ACCURACY_WARNING) #if DISABLED(DISABLE_REDUCED_ACCURACY_WARNING)
if (!axis_known_position[Z_AXIS]) if (!axis_known_position[Z_AXIS])
lcd_printPGM(PSTR(" ")); lcd_printPGM(PSTR(" "));
@ -426,6 +430,7 @@ static void lcd_implementation_status_screen() {
#endif #endif
lcd_printPGM(PSTR("Z")); lcd_printPGM(PSTR("Z"));
} }
}
u8g.drawPixel(89, XYZ_BASELINE - 5); u8g.drawPixel(89, XYZ_BASELINE - 5);
u8g.drawPixel(89, XYZ_BASELINE - 3); u8g.drawPixel(89, XYZ_BASELINE - 3);
u8g.setPrintPos(91, XYZ_BASELINE); u8g.setPrintPos(91, XYZ_BASELINE);

View File

@ -48,8 +48,6 @@
#define ENCODER_DIRECTION_MENUS() ; #define ENCODER_DIRECTION_MENUS() ;
#endif #endif
uint8_t blink = 0; // Variable for animation
int8_t encoderDiff; // updated from interrupt context and added to encoderPosition every LCD update int8_t encoderDiff; // updated from interrupt context and added to encoderPosition every LCD update
bool encoderRateMultiplierEnabled; bool encoderRateMultiplierEnabled;
@ -1807,6 +1805,16 @@ int lcd_strlen_P(const char* s) {
return j; return j;
} }
bool lcd_blink() {
static uint8_t blink = 0;
static millis_t next_blink_ms = 0;
if (millis() >= next_blink_ms) {
blink ^= 0xFF;
next_blink_ms = millis() + LCD_UPDATE_INTERVAL - 50;
}
return blink != 0;
}
/** /**
* Update the LCD, read encoder buttons, etc. * Update the LCD, read encoder buttons, etc.
* - Read button states * - Read button states
@ -1923,25 +1931,23 @@ void lcd_update() {
lcd_status_update_delay--; lcd_status_update_delay--;
} }
} }
#if ENABLED(DOGLCD) // Changes due to different driver architecture of the DOGM display
if (lcdDrawUpdate) { if (lcdDrawUpdate) {
blink++; // Variable for animation and alive dot #if ENABLED(DOGLCD) // Changes due to different driver architecture of the DOGM display
bool blink = lcd_blink();
u8g.firstPage(); u8g.firstPage();
do { do {
lcd_setFont(FONT_MENU); lcd_setFont(FONT_MENU);
u8g.setPrintPos(125, 0); u8g.setPrintPos(125, 0);
if (blink & 1) u8g.setColorIndex(1); else u8g.setColorIndex(0); // Set color for the alive dot u8g.setColorIndex(blink ? 1 : 0); // Set color for the alive dot
u8g.drawPixel(127, 63); // draw alive dot u8g.drawPixel(127, 63); // draw alive dot
u8g.setColorIndex(1); // black on white u8g.setColorIndex(1); // black on white
(*currentMenu)(); (*currentMenu)();
} while (u8g.nextPage()); } while (u8g.nextPage());
}
#else #else
if (lcdDrawUpdate) {
blink++; // Variable for animation
(*currentMenu)(); (*currentMenu)();
}
#endif #endif
}
#if ENABLED(LCD_HAS_STATUS_INDICATORS) #if ENABLED(LCD_HAS_STATUS_INDICATORS)
lcd_implementation_update_indicators(); lcd_implementation_update_indicators();
@ -1963,8 +1969,7 @@ void lcd_update() {
#endif // ULTIPANEL #endif // ULTIPANEL
if (lcdDrawUpdate == 2) lcd_implementation_clear(); if (lcdDrawUpdate && --lcdDrawUpdate) lcd_implementation_clear();
if (lcdDrawUpdate) lcdDrawUpdate--;
next_lcd_update_ms = ms + LCD_UPDATE_INTERVAL; next_lcd_update_ms = ms + LCD_UPDATE_INTERVAL;
} }
} }

View File

@ -76,15 +76,13 @@
extern bool cancel_heatup; extern bool cancel_heatup;
extern uint8_t blink; // Variable for animation
#if ENABLED(FILAMENT_LCD_DISPLAY) #if ENABLED(FILAMENT_LCD_DISPLAY)
extern millis_t previous_lcd_status_ms; extern millis_t previous_lcd_status_ms;
#endif #endif
void lcd_quick_feedback(); // Audible feedback for a button click - could also be visual void lcd_quick_feedback(); // Audible feedback for a button click - could also be visual
bool lcd_clicked(); bool lcd_clicked();
void lcd_ignore_click(bool b=true); void lcd_ignore_click(bool b=true);
bool lcd_blink();
#if ENABLED(NEWPANEL) #if ENABLED(NEWPANEL)
#define EN_C (_BV(BLEN_C)) #define EN_C (_BV(BLEN_C))

View File

@ -626,6 +626,8 @@ static void lcd_implementation_status_screen() {
#if LCD_HEIGHT > 2 #if LCD_HEIGHT > 2
bool blink = lcd_blink();
#if LCD_WIDTH < 20 #if LCD_WIDTH < 20
#if ENABLED(SDSUPPORT) #if ENABLED(SDSUPPORT)
@ -654,7 +656,7 @@ static void lcd_implementation_status_screen() {
// When axis is homed but axis_known_position is false the axis letters are blinking 'X' <-> ' '. // When axis is homed but axis_known_position is false the axis letters are blinking 'X' <-> ' '.
// When everything is ok you see a constant 'X'. // When everything is ok you see a constant 'X'.
if (blink & 1) if (blink)
lcd_printPGM(PSTR("X")); lcd_printPGM(PSTR("X"));
else { else {
if (!axis_homed[X_AXIS]) if (!axis_homed[X_AXIS])
@ -671,7 +673,7 @@ static void lcd_implementation_status_screen() {
lcd.print(ftostr4sign(current_position[X_AXIS])); lcd.print(ftostr4sign(current_position[X_AXIS]));
lcd_printPGM(PSTR(" ")); lcd_printPGM(PSTR(" "));
if (blink & 1) if (blink)
lcd_printPGM(PSTR("Y")); lcd_printPGM(PSTR("Y"));
else { else {
if (!axis_homed[Y_AXIS]) if (!axis_homed[Y_AXIS])
@ -691,7 +693,7 @@ static void lcd_implementation_status_screen() {
#endif // LCD_WIDTH >= 20 #endif // LCD_WIDTH >= 20
lcd.setCursor(LCD_WIDTH - 8, 1); lcd.setCursor(LCD_WIDTH - 8, 1);
if (blink & 1) if (blink)
lcd_printPGM(PSTR("Z")); lcd_printPGM(PSTR("Z"));
else { else {
if (!axis_homed[Z_AXIS]) if (!axis_homed[Z_AXIS])