olikraus 9 ani în urmă
părinte
comite
bfbf9d0f0b

+ 1 - 1
examples/page_buffer/U8g2Logo/U8g2Logo.ino

@@ -242,6 +242,6 @@ void loop(void) {
     drawLogo();
     drawURL();
   } while ( u8g2.nextPage() );
-  //delay(1000);
+  delay(4000);
 }
 

+ 1 - 1
examples/u8x8/HelloWorld/HelloWorld.ino

@@ -112,7 +112,7 @@
 //U8X8_UC1611_EA_DOGXL240_2ND_HW_I2C u8x8(/* reset=*/ 8);	// Due, 2nd I2C, DOGXL240 Test Board
 //U8X8_UC1611_EA_DOGXL240_4W_SW_SPI u8x8(/* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);  // SW SPI, Due DOGXL240 Test Board
 //U8X8_SSD1606_172X72_4W_SW_SPI u8x8(/* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);	// eInk/ePaper Display
-U8X8_SSD1607_200X200_4W_SW_SPI u8x8(/* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);	// eInk/ePaper Display
+//U8X8_SSD1607_200X200_4W_SW_SPI u8x8(/* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);	// eInk/ePaper Display
 
 // End of constructor list
 

+ 1 - 1
library.properties

@@ -1,5 +1,5 @@
 name=U8g2
-version=2.13.3
+version=2.13.4
 author=oliver <olikraus@gmail.com>
 maintainer=oliver <olikraus@gmail.com>
 sentence=Monochrome LCD, OLED and eInk Library. Display controller: SSD1305, SSD1306, SSD1309, SSD1322, SSD1325, SSD1327, SSD1606, SSD1607, SH1106, T6963, RA8835, LC7981, PCD8544, PCF8812, UC1604, UC1608, UC1610, UC1611, UC1701, ST7565, ST7567, NT7534, IST3020, ST7920, LD7032, KS0108. Interfaces: I2C, SPI, Parallel.

+ 108 - 108
src/U8g2lib.h

@@ -385,9 +385,9 @@ class U8G2_SSD1305_128X32_NONAME_1_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SSD1305_128X32_NONAME_1_HW_I2C : public U8G2 {
-  public: U8G2_SSD1305_128X32_NONAME_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SSD1305_128X32_NONAME_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ssd1305_i2c_128x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SSD1305_128X32_NONAME_1_2ND_HW_I2C : public U8G2 {
@@ -403,9 +403,9 @@ class U8G2_SSD1305_128X32_NONAME_2_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SSD1305_128X32_NONAME_2_HW_I2C : public U8G2 {
-  public: U8G2_SSD1305_128X32_NONAME_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SSD1305_128X32_NONAME_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ssd1305_i2c_128x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SSD1305_128X32_NONAME_2_2ND_HW_I2C : public U8G2 {
@@ -421,9 +421,9 @@ class U8G2_SSD1305_128X32_NONAME_F_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SSD1305_128X32_NONAME_F_HW_I2C : public U8G2 {
-  public: U8G2_SSD1305_128X32_NONAME_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SSD1305_128X32_NONAME_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ssd1305_i2c_128x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SSD1305_128X32_NONAME_F_2ND_HW_I2C : public U8G2 {
@@ -619,9 +619,9 @@ class U8G2_SSD1306_128X64_NONAME_1_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SSD1306_128X64_NONAME_1_HW_I2C : public U8G2 {
-  public: U8G2_SSD1306_128X64_NONAME_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SSD1306_128X64_NONAME_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ssd1306_i2c_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SSD1306_128X64_NONAME_1_2ND_HW_I2C : public U8G2 {
@@ -637,9 +637,9 @@ class U8G2_SSD1306_128X64_VCOMH0_1_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SSD1306_128X64_VCOMH0_1_HW_I2C : public U8G2 {
-  public: U8G2_SSD1306_128X64_VCOMH0_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SSD1306_128X64_VCOMH0_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ssd1306_i2c_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SSD1306_128X64_VCOMH0_1_2ND_HW_I2C : public U8G2 {
@@ -655,9 +655,9 @@ class U8G2_SSD1306_128X64_NONAME_2_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SSD1306_128X64_NONAME_2_HW_I2C : public U8G2 {
-  public: U8G2_SSD1306_128X64_NONAME_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SSD1306_128X64_NONAME_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ssd1306_i2c_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SSD1306_128X64_NONAME_2_2ND_HW_I2C : public U8G2 {
@@ -673,9 +673,9 @@ class U8G2_SSD1306_128X64_VCOMH0_2_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SSD1306_128X64_VCOMH0_2_HW_I2C : public U8G2 {
-  public: U8G2_SSD1306_128X64_VCOMH0_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SSD1306_128X64_VCOMH0_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ssd1306_i2c_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SSD1306_128X64_VCOMH0_2_2ND_HW_I2C : public U8G2 {
@@ -691,9 +691,9 @@ class U8G2_SSD1306_128X64_NONAME_F_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SSD1306_128X64_NONAME_F_HW_I2C : public U8G2 {
-  public: U8G2_SSD1306_128X64_NONAME_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SSD1306_128X64_NONAME_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ssd1306_i2c_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SSD1306_128X64_NONAME_F_2ND_HW_I2C : public U8G2 {
@@ -709,9 +709,9 @@ class U8G2_SSD1306_128X64_VCOMH0_F_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SSD1306_128X64_VCOMH0_F_HW_I2C : public U8G2 {
-  public: U8G2_SSD1306_128X64_VCOMH0_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SSD1306_128X64_VCOMH0_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ssd1306_i2c_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SSD1306_128X64_VCOMH0_F_2ND_HW_I2C : public U8G2 {
@@ -907,9 +907,9 @@ class U8G2_SH1106_128X64_NONAME_1_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SH1106_128X64_NONAME_1_HW_I2C : public U8G2 {
-  public: U8G2_SH1106_128X64_NONAME_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SH1106_128X64_NONAME_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_sh1106_i2c_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SH1106_128X64_NONAME_1_2ND_HW_I2C : public U8G2 {
@@ -925,9 +925,9 @@ class U8G2_SH1106_128X64_VCOMH0_1_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SH1106_128X64_VCOMH0_1_HW_I2C : public U8G2 {
-  public: U8G2_SH1106_128X64_VCOMH0_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SH1106_128X64_VCOMH0_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_sh1106_i2c_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SH1106_128X64_VCOMH0_1_2ND_HW_I2C : public U8G2 {
@@ -943,9 +943,9 @@ class U8G2_SH1106_128X64_NONAME_2_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SH1106_128X64_NONAME_2_HW_I2C : public U8G2 {
-  public: U8G2_SH1106_128X64_NONAME_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SH1106_128X64_NONAME_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_sh1106_i2c_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SH1106_128X64_NONAME_2_2ND_HW_I2C : public U8G2 {
@@ -961,9 +961,9 @@ class U8G2_SH1106_128X64_VCOMH0_2_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SH1106_128X64_VCOMH0_2_HW_I2C : public U8G2 {
-  public: U8G2_SH1106_128X64_VCOMH0_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SH1106_128X64_VCOMH0_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_sh1106_i2c_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SH1106_128X64_VCOMH0_2_2ND_HW_I2C : public U8G2 {
@@ -979,9 +979,9 @@ class U8G2_SH1106_128X64_NONAME_F_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SH1106_128X64_NONAME_F_HW_I2C : public U8G2 {
-  public: U8G2_SH1106_128X64_NONAME_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SH1106_128X64_NONAME_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_sh1106_i2c_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SH1106_128X64_NONAME_F_2ND_HW_I2C : public U8G2 {
@@ -997,9 +997,9 @@ class U8G2_SH1106_128X64_VCOMH0_F_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SH1106_128X64_VCOMH0_F_HW_I2C : public U8G2 {
-  public: U8G2_SH1106_128X64_VCOMH0_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SH1106_128X64_VCOMH0_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_sh1106_i2c_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SH1106_128X64_VCOMH0_F_2ND_HW_I2C : public U8G2 {
@@ -1105,9 +1105,9 @@ class U8G2_SSD1306_128X32_UNIVISION_1_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SSD1306_128X32_UNIVISION_1_HW_I2C : public U8G2 {
-  public: U8G2_SSD1306_128X32_UNIVISION_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SSD1306_128X32_UNIVISION_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ssd1306_i2c_128x32_univision_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SSD1306_128X32_UNIVISION_1_2ND_HW_I2C : public U8G2 {
@@ -1123,9 +1123,9 @@ class U8G2_SSD1306_128X32_UNIVISION_2_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SSD1306_128X32_UNIVISION_2_HW_I2C : public U8G2 {
-  public: U8G2_SSD1306_128X32_UNIVISION_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SSD1306_128X32_UNIVISION_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ssd1306_i2c_128x32_univision_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SSD1306_128X32_UNIVISION_2_2ND_HW_I2C : public U8G2 {
@@ -1141,9 +1141,9 @@ class U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C : public U8G2 {
-  public: U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ssd1306_i2c_128x32_univision_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SSD1306_128X32_UNIVISION_F_2ND_HW_I2C : public U8G2 {
@@ -1249,9 +1249,9 @@ class U8G2_SSD1306_64X48_ER_1_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SSD1306_64X48_ER_1_HW_I2C : public U8G2 {
-  public: U8G2_SSD1306_64X48_ER_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SSD1306_64X48_ER_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ssd1306_i2c_64x48_er_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SSD1306_64X48_ER_1_2ND_HW_I2C : public U8G2 {
@@ -1267,9 +1267,9 @@ class U8G2_SSD1306_64X48_ER_2_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SSD1306_64X48_ER_2_HW_I2C : public U8G2 {
-  public: U8G2_SSD1306_64X48_ER_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SSD1306_64X48_ER_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ssd1306_i2c_64x48_er_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SSD1306_64X48_ER_2_2ND_HW_I2C : public U8G2 {
@@ -1285,9 +1285,9 @@ class U8G2_SSD1306_64X48_ER_F_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SSD1306_64X48_ER_F_HW_I2C : public U8G2 {
-  public: U8G2_SSD1306_64X48_ER_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SSD1306_64X48_ER_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ssd1306_i2c_64x48_er_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SSD1306_64X48_ER_F_2ND_HW_I2C : public U8G2 {
@@ -1375,9 +1375,9 @@ class U8G2_SSD1309_128X64_NONAME_1_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SSD1309_128X64_NONAME_1_HW_I2C : public U8G2 {
-  public: U8G2_SSD1309_128X64_NONAME_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SSD1309_128X64_NONAME_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ssd1309_i2c_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SSD1309_128X64_NONAME_1_2ND_HW_I2C : public U8G2 {
@@ -1393,9 +1393,9 @@ class U8G2_SSD1309_128X64_NONAME_2_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SSD1309_128X64_NONAME_2_HW_I2C : public U8G2 {
-  public: U8G2_SSD1309_128X64_NONAME_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SSD1309_128X64_NONAME_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ssd1309_i2c_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SSD1309_128X64_NONAME_2_2ND_HW_I2C : public U8G2 {
@@ -1411,9 +1411,9 @@ class U8G2_SSD1309_128X64_NONAME_F_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SSD1309_128X64_NONAME_F_HW_I2C : public U8G2 {
-  public: U8G2_SSD1309_128X64_NONAME_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SSD1309_128X64_NONAME_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ssd1309_i2c_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SSD1309_128X64_NONAME_F_2ND_HW_I2C : public U8G2 {
@@ -1519,9 +1519,9 @@ class U8G2_SSD1325_NHD_128X64_1_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SSD1325_NHD_128X64_1_HW_I2C : public U8G2 {
-  public: U8G2_SSD1325_NHD_128X64_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SSD1325_NHD_128X64_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ssd1325_i2c_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SSD1325_NHD_128X64_1_2ND_HW_I2C : public U8G2 {
@@ -1537,9 +1537,9 @@ class U8G2_SSD1325_NHD_128X64_2_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SSD1325_NHD_128X64_2_HW_I2C : public U8G2 {
-  public: U8G2_SSD1325_NHD_128X64_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SSD1325_NHD_128X64_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ssd1325_i2c_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SSD1325_NHD_128X64_2_2ND_HW_I2C : public U8G2 {
@@ -1555,9 +1555,9 @@ class U8G2_SSD1325_NHD_128X64_F_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SSD1325_NHD_128X64_F_HW_I2C : public U8G2 {
-  public: U8G2_SSD1325_NHD_128X64_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SSD1325_NHD_128X64_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ssd1325_i2c_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SSD1325_NHD_128X64_F_2ND_HW_I2C : public U8G2 {
@@ -1663,9 +1663,9 @@ class U8G2_SSD1327_SEEED_96X96_1_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SSD1327_SEEED_96X96_1_HW_I2C : public U8G2 {
-  public: U8G2_SSD1327_SEEED_96X96_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SSD1327_SEEED_96X96_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ssd1327_i2c_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SSD1327_SEEED_96X96_1_2ND_HW_I2C : public U8G2 {
@@ -1681,9 +1681,9 @@ class U8G2_SSD1327_SEEED_96X96_2_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SSD1327_SEEED_96X96_2_HW_I2C : public U8G2 {
-  public: U8G2_SSD1327_SEEED_96X96_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SSD1327_SEEED_96X96_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ssd1327_i2c_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SSD1327_SEEED_96X96_2_2ND_HW_I2C : public U8G2 {
@@ -1699,9 +1699,9 @@ class U8G2_SSD1327_SEEED_96X96_F_SW_I2C : public U8G2 {
   }
 };
 class U8G2_SSD1327_SEEED_96X96_F_HW_I2C : public U8G2 {
-  public: U8G2_SSD1327_SEEED_96X96_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_SSD1327_SEEED_96X96_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ssd1327_i2c_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_SSD1327_SEEED_96X96_F_2ND_HW_I2C : public U8G2 {
@@ -1753,9 +1753,9 @@ class U8G2_LD7032_60X32_1_SW_I2C : public U8G2 {
   }
 };
 class U8G2_LD7032_60X32_1_HW_I2C : public U8G2 {
-  public: U8G2_LD7032_60X32_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_LD7032_60X32_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ld7032_i2c_60x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_LD7032_60X32_1_2ND_HW_I2C : public U8G2 {
@@ -1771,9 +1771,9 @@ class U8G2_LD7032_60X32_2_SW_I2C : public U8G2 {
   }
 };
 class U8G2_LD7032_60X32_2_HW_I2C : public U8G2 {
-  public: U8G2_LD7032_60X32_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_LD7032_60X32_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ld7032_i2c_60x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_LD7032_60X32_2_2ND_HW_I2C : public U8G2 {
@@ -1789,9 +1789,9 @@ class U8G2_LD7032_60X32_F_SW_I2C : public U8G2 {
   }
 };
 class U8G2_LD7032_60X32_F_HW_I2C : public U8G2 {
-  public: U8G2_LD7032_60X32_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_LD7032_60X32_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_ld7032_i2c_60x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_LD7032_60X32_F_2ND_HW_I2C : public U8G2 {
@@ -2329,9 +2329,9 @@ class U8G2_UC1604_JLX19264_1_SW_I2C : public U8G2 {
   }
 };
 class U8G2_UC1604_JLX19264_1_HW_I2C : public U8G2 {
-  public: U8G2_UC1604_JLX19264_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_UC1604_JLX19264_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_uc1604_i2c_jlx19264_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_UC1604_JLX19264_1_2ND_HW_I2C : public U8G2 {
@@ -2347,9 +2347,9 @@ class U8G2_UC1604_JLX19264_2_SW_I2C : public U8G2 {
   }
 };
 class U8G2_UC1604_JLX19264_2_HW_I2C : public U8G2 {
-  public: U8G2_UC1604_JLX19264_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_UC1604_JLX19264_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_uc1604_i2c_jlx19264_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_UC1604_JLX19264_2_2ND_HW_I2C : public U8G2 {
@@ -2365,9 +2365,9 @@ class U8G2_UC1604_JLX19264_F_SW_I2C : public U8G2 {
   }
 };
 class U8G2_UC1604_JLX19264_F_HW_I2C : public U8G2 {
-  public: U8G2_UC1604_JLX19264_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_UC1604_JLX19264_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_uc1604_i2c_jlx19264_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_UC1604_JLX19264_F_2ND_HW_I2C : public U8G2 {
@@ -2437,9 +2437,9 @@ class U8G2_UC1608_ERC24064_1_SW_I2C : public U8G2 {
   }
 };
 class U8G2_UC1608_ERC24064_1_HW_I2C : public U8G2 {
-  public: U8G2_UC1608_ERC24064_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_UC1608_ERC24064_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_uc1608_i2c_erc24064_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_UC1608_ERC24064_1_2ND_HW_I2C : public U8G2 {
@@ -2455,9 +2455,9 @@ class U8G2_UC1608_ERC24064_2_SW_I2C : public U8G2 {
   }
 };
 class U8G2_UC1608_ERC24064_2_HW_I2C : public U8G2 {
-  public: U8G2_UC1608_ERC24064_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_UC1608_ERC24064_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_uc1608_i2c_erc24064_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_UC1608_ERC24064_2_2ND_HW_I2C : public U8G2 {
@@ -2473,9 +2473,9 @@ class U8G2_UC1608_ERC24064_F_SW_I2C : public U8G2 {
   }
 };
 class U8G2_UC1608_ERC24064_F_HW_I2C : public U8G2 {
-  public: U8G2_UC1608_ERC24064_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_UC1608_ERC24064_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_uc1608_i2c_erc24064_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_UC1608_ERC24064_F_2ND_HW_I2C : public U8G2 {
@@ -2545,9 +2545,9 @@ class U8G2_UC1608_240X128_1_SW_I2C : public U8G2 {
   }
 };
 class U8G2_UC1608_240X128_1_HW_I2C : public U8G2 {
-  public: U8G2_UC1608_240X128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_UC1608_240X128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_uc1608_i2c_240x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_UC1608_240X128_1_2ND_HW_I2C : public U8G2 {
@@ -2563,9 +2563,9 @@ class U8G2_UC1608_240X128_2_SW_I2C : public U8G2 {
   }
 };
 class U8G2_UC1608_240X128_2_HW_I2C : public U8G2 {
-  public: U8G2_UC1608_240X128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_UC1608_240X128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_uc1608_i2c_240x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_UC1608_240X128_2_2ND_HW_I2C : public U8G2 {
@@ -2581,9 +2581,9 @@ class U8G2_UC1608_240X128_F_SW_I2C : public U8G2 {
   }
 };
 class U8G2_UC1608_240X128_F_HW_I2C : public U8G2 {
-  public: U8G2_UC1608_240X128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_UC1608_240X128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_uc1608_i2c_240x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_UC1608_240X128_F_2ND_HW_I2C : public U8G2 {
@@ -2653,9 +2653,9 @@ class U8G2_UC1610_EA_DOGXL160_1_SW_I2C : public U8G2 {
   }
 };
 class U8G2_UC1610_EA_DOGXL160_1_HW_I2C : public U8G2 {
-  public: U8G2_UC1610_EA_DOGXL160_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_UC1610_EA_DOGXL160_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_uc1610_i2c_ea_dogxl160_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_UC1610_EA_DOGXL160_1_2ND_HW_I2C : public U8G2 {
@@ -2671,9 +2671,9 @@ class U8G2_UC1610_EA_DOGXL160_2_SW_I2C : public U8G2 {
   }
 };
 class U8G2_UC1610_EA_DOGXL160_2_HW_I2C : public U8G2 {
-  public: U8G2_UC1610_EA_DOGXL160_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_UC1610_EA_DOGXL160_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_uc1610_i2c_ea_dogxl160_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_UC1610_EA_DOGXL160_2_2ND_HW_I2C : public U8G2 {
@@ -2689,9 +2689,9 @@ class U8G2_UC1610_EA_DOGXL160_F_SW_I2C : public U8G2 {
   }
 };
 class U8G2_UC1610_EA_DOGXL160_F_HW_I2C : public U8G2 {
-  public: U8G2_UC1610_EA_DOGXL160_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_UC1610_EA_DOGXL160_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_uc1610_i2c_ea_dogxl160_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_UC1610_EA_DOGXL160_F_2ND_HW_I2C : public U8G2 {
@@ -2761,9 +2761,9 @@ class U8G2_UC1611_EA_DOGM240_1_SW_I2C : public U8G2 {
   }
 };
 class U8G2_UC1611_EA_DOGM240_1_HW_I2C : public U8G2 {
-  public: U8G2_UC1611_EA_DOGM240_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_UC1611_EA_DOGM240_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_uc1611_i2c_ea_dogm240_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_UC1611_EA_DOGM240_1_2ND_HW_I2C : public U8G2 {
@@ -2779,9 +2779,9 @@ class U8G2_UC1611_EA_DOGM240_2_SW_I2C : public U8G2 {
   }
 };
 class U8G2_UC1611_EA_DOGM240_2_HW_I2C : public U8G2 {
-  public: U8G2_UC1611_EA_DOGM240_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_UC1611_EA_DOGM240_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_uc1611_i2c_ea_dogm240_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_UC1611_EA_DOGM240_2_2ND_HW_I2C : public U8G2 {
@@ -2797,9 +2797,9 @@ class U8G2_UC1611_EA_DOGM240_F_SW_I2C : public U8G2 {
   }
 };
 class U8G2_UC1611_EA_DOGM240_F_HW_I2C : public U8G2 {
-  public: U8G2_UC1611_EA_DOGM240_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_UC1611_EA_DOGM240_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_uc1611_i2c_ea_dogm240_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_UC1611_EA_DOGM240_F_2ND_HW_I2C : public U8G2 {
@@ -2869,9 +2869,9 @@ class U8G2_UC1611_EA_DOGXL240_1_SW_I2C : public U8G2 {
   }
 };
 class U8G2_UC1611_EA_DOGXL240_1_HW_I2C : public U8G2 {
-  public: U8G2_UC1611_EA_DOGXL240_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_UC1611_EA_DOGXL240_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_uc1611_i2c_ea_dogxl240_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_UC1611_EA_DOGXL240_1_2ND_HW_I2C : public U8G2 {
@@ -2887,9 +2887,9 @@ class U8G2_UC1611_EA_DOGXL240_2_SW_I2C : public U8G2 {
   }
 };
 class U8G2_UC1611_EA_DOGXL240_2_HW_I2C : public U8G2 {
-  public: U8G2_UC1611_EA_DOGXL240_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_UC1611_EA_DOGXL240_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_uc1611_i2c_ea_dogxl240_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_UC1611_EA_DOGXL240_2_2ND_HW_I2C : public U8G2 {
@@ -2905,9 +2905,9 @@ class U8G2_UC1611_EA_DOGXL240_F_SW_I2C : public U8G2 {
   }
 };
 class U8G2_UC1611_EA_DOGXL240_F_HW_I2C : public U8G2 {
-  public: U8G2_UC1611_EA_DOGXL240_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_UC1611_EA_DOGXL240_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_uc1611_i2c_ea_dogxl240_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_UC1611_EA_DOGXL240_F_2ND_HW_I2C : public U8G2 {
@@ -3625,9 +3625,9 @@ class U8G2_ST7588_JLX12864_1_SW_I2C : public U8G2 {
   }
 };
 class U8G2_ST7588_JLX12864_1_HW_I2C : public U8G2 {
-  public: U8G2_ST7588_JLX12864_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_ST7588_JLX12864_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_st7588_i2c_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_ST7588_JLX12864_1_2ND_HW_I2C : public U8G2 {
@@ -3643,9 +3643,9 @@ class U8G2_ST7588_JLX12864_2_SW_I2C : public U8G2 {
   }
 };
 class U8G2_ST7588_JLX12864_2_HW_I2C : public U8G2 {
-  public: U8G2_ST7588_JLX12864_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_ST7588_JLX12864_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_st7588_i2c_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_ST7588_JLX12864_2_2ND_HW_I2C : public U8G2 {
@@ -3661,9 +3661,9 @@ class U8G2_ST7588_JLX12864_F_SW_I2C : public U8G2 {
   }
 };
 class U8G2_ST7588_JLX12864_F_HW_I2C : public U8G2 {
-  public: U8G2_ST7588_JLX12864_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
+  public: U8G2_ST7588_JLX12864_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() {
     u8g2_Setup_st7588_i2c_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8G2_ST7588_JLX12864_F_2ND_HW_I2C : public U8G2 {

+ 17 - 2
src/U8x8lib.cpp

@@ -313,7 +313,7 @@ extern "C" uint8_t u8x8_byte_arduino_4wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uin
       arduino_data_port = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_SPI_DATA]));
       arduino_data_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_SPI_DATA]);
       arduino_data_n_mask = ~arduino_data_mask;
-    
+      
       break;
     case U8X8_MSG_BYTE_END_TRANSFER:
       u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL);
@@ -443,7 +443,20 @@ extern "C" uint8_t u8x8_byte_arduino_hw_i2c(U8X8_UNUSED u8x8_t *u8x8, U8X8_UNUSE
       Wire.write((uint8_t *)arg_ptr, (int)arg_int);
       break;
     case U8X8_MSG_BYTE_INIT:
+#ifdef ESP8266
+      /* for ESP8266, Wire.begin has two more arguments: clock and data */          
+      if ( u8x8->pins[U8X8_PIN_I2C_CLOCK] != U8X8_PIN_NONE && u8x8->pins[U8X8_PIN_I2C_DATA] != U8X8_PIN_NONE )
+      {
+	// second argument for the wire lib is the clock pin. In u8g2, the first argument of the  clock pin in the clock/data pair
+	Wire.begin(u8x8->pins[U8X8_PIN_I2C_DATA] , u8x8->pins[U8X8_PIN_I2C_CLOCK]);
+      }
+      else
+      {
+	Wire.begin();
+      }
+#else
       Wire.begin();
+#endif
       break;
     case U8X8_MSG_BYTE_SET_DC:
       break;
@@ -866,9 +879,11 @@ void u8x8_Setup_SSD13xx_SW_I2C(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t clo
 }
 #endif /* obsolete com specific setup */
 
-void u8x8_SetPin_HW_I2C(u8x8_t *u8x8, uint8_t reset)
+void u8x8_SetPin_HW_I2C(u8x8_t *u8x8, uint8_t reset, uint8_t clock, uint8_t data)
 {
   u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset);
+  u8x8_SetPin(u8x8, U8X8_PIN_I2C_CLOCK, clock);
+  u8x8_SetPin(u8x8, U8X8_PIN_I2C_DATA, data);
 }
 
 void u8x8_SetPin_8Bit_6800(u8x8_t *u8x8, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset)

+ 37 - 37
src/U8x8lib.h

@@ -99,7 +99,7 @@ void u8x8_SetPin_3Wire_SW_SPI(u8x8_t *u8x8, uint8_t clock, uint8_t data, uint8_t
 void u8x8_SetPin_4Wire_HW_SPI(u8x8_t *u8x8, uint8_t cs, uint8_t dc, uint8_t reset);
 void u8x8_SetPin_ST7920_HW_SPI(u8x8_t *u8x8, uint8_t cs, uint8_t reset);
 void u8x8_SetPin_SW_I2C(u8x8_t *u8x8, uint8_t clock, uint8_t data, uint8_t reset);
-void u8x8_SetPin_HW_I2C(u8x8_t *u8x8, uint8_t reset);
+void u8x8_SetPin_HW_I2C(u8x8_t *u8x8, uint8_t reset, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE);
 void u8x8_SetPin_8Bit_6800(u8x8_t *u8x8, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset);
 void u8x8_SetPin_8Bit_8080(u8x8_t *u8x8, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t wr, uint8_t cs, uint8_t dc, uint8_t reset);
 void u8x8_SetPin_KS0108(u8x8_t *u8x8, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset);
@@ -281,9 +281,9 @@ class U8X8_SSD1305_128X32_NONAME_SW_I2C : public U8X8 {
   }
 };
 class U8X8_SSD1305_128X32_NONAME_HW_I2C : public U8X8 {
-  public: U8X8_SSD1305_128X32_NONAME_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() {
+  public: U8X8_SSD1305_128X32_NONAME_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() {
     u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_noname, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8X8_SSD1305_128X32_NONAME_2ND_HW_I2C : public U8X8 {
@@ -359,9 +359,9 @@ class U8X8_SSD1306_128X64_NONAME_SW_I2C : public U8X8 {
   }
 };
 class U8X8_SSD1306_128X64_NONAME_HW_I2C : public U8X8 {
-  public: U8X8_SSD1306_128X64_NONAME_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() {
+  public: U8X8_SSD1306_128X64_NONAME_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() {
     u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_noname, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8X8_SSD1306_128X64_NONAME_2ND_HW_I2C : public U8X8 {
@@ -377,9 +377,9 @@ class U8X8_SSD1306_128X64_VCOMH0_SW_I2C : public U8X8 {
   }
 };
 class U8X8_SSD1306_128X64_VCOMH0_HW_I2C : public U8X8 {
-  public: U8X8_SSD1306_128X64_VCOMH0_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() {
+  public: U8X8_SSD1306_128X64_VCOMH0_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() {
     u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8X8_SSD1306_128X64_VCOMH0_2ND_HW_I2C : public U8X8 {
@@ -455,9 +455,9 @@ class U8X8_SH1106_128X64_NONAME_SW_I2C : public U8X8 {
   }
 };
 class U8X8_SH1106_128X64_NONAME_HW_I2C : public U8X8 {
-  public: U8X8_SH1106_128X64_NONAME_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() {
+  public: U8X8_SH1106_128X64_NONAME_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() {
     u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_noname, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8X8_SH1106_128X64_NONAME_2ND_HW_I2C : public U8X8 {
@@ -473,9 +473,9 @@ class U8X8_SH1106_128X64_VCOMH0_SW_I2C : public U8X8 {
   }
 };
 class U8X8_SH1106_128X64_VCOMH0_HW_I2C : public U8X8 {
-  public: U8X8_SH1106_128X64_VCOMH0_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() {
+  public: U8X8_SH1106_128X64_VCOMH0_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() {
     u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8X8_SH1106_128X64_VCOMH0_2ND_HW_I2C : public U8X8 {
@@ -521,9 +521,9 @@ class U8X8_SSD1306_128X32_UNIVISION_SW_I2C : public U8X8 {
   }
 };
 class U8X8_SSD1306_128X32_UNIVISION_HW_I2C : public U8X8 {
-  public: U8X8_SSD1306_128X32_UNIVISION_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() {
+  public: U8X8_SSD1306_128X32_UNIVISION_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() {
     u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_univision, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8X8_SSD1306_128X32_UNIVISION_2ND_HW_I2C : public U8X8 {
@@ -569,9 +569,9 @@ class U8X8_SSD1306_64X48_ER_SW_I2C : public U8X8 {
   }
 };
 class U8X8_SSD1306_64X48_ER_HW_I2C : public U8X8 {
-  public: U8X8_SSD1306_64X48_ER_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() {
+  public: U8X8_SSD1306_64X48_ER_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() {
     u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x48_er, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8X8_SSD1306_64X48_ER_2ND_HW_I2C : public U8X8 {
@@ -611,9 +611,9 @@ class U8X8_SSD1309_128X64_NONAME_SW_I2C : public U8X8 {
   }
 };
 class U8X8_SSD1309_128X64_NONAME_HW_I2C : public U8X8 {
-  public: U8X8_SSD1309_128X64_NONAME_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() {
+  public: U8X8_SSD1309_128X64_NONAME_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() {
     u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8X8_SSD1309_128X64_NONAME_2ND_HW_I2C : public U8X8 {
@@ -659,9 +659,9 @@ class U8X8_SSD1325_NHD_128X64_SW_I2C : public U8X8 {
   }
 };
 class U8X8_SSD1325_NHD_128X64_HW_I2C : public U8X8 {
-  public: U8X8_SSD1325_NHD_128X64_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() {
+  public: U8X8_SSD1325_NHD_128X64_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() {
     u8x8_Setup(getU8x8(), u8x8_d_ssd1325_nhd_128x64, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8X8_SSD1325_NHD_128X64_2ND_HW_I2C : public U8X8 {
@@ -707,9 +707,9 @@ class U8X8_SSD1327_SEEED_96X96_SW_I2C : public U8X8 {
   }
 };
 class U8X8_SSD1327_SEEED_96X96_HW_I2C : public U8X8 {
-  public: U8X8_SSD1327_SEEED_96X96_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() {
+  public: U8X8_SSD1327_SEEED_96X96_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() {
     u8x8_Setup(getU8x8(), u8x8_d_ssd1327_seeed_96x96, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8X8_SSD1327_SEEED_96X96_2ND_HW_I2C : public U8X8 {
@@ -737,9 +737,9 @@ class U8X8_LD7032_60X32_SW_I2C : public U8X8 {
   }
 };
 class U8X8_LD7032_60X32_HW_I2C : public U8X8 {
-  public: U8X8_LD7032_60X32_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() {
+  public: U8X8_LD7032_60X32_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() {
     u8x8_Setup(getU8x8(), u8x8_d_ld7032_60x32, u8x8_cad_ld7032_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8X8_LD7032_60X32_2ND_HW_I2C : public U8X8 {
@@ -929,9 +929,9 @@ class U8X8_UC1604_JLX19264_SW_I2C : public U8X8 {
   }
 };
 class U8X8_UC1604_JLX19264_HW_I2C : public U8X8 {
-  public: U8X8_UC1604_JLX19264_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() {
+  public: U8X8_UC1604_JLX19264_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() {
     u8x8_Setup(getU8x8(), u8x8_d_uc1604_jlx19264, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8X8_UC1604_JLX19264_2ND_HW_I2C : public U8X8 {
@@ -965,9 +965,9 @@ class U8X8_UC1608_ERC24064_SW_I2C : public U8X8 {
   }
 };
 class U8X8_UC1608_ERC24064_HW_I2C : public U8X8 {
-  public: U8X8_UC1608_ERC24064_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() {
+  public: U8X8_UC1608_ERC24064_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() {
     u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc24064, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8X8_UC1608_ERC24064_2ND_HW_I2C : public U8X8 {
@@ -1001,9 +1001,9 @@ class U8X8_UC1608_240X128_SW_I2C : public U8X8 {
   }
 };
 class U8X8_UC1608_240X128_HW_I2C : public U8X8 {
-  public: U8X8_UC1608_240X128_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() {
+  public: U8X8_UC1608_240X128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() {
     u8x8_Setup(getU8x8(), u8x8_d_uc1608_240x128, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8X8_UC1608_240X128_2ND_HW_I2C : public U8X8 {
@@ -1037,9 +1037,9 @@ class U8X8_UC1610_EA_DOGXL160_SW_I2C : public U8X8 {
   }
 };
 class U8X8_UC1610_EA_DOGXL160_HW_I2C : public U8X8 {
-  public: U8X8_UC1610_EA_DOGXL160_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() {
+  public: U8X8_UC1610_EA_DOGXL160_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() {
     u8x8_Setup(getU8x8(), u8x8_d_uc1610_ea_dogxl160, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8X8_UC1610_EA_DOGXL160_2ND_HW_I2C : public U8X8 {
@@ -1073,9 +1073,9 @@ class U8X8_UC1611_EA_DOGM240_SW_I2C : public U8X8 {
   }
 };
 class U8X8_UC1611_EA_DOGM240_HW_I2C : public U8X8 {
-  public: U8X8_UC1611_EA_DOGM240_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() {
+  public: U8X8_UC1611_EA_DOGM240_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() {
     u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogm240, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8X8_UC1611_EA_DOGM240_2ND_HW_I2C : public U8X8 {
@@ -1109,9 +1109,9 @@ class U8X8_UC1611_EA_DOGXL240_SW_I2C : public U8X8 {
   }
 };
 class U8X8_UC1611_EA_DOGXL240_HW_I2C : public U8X8 {
-  public: U8X8_UC1611_EA_DOGXL240_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() {
+  public: U8X8_UC1611_EA_DOGXL240_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() {
     u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogxl240, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8X8_UC1611_EA_DOGXL240_2ND_HW_I2C : public U8X8 {
@@ -1361,9 +1361,9 @@ class U8X8_ST7588_JLX12864_SW_I2C : public U8X8 {
   }
 };
 class U8X8_ST7588_JLX12864_HW_I2C : public U8X8 {
-  public: U8X8_ST7588_JLX12864_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() {
+  public: U8X8_ST7588_JLX12864_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() {
     u8x8_Setup(getU8x8(), u8x8_d_st7588_jlx12864, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
-    u8x8_SetPin_HW_I2C(getU8x8(), reset);
+    u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
   }
 };
 class U8X8_ST7588_JLX12864_2ND_HW_I2C : public U8X8 {

+ 1 - 1
src/clib/u8x8.h

@@ -607,7 +607,7 @@ uint8_t u8x8_byte_3wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void
 /* uint8_t u8x8_byte_st7920_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); */
 void u8x8_byte_set_ks0108_cs(u8x8_t *u8x8, uint8_t arg) U8X8_NOINLINE;
 uint8_t u8x8_byte_ks0108(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
-uint8_t u8x8_byte_ssd13xx_sw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
+uint8_t u8x8_byte_ssd13xx_sw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);  /* OBSOLETE! */
 uint8_t u8x8_byte_sw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
 
 

+ 28 - 22
src/clib/u8x8_d_ssd1607_200x200.c

@@ -151,30 +151,30 @@ static const uint8_t u8x8_d_ssd1607_200x200_init_seq[] = {
   U8X8_A(L(0,0,0,0)), // 0x00
   U8X8_A(L(0,0,0,0)), // 0x00
 
+
   /* orginal values without 0-0 and 1-1 transition */
   /*
-  U8X8_A(L(0,0,0,0)), // 0x02
-  U8X8_A(L(0,0,0,0)), // 0x02
-  U8X8_A(L(0,0,0,0)), // 0x01
-  U8X8_A(L(0,1,0,0)), // 0x11
-  U8X8_A(L(0,1,0,0)), // 0x12
-  U8X8_A(L(0,1,0,0)), // 0x12
-  U8X8_A(L(0,2,0,0)), // 0x22
-  U8X8_A(L(0,2,0,0)), // 0x22
-  U8X8_A(L(0,2,1,0)), // 0x66
-  U8X8_A(L(0,2,2,0)), // 0x69
-  U8X8_A(L(0,2,2,0)), // 0x69
-  U8X8_A(L(0,1,2,0)), // 0x59
-  U8X8_A(L(0,1,2,0)), // 0x58
-  U8X8_A(L(0,1,2,0)), // 0x99
-  U8X8_A(L(0,1,2,0)), // 0x99
-  U8X8_A(L(0,0,2,0)), // 0x88
-  U8X8_A(L(0,0,0,0)), // 0x00
-  U8X8_A(L(0,0,0,0)), // 0x00
-  U8X8_A(L(0,0,0,0)), // 0x00
-  U8X8_A(L(0,0,0,0)), // 0x00
+  U8X8_A(L(3,0,0,3)), // 0x02
+  U8X8_A(L(3,0,0,3)), // 0x02
+  U8X8_A(L(3,0,0,3)), // 0x01
+  U8X8_A(L(3,1,0,3)), // 0x11
+  U8X8_A(L(3,1,0,3)), // 0x12
+  U8X8_A(L(3,1,0,3)), // 0x12
+  U8X8_A(L(3,2,0,3)), // 0x22
+  U8X8_A(L(3,2,0,3)), // 0x22
+  U8X8_A(L(3,2,1,3)), // 0x66
+  U8X8_A(L(3,2,2,3)), // 0x69
+  U8X8_A(L(3,2,2,3)), // 0x69
+  U8X8_A(L(3,1,2,3)), // 0x59
+  U8X8_A(L(3,1,2,3)), // 0x58
+  U8X8_A(L(3,1,2,3)), // 0x99
+  U8X8_A(L(3,1,2,3)), // 0x99
+  U8X8_A(L(3,0,2,3)), // 0x88
+  U8X8_A(L(3,0,0,3)), // 0x00
+  U8X8_A(L(3,0,0,3)), // 0x00
+  U8X8_A(L(3,0,0,3)), // 0x00
+  U8X8_A(L(3,0,0,3)), // 0x00
   */
-
   
   
   /* Timing part of the LUT, 20 Phases with 4 bit each: 10 bytes */
@@ -211,9 +211,12 @@ static const uint8_t u8x8_d_ssd1607_to_display_seq[] = {
   U8X8_DLY(250),
   U8X8_DLY(250),
   U8X8_DLY(250),
+  U8X8_DLY(250),
+  U8X8_DLY(250),
   
   U8X8_CA(0x22, 0x03),	/* disable clock and charge pump */
-  U8X8_DLY(200),		/*  */
+  U8X8_DLY(250),
+  U8X8_DLY(250),
   U8X8_DLY(100),  
   
   U8X8_END_TRANSFER(),             	/* disable chip */
@@ -336,6 +339,8 @@ static uint8_t u8x8_d_ssd1607_200x200_generic(u8x8_t *u8x8, uint8_t msg, uint8_t
       u8x8_d_helper_display_init(u8x8);
       u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_init_seq);    
     
+#ifdef NOT_USED
+      /* STRATEGY FOR SSD1606 */
       /* special code for the SSD1606... */
       /* ensure that the initial buffer is clear and all eInk is set to white */
       /* this is done here, because the LUT will be of that kind, that it uses the previous color */
@@ -351,6 +356,7 @@ static uint8_t u8x8_d_ssd1607_200x200_generic(u8x8_t *u8x8, uint8_t msg, uint8_t
       u8x8_ClearDisplay(u8x8);		
       /* write content to the display */
       u8x8_RefreshDisplay(u8x8);
+#endif
 
       u8x8_ClearDisplay(u8x8);		
       /* write content to the display */