Auto-Dimming initial

This commit is contained in:
leptun 2019-10-13 14:31:43 +03:00
parent b2a1dc6786
commit 75f389a71d
3 changed files with 39 additions and 7 deletions

View File

@ -7,22 +7,47 @@
#include "Marlin.h" #include "Marlin.h"
#include "pins.h" #include "pins.h"
#include "fastio.h" #include "fastio.h"
// #include "Timer.h" #include "Timer.h"
// #include "Configuration.h" // #include "Configuration.h"
#ifdef LCD_BL_PIN #ifdef LCD_BL_PIN
int16_t backlightLevel = 0; int16_t backlightLevel = 0;
int16_t backlightLevel_old = 0; int16_t backlightLevel_old = 0;
// uint16_t backlightCounter = 0; unsigned long backlightTimer_period = 10000ul;
bool backlightIsDimmed = true;
LongTimer backlightTimer;
static void backlightDim()
{
// if (backlightIsDimmed) return;
backlightLevel /= 4; //make the display half as bright.
backlightIsDimmed = true;
}
static void backlightWake()
{
// if (!backlightIsDimmed) return;
backlightLevel = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL);
backlightIsDimmed = false;
}
void backlightTimer_reset() //used for resetting the timer and waking the display
{
backlightTimer.start();
if (backlightIsDimmed) backlightWake();
}
void backlight_update() void backlight_update()
{ {
if (backlightLevel != backlightLevel_old) //update level if (backlightTimer.expired(backlightTimer_period)) backlightDim();
if (backlightLevel != backlightLevel_old) //update pwm duty cycle
{ {
analogWrite(LCD_BL_PIN, backlightLevel); analogWrite(LCD_BL_PIN, backlightLevel);
backlightLevel_old = backlightLevel; backlightLevel_old = backlightLevel;
eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL, backlightLevel);
if (!backlightIsDimmed) eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL, backlightLevel); //update eeprom value
} }
} }
@ -30,8 +55,8 @@ void backlight_init()
{ {
SET_OUTPUT(LCD_BL_PIN); SET_OUTPUT(LCD_BL_PIN);
WRITE(LCD_BL_PIN,0); WRITE(LCD_BL_PIN,0);
backlightLevel = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL); backlightTimer_reset(); //initializes eeprom data and starts backlightTimer
backlight_update(); backlight_update(); //actually sets the backlight to the correct level
} }
#endif //LCD_BL_PIN #endif //LCD_BL_PIN

View File

@ -8,6 +8,7 @@ extern int16_t backlightLevel;
extern void backlight_update(); extern void backlight_update();
extern void backlight_init(); extern void backlight_init();
extern void backlightTimer_reset();
#endif //_BACKLIGHT_H #endif //_BACKLIGHT_H

View File

@ -8726,6 +8726,7 @@ uint8_t get_message_level()
void menu_lcd_longpress_func(void) void menu_lcd_longpress_func(void)
{ {
backlightTimer_reset();
if (homing_flag || mesh_bed_leveling_flag || menu_menu == lcd_babystep_z || menu_menu == lcd_move_z) if (homing_flag || mesh_bed_leveling_flag || menu_menu == lcd_babystep_z || menu_menu == lcd_move_z)
{ {
// disable longpress during re-entry, while homing or calibration // disable longpress during re-entry, while homing or calibration
@ -8837,9 +8838,14 @@ void menu_lcd_lcdupdate_func(void)
Sound_MakeSound(e_SOUND_TYPE_EncoderMove); Sound_MakeSound(e_SOUND_TYPE_EncoderMove);
lcd_encoder_diff = 0; lcd_encoder_diff = 0;
lcd_timeoutToStatus.start(); lcd_timeoutToStatus.start();
backlightTimer_reset();
} }
if (LCD_CLICKED) lcd_timeoutToStatus.start(); if (LCD_CLICKED)
{
lcd_timeoutToStatus.start();
backlightTimer_reset();
}
(*menu_menu)(); (*menu_menu)();