From 787feb22cdebe0bd74ad60959e1ef9184ded654e Mon Sep 17 00:00:00 2001 From: Jason Cox Date: Wed, 31 Dec 2025 12:51:30 -0800 Subject: [PATCH 1/3] Add pram to setContrast and setBrightness methods to preserve display mode state --- README.md | 12 ++++++++---- src/OLEDDisplay.cpp | 12 ++++++++---- src/OLEDDisplay.h | 14 ++++++++++---- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 25a94ec2..88bc6a3f 100644 --- a/README.md +++ b/README.md @@ -169,10 +169,14 @@ void normalDisplay(void); // Set display contrast // really low brightness & contrast: contrast = 10, precharge = 5, comdetect = 0 // normal brightness & contrast: contrast = 100 -void setContrast(uint8_t contrast, uint8_t precharge = 241, uint8_t comdetect = 64); - -// Convenience method to access -void setBrightness(uint8_t); +// forceNormal = true - forces normal display mode (default) +// false - preserves current display mode (normal/inverted) +void setContrast(uint8_t contrast, uint8_t precharge = 241, uint8_t comdetect = 64, bool forceNormal = true); + +// Convenience method to access setContrast with simplified parameters +// forceNormal = true - forces normal display mode (default) +// false - preserves current display mode (normal/inverted) +void setBrightness(uint8_t, bool forceNormal = true); // Turn the display upside down void flipScreenVertically(); diff --git a/src/OLEDDisplay.cpp b/src/OLEDDisplay.cpp index 13016b2c..330dcfba 100644 --- a/src/OLEDDisplay.cpp +++ b/src/OLEDDisplay.cpp @@ -776,7 +776,7 @@ void OLEDDisplay::normalDisplay(void) { sendCommand(NORMALDISPLAY); } -void OLEDDisplay::setContrast(uint8_t contrast, uint8_t precharge, uint8_t comdetect) { +void OLEDDisplay::setContrast(uint8_t contrast, uint8_t precharge, uint8_t comdetect, bool forceNormal) { sendCommand(SETPRECHARGE); //0xD9 sendCommand(precharge); //0xF1 default, to lower the contrast, put 1-1F sendCommand(SETCONTRAST); @@ -784,11 +784,15 @@ void OLEDDisplay::setContrast(uint8_t contrast, uint8_t precharge, uint8_t comde sendCommand(SETVCOMDETECT); //0xDB, (additionally needed to lower the contrast) sendCommand(comdetect); //0x40 default, to lower the contrast, put 0 sendCommand(DISPLAYALLON_RESUME); - sendCommand(NORMALDISPLAY); + // Only force normal display if requested (default: true for backwards compatibility) + // Set to false to preserve invertDisplay() state + if (forceNormal) { + sendCommand(NORMALDISPLAY); + } sendCommand(DISPLAYON); } -void OLEDDisplay::setBrightness(uint8_t brightness) { +void OLEDDisplay::setBrightness(uint8_t brightness, bool forceNormal) { uint8_t contrast = brightness; if (brightness < 128) { // Magic values to get a smooth/ step-free transition @@ -803,7 +807,7 @@ void OLEDDisplay::setBrightness(uint8_t brightness) { } uint8_t comdetect = brightness / 8; - setContrast(contrast, precharge, comdetect); + setContrast(contrast, precharge, comdetect, forceNormal); } void OLEDDisplay::resetOrientation() { diff --git a/src/OLEDDisplay.h b/src/OLEDDisplay.h index 474b1635..d5a145cb 100644 --- a/src/OLEDDisplay.h +++ b/src/OLEDDisplay.h @@ -294,10 +294,16 @@ class OLEDDisplay : public Stream { // Set display contrast // really low brightness & contrast: contrast = 10, precharge = 5, comdetect = 0 // normal brightness & contrast: contrast = 100 - void setContrast(uint8_t contrast, uint8_t precharge = 241, uint8_t comdetect = 64); - - // Convenience method to access - void setBrightness(uint8_t); + // forceNormal = true - forces normal display mode (white on black), + // overriding any previous invertDisplay() call (default) + // false - preserves current display mode (normal/inverted) + void setContrast(uint8_t contrast, uint8_t precharge = 241, uint8_t comdetect = 64, bool forceNormal = true); + + // Convenience method to access setContrast with simplified parameters + // forceNormal = true - forces normal display mode (white on black), + // overriding any previous invertDisplay() call (default) + // false - preserves current display mode (normal/inverted) + void setBrightness(uint8_t, bool forceNormal = true); // Reset display rotation or mirroring void resetOrientation(); From 07c2bb7840d88dd76627c4a3309217f9a8ff6177 Mon Sep 17 00:00:00 2001 From: Jason Cox Date: Wed, 31 Dec 2025 13:01:22 -0800 Subject: [PATCH 2/3] Remove trailing space --- src/OLEDDisplay.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OLEDDisplay.cpp b/src/OLEDDisplay.cpp index 330dcfba..8df3bc90 100644 --- a/src/OLEDDisplay.cpp +++ b/src/OLEDDisplay.cpp @@ -788,7 +788,7 @@ void OLEDDisplay::setContrast(uint8_t contrast, uint8_t precharge, uint8_t comde // Set to false to preserve invertDisplay() state if (forceNormal) { sendCommand(NORMALDISPLAY); - } + } sendCommand(DISPLAYON); } From cf645723b834c9005bb5f8efec5ec01865e63e50 Mon Sep 17 00:00:00 2001 From: Jason Cox Date: Thu, 8 Jan 2026 20:23:58 -0800 Subject: [PATCH 3/3] Refactor setContrast and setBrightness methods to remove forceNormal parameter and preserve display mode state --- README.md | 12 ++++-------- src/OLEDDisplay.cpp | 11 +++-------- src/OLEDDisplay.h | 14 ++++---------- 3 files changed, 11 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 88bc6a3f..f093faf2 100644 --- a/README.md +++ b/README.md @@ -169,14 +169,10 @@ void normalDisplay(void); // Set display contrast // really low brightness & contrast: contrast = 10, precharge = 5, comdetect = 0 // normal brightness & contrast: contrast = 100 -// forceNormal = true - forces normal display mode (default) -// false - preserves current display mode (normal/inverted) -void setContrast(uint8_t contrast, uint8_t precharge = 241, uint8_t comdetect = 64, bool forceNormal = true); - -// Convenience method to access setContrast with simplified parameters -// forceNormal = true - forces normal display mode (default) -// false - preserves current display mode (normal/inverted) -void setBrightness(uint8_t, bool forceNormal = true); +void setContrast(uint8_t contrast, uint8_t precharge = 241, uint8_t comdetect = 64); + +// Convenience method to access setContrast with only brightness parameter +void setBrightness(uint8_t); // Turn the display upside down void flipScreenVertically(); diff --git a/src/OLEDDisplay.cpp b/src/OLEDDisplay.cpp index 8df3bc90..c96a0295 100644 --- a/src/OLEDDisplay.cpp +++ b/src/OLEDDisplay.cpp @@ -776,7 +776,7 @@ void OLEDDisplay::normalDisplay(void) { sendCommand(NORMALDISPLAY); } -void OLEDDisplay::setContrast(uint8_t contrast, uint8_t precharge, uint8_t comdetect, bool forceNormal) { +void OLEDDisplay::setContrast(uint8_t contrast, uint8_t precharge, uint8_t comdetect) { sendCommand(SETPRECHARGE); //0xD9 sendCommand(precharge); //0xF1 default, to lower the contrast, put 1-1F sendCommand(SETCONTRAST); @@ -784,15 +784,10 @@ void OLEDDisplay::setContrast(uint8_t contrast, uint8_t precharge, uint8_t comde sendCommand(SETVCOMDETECT); //0xDB, (additionally needed to lower the contrast) sendCommand(comdetect); //0x40 default, to lower the contrast, put 0 sendCommand(DISPLAYALLON_RESUME); - // Only force normal display if requested (default: true for backwards compatibility) - // Set to false to preserve invertDisplay() state - if (forceNormal) { - sendCommand(NORMALDISPLAY); - } sendCommand(DISPLAYON); } -void OLEDDisplay::setBrightness(uint8_t brightness, bool forceNormal) { +void OLEDDisplay::setBrightness(uint8_t brightness) { uint8_t contrast = brightness; if (brightness < 128) { // Magic values to get a smooth/ step-free transition @@ -807,7 +802,7 @@ void OLEDDisplay::setBrightness(uint8_t brightness, bool forceNormal) { } uint8_t comdetect = brightness / 8; - setContrast(contrast, precharge, comdetect, forceNormal); + setContrast(contrast, precharge, comdetect); } void OLEDDisplay::resetOrientation() { diff --git a/src/OLEDDisplay.h b/src/OLEDDisplay.h index d5a145cb..1b8e0352 100644 --- a/src/OLEDDisplay.h +++ b/src/OLEDDisplay.h @@ -294,16 +294,10 @@ class OLEDDisplay : public Stream { // Set display contrast // really low brightness & contrast: contrast = 10, precharge = 5, comdetect = 0 // normal brightness & contrast: contrast = 100 - // forceNormal = true - forces normal display mode (white on black), - // overriding any previous invertDisplay() call (default) - // false - preserves current display mode (normal/inverted) - void setContrast(uint8_t contrast, uint8_t precharge = 241, uint8_t comdetect = 64, bool forceNormal = true); - - // Convenience method to access setContrast with simplified parameters - // forceNormal = true - forces normal display mode (white on black), - // overriding any previous invertDisplay() call (default) - // false - preserves current display mode (normal/inverted) - void setBrightness(uint8_t, bool forceNormal = true); + void setContrast(uint8_t contrast, uint8_t precharge = 241, uint8_t comdetect = 64); + + // Convenience method to access setContrast with only brightness parameter + void setBrightness(uint8_t); // Reset display rotation or mirroring void resetOrientation();