backlight.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. bool backlightSupport = 0;
  13. int16_t backlightLevel = 0;
  14. int16_t backlightLevel_old = 0;
  15. unsigned long backlightTimer_period = 10000ul;
  16. bool backlightIsDimmed = true;
  17. LongTimer backlightTimer;
  18. static void backlightDim()
  19. {
  20. // if (backlightIsDimmed) return;
  21. backlightLevel /= 4; //make the display dimmer.
  22. backlightIsDimmed = true;
  23. }
  24. static void backlightWake()
  25. {
  26. // if (!backlightIsDimmed) return;
  27. backlightLevel = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL);
  28. backlightIsDimmed = false;
  29. }
  30. void backlightTimer_reset() //used for resetting the timer and waking the display
  31. {
  32. backlightTimer.start();
  33. if (backlightIsDimmed) backlightWake();
  34. }
  35. void backlight_update()
  36. {
  37. if (!backlightSupport) return;
  38. if (backlightTimer.expired(backlightTimer_period)) backlightDim();
  39. if (backlightLevel != backlightLevel_old) //update pwm duty cycle
  40. {
  41. analogWrite(LCD_BL_PIN, backlightLevel);
  42. backlightLevel_old = backlightLevel;
  43. if (!backlightIsDimmed) eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL, backlightLevel); //update eeprom value
  44. }
  45. }
  46. void backlight_init()
  47. {
  48. //check for backlight support on lcd
  49. SET_INPUT(LCD_BL_PIN);
  50. WRITE(LCD_BL_PIN,HIGH);
  51. _delay(10);
  52. backlightSupport = !READ(LCD_BL_PIN);
  53. if (backlightSupport == 0) return;
  54. //initialize backlight pin
  55. SET_OUTPUT(LCD_BL_PIN);
  56. WRITE(LCD_BL_PIN,0);
  57. backlightTimer_reset(); //initializes eeprom data and starts backlightTimer
  58. backlight_update(); //actually sets the backlight to the correct level
  59. }
  60. #endif //LCD_BL_PIN