@@ -41,6 +41,7 @@ class SH1106Spi : public OLEDDisplay {
4141 uint8_t _cs;
4242
4343 public:
44+ /* pass _cs as -1 to indicate "do not use CS pin", for cases where it is hard wired low */
4445 SH1106Spi (uint8_t _rst, uint8_t _dc, uint8_t _cs, OLEDDISPLAY_GEOMETRY g = GEOMETRY_128_64) {
4546 setGeometry (g);
4647
@@ -51,7 +52,9 @@ class SH1106Spi : public OLEDDisplay {
5152
5253 bool connect (){
5354 pinMode (_dc, OUTPUT);
54- pinMode (_cs, OUTPUT);
55+ if (_cs != (uint8_t ) -1 ) {
56+ pinMode (_cs, OUTPUT);
57+ }
5558 pinMode (_rst, OUTPUT);
5659
5760 SPI.begin ();
@@ -105,27 +108,27 @@ class SH1106Spi : public OLEDDisplay {
105108 sendCommand (0xB0 + y);
106109 sendCommand (minBoundXp2H);
107110 sendCommand (minBoundXp2L);
108- digitalWrite (_cs, HIGH);
111+ set_CS ( HIGH);
109112 digitalWrite (_dc, HIGH); // data mode
110- digitalWrite (_cs, LOW);
113+ set_CS ( LOW);
111114 for (x = minBoundX; x <= maxBoundX; x++) {
112115 SPI.transfer (buffer[x + y * displayWidth]);
113116 }
114- digitalWrite (_cs, HIGH);
117+ set_CS ( HIGH);
115118 yield ();
116119 }
117120 #else
118121 for (uint8_t y=0 ; y<displayHeight/8 ; y++) {
119122 sendCommand (0xB0 + y);
120123 sendCommand (0x02 );
121124 sendCommand (0x10 );
122- digitalWrite (_cs, HIGH);
125+ set_CS ( HIGH);
123126 digitalWrite (_dc, HIGH); // data mode
124- digitalWrite (_cs, LOW);
127+ set_CS ( LOW);
125128 for ( uint8_t x=0 ; x < displayWidth; x++) {
126129 SPI.transfer (buffer[x + y * displayWidth]);
127130 }
128- digitalWrite (_cs, HIGH);
131+ set_CS ( HIGH);
129132 yield ();
130133 }
131134 #endif
@@ -135,12 +138,17 @@ class SH1106Spi : public OLEDDisplay {
135138 int getBufferOffset (void ) {
136139 return 0 ;
137140 }
141+ inline void set_CS (bool level) {
142+ if (_cs != (uint8_t ) -1 ) {
143+ digitalWrite (_cs, level);
144+ }
145+ };
138146 inline void sendCommand (uint8_t com) __attribute__((always_inline)){
139- digitalWrite (_cs, HIGH);
147+ set_CS ( HIGH);
140148 digitalWrite (_dc, LOW);
141- digitalWrite (_cs, LOW);
149+ set_CS ( LOW);
142150 SPI.transfer (com);
143- digitalWrite (_cs, HIGH);
151+ set_CS ( HIGH);
144152 }
145153};
146154
0 commit comments