backlight.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. //backlight.cpp
  2. #include "backlight.h"
  3. #include <avr/eeprom.h>
  4. #include <Arduino.h>
  5. #include "eeprom.h"
  6. #include "Marlin.h"
  7. #include "pins.h"
  8. #include "fastio.h"
  9. #include "Timer.h"
  10. // #include "Configuration.h"
  11. #ifdef LCD_BL_PIN
  12. int16_t backlightLevel = 0;
  13. int16_t backlightLevel_old = 0;
  14. unsigned long backlightTimer_period = 10000ul;
  15. bool backlightIsDimmed = true;
  16. LongTimer backlightTimer;
  17. static void backlightDim()
  18. {
  19. // if (backlightIsDimmed) return;
  20. backlightLevel /= 4; //make the display half as bright.
  21. backlightIsDimmed = true;
  22. }
  23. static void backlightWake()
  24. {
  25. // if (!backlightIsDimmed) return;
  26. backlightLevel = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL);
  27. backlightIsDimmed = false;
  28. }
  29. void backlightTimer_reset() //used for resetting the timer and waking the display
  30. {
  31. backlightTimer.start();
  32. if (backlightIsDimmed) backlightWake();
  33. }
  34. void backlight_update()
  35. {
  36. if (backlightTimer.expired(backlightTimer_period)) backlightDim();
  37. if (backlightLevel != backlightLevel_old) //update pwm duty cycle
  38. {
  39. analogWrite(LCD_BL_PIN, backlightLevel);
  40. backlightLevel_old = backlightLevel;
  41. if (!backlightIsDimmed) eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL, backlightLevel); //update eeprom value
  42. }
  43. }
  44. void backlight_init()
  45. {
  46. SET_OUTPUT(LCD_BL_PIN);
  47. WRITE(LCD_BL_PIN,0);
  48. backlightTimer_reset(); //initializes eeprom data and starts backlightTimer
  49. backlight_update(); //actually sets the backlight to the correct level
  50. }
  51. #endif //LCD_BL_PIN