ST7735Display.cpp 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. #include "ST7735Display.h"
  2. #ifndef DISPLAY_ROTATION
  3. #define DISPLAY_ROTATION 2
  4. #endif
  5. #define SCALE_X 1.25f // 160 / 128
  6. #define SCALE_Y 1.25f // 80 / 64
  7. bool ST7735Display::i2c_probe(TwoWire& wire, uint8_t addr) {
  8. return true;
  9. /*
  10. wire.beginTransmission(addr);
  11. uint8_t error = wire.endTransmission();
  12. return (error == 0);
  13. */
  14. }
  15. bool ST7735Display::begin() {
  16. if (!_isOn) {
  17. if (_peripher_power) _peripher_power->claim();
  18. pinMode(PIN_TFT_LEDA_CTL, OUTPUT);
  19. #if defined(PIN_TFT_LEDA_CTL_ACTIVE)
  20. digitalWrite(PIN_TFT_LEDA_CTL, PIN_TFT_LEDA_CTL_ACTIVE);
  21. #else
  22. digitalWrite(PIN_TFT_LEDA_CTL, HIGH);
  23. #endif
  24. digitalWrite(PIN_TFT_RST, HIGH);
  25. #if defined(HELTEC_T1)
  26. display.initR(INITR_MINI160x80);
  27. display.setRotation(DISPLAY_ROTATION);
  28. #elif defined(HELTEC_TRACKER_V2) || defined(HELTEC_T096)
  29. display.initR(INITR_MINI160x80);
  30. display.setRotation(DISPLAY_ROTATION);
  31. uint8_t madctl = ST77XX_MADCTL_MY | ST77XX_MADCTL_MV |ST7735_MADCTL_BGR;//Adjust color to BGR
  32. display.sendCommand(ST77XX_MADCTL, &madctl, 1);
  33. #else
  34. display.initR(INITR_MINI160x80_PLUGIN);
  35. display.setRotation(DISPLAY_ROTATION);
  36. #endif
  37. display.setSPISpeed(40000000);
  38. display.fillScreen(ST77XX_BLACK);
  39. display.setTextColor(ST77XX_WHITE);
  40. display.setTextSize(2);
  41. display.cp437(true); // Use full 256 char 'Code Page 437' font
  42. _isOn = true;
  43. }
  44. return true;
  45. }
  46. void ST7735Display::turnOn() {
  47. ST7735Display::begin();
  48. }
  49. void ST7735Display::turnOff() {
  50. if (_isOn) {
  51. digitalWrite(PIN_TFT_RST, LOW);
  52. #if defined(PIN_TFT_LEDA_CTL_ACTIVE)
  53. digitalWrite(PIN_TFT_LEDA_CTL, !PIN_TFT_LEDA_CTL_ACTIVE);
  54. #else
  55. digitalWrite(PIN_TFT_LEDA_CTL, LOW);
  56. #endif
  57. _isOn = false;
  58. if (_peripher_power) _peripher_power->release();
  59. }
  60. }
  61. void ST7735Display::clear() {
  62. //Serial.println("DBG: display.Clear");
  63. display.fillScreen(ST77XX_BLACK);
  64. }
  65. void ST7735Display::startFrame(Color bkg) {
  66. display.fillScreen(0x00);
  67. display.setTextColor(ST77XX_WHITE);
  68. display.setTextSize(1); // This one affects size of Please wait... message
  69. display.cp437(true); // Use full 256 char 'Code Page 437' font
  70. }
  71. void ST7735Display::setTextSize(int sz) {
  72. display.setTextSize(sz);
  73. }
  74. void ST7735Display::setColor(Color c) {
  75. switch (c) {
  76. case DisplayDriver::DARK :
  77. _color = ST77XX_BLACK;
  78. break;
  79. case DisplayDriver::LIGHT :
  80. _color = ST77XX_WHITE;
  81. break;
  82. case DisplayDriver::RED :
  83. _color = ST77XX_RED;
  84. break;
  85. case DisplayDriver::GREEN :
  86. _color = ST77XX_GREEN;
  87. break;
  88. case DisplayDriver::BLUE :
  89. _color = ST77XX_BLUE;
  90. break;
  91. case DisplayDriver::YELLOW :
  92. _color = ST77XX_YELLOW;
  93. break;
  94. case DisplayDriver::ORANGE :
  95. _color = ST77XX_ORANGE;
  96. break;
  97. default:
  98. _color = ST77XX_WHITE;
  99. break;
  100. }
  101. display.setTextColor(_color);
  102. }
  103. void ST7735Display::setCursor(int x, int y) {
  104. display.setCursor(x*SCALE_X, y*SCALE_Y);
  105. }
  106. void ST7735Display::print(const char* str) {
  107. display.print(str);
  108. }
  109. void ST7735Display::fillRect(int x, int y, int w, int h) {
  110. display.fillRect(x*SCALE_X, y*SCALE_Y, w*SCALE_X, h*SCALE_Y, _color);
  111. }
  112. void ST7735Display::drawRect(int x, int y, int w, int h) {
  113. display.drawRect(x*SCALE_X, y*SCALE_Y, w*SCALE_X, h*SCALE_Y, _color);
  114. }
  115. void ST7735Display::drawXbm(int x, int y, const uint8_t* bits, int w, int h) {
  116. display.drawBitmap(x*SCALE_X, y*SCALE_Y, bits, w, h, _color);
  117. }
  118. uint16_t ST7735Display::getTextWidth(const char* str) {
  119. int16_t x1, y1;
  120. uint16_t w, h;
  121. display.getTextBounds(str, 0, 0, &x1, &y1, &w, &h);
  122. return w / SCALE_X;
  123. }
  124. void ST7735Display::endFrame() {
  125. // display.display();
  126. }