ST7789Display.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #ifdef ST7789
  2. #include "ST7789Display.h"
  3. #ifndef X_OFFSET
  4. #define X_OFFSET 0 // No offset needed for landscape
  5. #endif
  6. #ifndef Y_OFFSET
  7. #define Y_OFFSET 1 // Vertical offset to prevent top row cutoff
  8. #endif
  9. #define SCALE_X 1.875f // 240 / 128
  10. #define SCALE_Y 2.109375f // 135 / 64
  11. bool ST7789Display::begin() {
  12. if(!_isOn) {
  13. pinMode(PIN_TFT_VDD_CTL, OUTPUT);
  14. pinMode(PIN_TFT_LEDA_CTL, OUTPUT);
  15. digitalWrite(PIN_TFT_VDD_CTL, LOW);
  16. digitalWrite(PIN_TFT_LEDA_CTL, LOW);
  17. digitalWrite(PIN_TFT_RST, HIGH);
  18. display.init();
  19. display.landscapeScreen();
  20. display.displayOn();
  21. setCursor(0,0);
  22. _isOn = true;
  23. }
  24. return true;
  25. }
  26. void ST7789Display::turnOn() {
  27. ST7789Display::begin();
  28. }
  29. void ST7789Display::turnOff() {
  30. digitalWrite(PIN_TFT_VDD_CTL, HIGH);
  31. digitalWrite(PIN_TFT_LEDA_CTL, HIGH);
  32. digitalWrite(PIN_TFT_RST, LOW);
  33. _isOn = false;
  34. }
  35. void ST7789Display::clear() {
  36. display.clear();
  37. }
  38. void ST7789Display::startFrame(Color bkg) {
  39. display.clear();
  40. }
  41. void ST7789Display::setTextSize(int sz) {
  42. switch(sz) {
  43. case 1 :
  44. display.setFont(ArialMT_Plain_16);
  45. break;
  46. case 2 :
  47. display.setFont(ArialMT_Plain_24);
  48. break;
  49. default:
  50. display.setFont(ArialMT_Plain_16);
  51. }
  52. }
  53. void ST7789Display::setColor(Color c) {
  54. switch (c) {
  55. case DisplayDriver::DARK :
  56. _color = ST77XX_BLACK;
  57. break;
  58. case DisplayDriver::LIGHT :
  59. _color = ST77XX_WHITE;
  60. break;
  61. case DisplayDriver::RED :
  62. _color = ST77XX_RED;
  63. break;
  64. case DisplayDriver::GREEN :
  65. _color = ST77XX_GREEN;
  66. break;
  67. case DisplayDriver::BLUE :
  68. _color = ST77XX_BLUE;
  69. break;
  70. case DisplayDriver::YELLOW :
  71. _color = ST77XX_YELLOW;
  72. break;
  73. case DisplayDriver::ORANGE :
  74. _color = ST77XX_ORANGE;
  75. break;
  76. default:
  77. _color = ST77XX_WHITE;
  78. break;
  79. }
  80. display.setRGB(_color);
  81. }
  82. void ST7789Display::setCursor(int x, int y) {
  83. _x = x*SCALE_X + X_OFFSET;
  84. _y = y*SCALE_Y + Y_OFFSET;
  85. }
  86. void ST7789Display::print(const char* str) {
  87. display.drawString(_x, _y, str);
  88. }
  89. void ST7789Display::fillRect(int x, int y, int w, int h) {
  90. display.fillRect(x*SCALE_X + X_OFFSET, y*SCALE_Y + Y_OFFSET, w*SCALE_X, h*SCALE_Y);
  91. }
  92. void ST7789Display::drawRect(int x, int y, int w, int h) {
  93. display.drawRect(x*SCALE_X + X_OFFSET, y*SCALE_Y + Y_OFFSET, w*SCALE_X, h*SCALE_Y);
  94. }
  95. void ST7789Display::drawXbm(int x, int y, const uint8_t* bits, int w, int h) {
  96. display.drawBitmap(x*SCALE_X + X_OFFSET, y*SCALE_Y + Y_OFFSET, w, h, bits);
  97. }
  98. uint16_t ST7789Display::getTextWidth(const char* str) {
  99. return display.getStringWidth(str) / SCALE_X;
  100. }
  101. void ST7789Display::endFrame() {
  102. display.display();
  103. }
  104. #endif