From bd677fcb52bb3296683d1ab29a9f23b6fed4c566 Mon Sep 17 00:00:00 2001
From: Daniel Eichhorn <dani.eichhorn@squix.ch>
Date: Wed, 21 Mar 2018 11:38:20 +0100
Subject: [PATCH] Add setBrightness as convenience method

---
 OLEDDisplay.cpp | 18 ++++++++++++++++++
 OLEDDisplay.h   |  3 +++
 README.md       |  7 ++++++-
 3 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/OLEDDisplay.cpp b/OLEDDisplay.cpp
index 71c4189..2c0c72a 100644
--- a/OLEDDisplay.cpp
+++ b/OLEDDisplay.cpp
@@ -578,6 +578,24 @@ void OLEDDisplay::setContrast(uint8_t contrast, uint8_t precharge, uint8_t comde
   sendCommand(DISPLAYON);
 }
 
+void OLEDDisplay::setBrightness(uint8_t brightness) {
+  uint8_t contrast = brightness;
+  if (brightness < 128) {
+    // Magic values to get a smooth/ step-free transition
+    contrast = brightness * 1.171;
+  } else {
+    contrast = brightness * 1.171 - 43;
+  }
+
+  uint8_t precharge = 241;
+  if (brightness == 0) {
+    precharge = 0;
+  }
+  uint8_t comdetect = brightness / 8;
+
+  setContrast(contrast, precharge, comdetect);
+}
+
 void OLEDDisplay::resetOrientation() {
   sendCommand(SEGREMAP);
   sendCommand(COMSCANINC);           //Reset screen rotation or mirroring
diff --git a/OLEDDisplay.h b/OLEDDisplay.h
index 75f0ee1..ddf80bd 100644
--- a/OLEDDisplay.h
+++ b/OLEDDisplay.h
@@ -222,6 +222,9 @@ class OLEDDisplay : public Print {
     // 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);
+
     // Reset display rotation or mirroring
     void resetOrientation();
 
diff --git a/README.md b/README.md
index 3809ddc..d7db5ef 100644
--- a/README.md
+++ b/README.md
@@ -141,7 +141,12 @@ void invertDisplay(void);
 void normalDisplay(void);
 
 // Set display contrast
-void setContrast(uint8_t 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);
 
 // Turn the display upside down
 void flipScreenVertically();
-- 
GitLab