@@ -38,17 +38,20 @@ class SH1106Spi : public OLEDDisplay {
38
38
private:
39
39
uint8_t _rst;
40
40
uint8_t _dc;
41
+ uint8_t _cs;
41
42
42
43
public:
43
44
SH1106Spi (uint8_t _rst, uint8_t _dc, uint8_t _cs, OLEDDISPLAY_GEOMETRY g = GEOMETRY_128_64) {
44
45
setGeometry (g);
45
46
46
47
this ->_rst = _rst;
47
48
this ->_dc = _dc;
49
+ this ->_cs = _cs;
48
50
}
49
51
50
52
bool connect (){
51
53
pinMode (_dc, OUTPUT);
54
+ pinMode (_cs, OUTPUT);
52
55
pinMode (_rst, OUTPUT);
53
56
54
57
SPI.begin ();
@@ -102,21 +105,27 @@ class SH1106Spi : public OLEDDisplay {
102
105
sendCommand (0xB0 + y);
103
106
sendCommand (minBoundXp2H);
104
107
sendCommand (minBoundXp2L);
108
+ digitalWrite (_cs, HIGH);
105
109
digitalWrite (_dc, HIGH); // data mode
110
+ digitalWrite (_cs, LOW);
106
111
for (x = minBoundX; x <= maxBoundX; x++) {
107
112
SPI.transfer (buffer[x + y * displayWidth]);
108
113
}
114
+ digitalWrite (_cs, HIGH);
109
115
yield ();
110
116
}
111
117
#else
112
118
for (uint8_t y=0 ; y<displayHeight/8 ; y++) {
113
119
sendCommand (0xB0 + y);
114
120
sendCommand (0x02 );
115
121
sendCommand (0x10 );
122
+ digitalWrite (_cs, HIGH);
116
123
digitalWrite (_dc, HIGH); // data mode
124
+ digitalWrite (_cs, LOW);
117
125
for ( uint8_t x=0 ; x < displayWidth; x++) {
118
126
SPI.transfer (buffer[x + y * displayWidth]);
119
127
}
128
+ digitalWrite (_cs, HIGH);
120
129
yield ();
121
130
}
122
131
#endif
@@ -127,8 +136,11 @@ class SH1106Spi : public OLEDDisplay {
127
136
return 0 ;
128
137
}
129
138
inline void sendCommand (uint8_t com) __attribute__((always_inline)){
139
+ digitalWrite (_cs, HIGH);
130
140
digitalWrite (_dc, LOW);
141
+ digitalWrite (_cs, LOW);
131
142
SPI.transfer (com);
143
+ digitalWrite (_cs, HIGH);
132
144
}
133
145
};
134
146
0 commit comments