Skip to content

Commit 310618e

Browse files
committed
add heltec_v4 tft expansion box
1 parent 459169e commit 310618e

File tree

8 files changed

+267
-44
lines changed

8 files changed

+267
-44
lines changed

src/helpers/ui/SSD1306Display.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ bool SSD1306Display::i2c_probe(TwoWire& wire, uint8_t addr) {
77
}
88

99
bool SSD1306Display::begin() {
10+
if (!_isOn) {
11+
if (_peripher_power) _peripher_power->claim();
12+
_isOn = true;
13+
}
1014
#ifdef DISPLAY_ROTATION
1115
display.setRotation(DISPLAY_ROTATION);
1216
#endif
@@ -15,12 +19,18 @@ bool SSD1306Display::begin() {
1519

1620
void SSD1306Display::turnOn() {
1721
display.ssd1306_command(SSD1306_DISPLAYON);
18-
_isOn = true;
22+
if (!_isOn) {
23+
if (_peripher_power) _peripher_power->claim();
24+
_isOn = true;
25+
}
1926
}
2027

2128
void SSD1306Display::turnOff() {
2229
display.ssd1306_command(SSD1306_DISPLAYOFF);
23-
_isOn = false;
30+
if (_isOn) {
31+
if (_peripher_power) _peripher_power->release();
32+
_isOn = false;
33+
}
2434
}
2535

2636
void SSD1306Display::clear() {

src/helpers/ui/SSD1306Display.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include <Adafruit_GFX.h>
66
#define SSD1306_NO_SPLASH
77
#include <Adafruit_SSD1306.h>
8+
#include <helpers/RefCountedDigitalPin.h>
89

910
#ifndef PIN_OLED_RESET
1011
#define PIN_OLED_RESET 21 // Reset pin # (or -1 if sharing Arduino reset pin)
@@ -18,10 +19,16 @@ class SSD1306Display : public DisplayDriver {
1819
Adafruit_SSD1306 display;
1920
bool _isOn;
2021
uint8_t _color;
22+
RefCountedDigitalPin* _peripher_power;
2123

2224
bool i2c_probe(TwoWire& wire, uint8_t addr);
2325
public:
24-
SSD1306Display() : DisplayDriver(128, 64), display(128, 64, &Wire, PIN_OLED_RESET) { _isOn = false; }
26+
SSD1306Display(RefCountedDigitalPin* peripher_power=NULL) : DisplayDriver(128, 64),
27+
display(128, 64, &Wire, PIN_OLED_RESET),
28+
_peripher_power(peripher_power)
29+
{
30+
_isOn = false;
31+
}
2532
bool begin();
2633

2734
bool isOn() override { return _isOn; }

src/helpers/ui/ST7789LCDDisplay.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,13 @@ bool ST7789LCDDisplay::begin() {
2525

2626
pinMode(PIN_TFT_LEDA_CTL, OUTPUT);
2727
digitalWrite(PIN_TFT_LEDA_CTL, HIGH);
28+
pinMode(PIN_TFT_RST, OUTPUT);
29+
digitalWrite(PIN_TFT_RST, LOW);
30+
delay(10);
2831
digitalWrite(PIN_TFT_RST, HIGH);
2932

3033
// Im not sure if this is just a t-deck problem or not, if your display is slow try this.
31-
#ifdef LILYGO_TDECK
34+
#if defined(LILYGO_TDECK) || defined(HELTEC_LORA_V4_TFT)
3235
displaySPI.begin(PIN_TFT_SCL, -1, PIN_TFT_SDA, PIN_TFT_CS);
3336
#endif
3437

src/helpers/ui/ST7789LCDDisplay.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#include <helpers/RefCountedDigitalPin.h>
99

1010
class ST7789LCDDisplay : public DisplayDriver {
11-
#ifdef LILYGO_TDECK
11+
#if defined(LILYGO_TDECK) || defined(HELTEC_LORA_V4_TFT)
1212
SPIClass displaySPI;
1313
#endif
1414
Adafruit_ST7789 display;
@@ -25,7 +25,7 @@ class ST7789LCDDisplay : public DisplayDriver {
2525
{
2626
_isOn = false;
2727
}
28-
#elif LILYGO_TDECK
28+
#elif defined(LILYGO_TDECK) || defined(HELTEC_LORA_V4_TFT)
2929
ST7789LCDDisplay(RefCountedDigitalPin* peripher_power=NULL) : DisplayDriver(128, 64),
3030
displaySPI(HSPI),
3131
display(&displaySPI, PIN_TFT_CS, PIN_TFT_DC, PIN_TFT_RST),

variants/heltec_v4/HeltecV4Board.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,5 +86,9 @@ void HeltecV4Board::begin() {
8686
}
8787

8888
const char* HeltecV4Board::getManufacturerName() const {
89-
return "Heltec V4";
89+
#ifdef HELTEC_LORA_V4_TFT
90+
return "Heltec V4 TFT";
91+
#else
92+
return "Heltec V4 OLED";
93+
#endif
9094
}

0 commit comments

Comments
 (0)