diff --git a/src/helpers/ui/ST7735Display.cpp b/src/helpers/ui/ST7735Display.cpp new file mode 100644 index 00000000..45fd2a39 --- /dev/null +++ b/src/helpers/ui/ST7735Display.cpp @@ -0,0 +1,125 @@ +#ifdef ST7735 + +#include "ST7735Display.h" + +#ifndef DISPLAY_ROTATION + #define DISPLAY_ROTATION 2 +#endif + + +bool ST7735Display::i2c_probe(TwoWire& wire, uint8_t addr) { + return true; +/* + wire.beginTransmission(addr); + uint8_t error = wire.endTransmission(); + return (error == 0); +*/ +} + +bool ST7735Display::begin() { + if(!_isOn) { + pinMode(PIN_TFT_VDD_CTL, OUTPUT); + pinMode(PIN_TFT_LEDA_CTL, OUTPUT); + digitalWrite(PIN_TFT_VDD_CTL, HIGH); + digitalWrite(PIN_TFT_LEDA_CTL, HIGH); + digitalWrite(PIN_TFT_RST, HIGH); + + display.initR(INITR_MINI160x80_PLUGIN); + display.setRotation(DISPLAY_ROTATION); + display.setSPISpeed(40000000); + display.fillScreen(ST77XX_BLACK); + display.setTextColor(ST77XX_WHITE); + display.setTextSize(2); + display.cp437(true); // Use full 256 char 'Code Page 437' font + + _isOn = true; + } + return true; +} + +void ST7735Display::turnOn() { + + ST7735Display::begin(); + +} + +void ST7735Display::turnOff() { + digitalWrite(PIN_TFT_VDD_CTL, HIGH); + digitalWrite(PIN_TFT_LEDA_CTL, HIGH); + digitalWrite(PIN_TFT_RST, LOW); + digitalWrite(PIN_TFT_VDD_CTL, LOW); + digitalWrite(PIN_TFT_LEDA_CTL, LOW); + _isOn = false; +} + +void ST7735Display::clear() { + //Serial.println("DBG: display.Clear"); + display.fillScreen(ST77XX_BLACK); +} + +void ST7735Display::startFrame(Color bkg) { + display.fillScreen(0x00); + display.setTextColor(ST77XX_WHITE); + display.setTextSize(1); // This one affects size of Please wait... message + display.cp437(true); // Use full 256 char 'Code Page 437' font +} + +void ST7735Display::setTextSize(int sz) { + display.setTextSize(sz); +} + +void ST7735Display::setColor(Color c) { + switch (c) { + case DisplayDriver::DARK : + _color = ST77XX_BLACK; + break; + case DisplayDriver::LIGHT : + _color = ST77XX_WHITE; + break; + case DisplayDriver::RED : + _color = ST77XX_RED; + break; + case DisplayDriver::GREEN : + _color = ST77XX_GREEN; + break; + case DisplayDriver::BLUE : + _color = ST77XX_BLUE; + break; + case DisplayDriver::YELLOW : + _color = ST77XX_YELLOW; + break; + case DisplayDriver::ORANGE : + _color = ST77XX_ORANGE; + break; + default: + _color = ST77XX_WHITE; + break; + } + display.setTextColor(_color); +} + +void ST7735Display::setCursor(int x, int y) { + display.setCursor(x, y); +} + +void ST7735Display::print(const char* str) { + display.print(str); +} + +void ST7735Display::fillRect(int x, int y, int w, int h) { + display.fillRect(x, y, w, h, _color); +} + +void ST7735Display::drawRect(int x, int y, int w, int h) { + display.drawRect(x, y, w, h, _color); +} + +void ST7735Display::drawXbm(int x, int y, const uint8_t* bits, int w, int h) { + display.drawBitmap(x, y, bits, w, h, _color); +} + +void ST7735Display::endFrame() { + // display.display(); +} + +#endif \ No newline at end of file diff --git a/src/helpers/ui/ST7735Display.h b/src/helpers/ui/ST7735Display.h new file mode 100644 index 00000000..d456b477 --- /dev/null +++ b/src/helpers/ui/ST7735Display.h @@ -0,0 +1,36 @@ +#pragma once + +#include "DisplayDriver.h" +#include +#include +#include +#include + +class ST7735Display : public DisplayDriver { + Adafruit_ST7735 display; + bool _isOn; + uint16_t _color; + + bool i2c_probe(TwoWire& wire, uint8_t addr); +public: +#ifdef USE_PIN_TFT + ST7735Display() : DisplayDriver(80, 160), display(PIN_TFT_CS, PIN_TFT_DC, PIN_TFT_SDA, PIN_TFT_SCL, PIN_TFT_RST) { _isOn = false; } +#else + ST7735Display() : DisplayDriver(80, 160), display(&SPI1, PIN_TFT_CS, PIN_TFT_DC, PIN_TFT_RST) { _isOn = false; } +#endif + bool begin(); + + bool isOn() override { return _isOn; } + void turnOn() override; + void turnOff() override; + void clear() override; + void startFrame(Color bkg = DARK) override; + void setTextSize(int sz) override; + void setColor(Color c) override; + void setCursor(int x, int y) override; + void print(const char* str) override; + void fillRect(int x, int y, int w, int h) override; + void drawRect(int x, int y, int w, int h) override; + void drawXbm(int x, int y, const uint8_t* bits, int w, int h) override; + void endFrame() override; +};