Heavily documented control library for the uOLED-96-G1 (SGC) by 4D Systems. Will likely work with any of the 4D Systems serial controlled screens. <<info>> All examples in the documentation have been tested to the best of my current abilities, but there are a few functions that I simply do not use. I have created a Lighthouse page for this library. You may submit bug reports or feature requests to [[http://mbed-uoled.lighthouseapp.com|this page]]. If you really do not wish to sign up for a Lighthouse account you may also post any bugs or requests [[/users/Nakor/notebook/uoled-bug-reports/|here]]. <</info>>
Dependents: DS18B20 DS18B20GSM Astromed Astromed_build20121123
uOLED.cpp
00001 #include "uOLED.h" 00002 #include "mbed.h" 00003 00004 00005 #define OLED_INITDELAYMS 1200 00006 00007 #define OLED_ACK 0x06 // Ok 00008 #define OLED_NAK 0x15 // Error 00009 //uOLED *pSGC; 00010 00011 00012 00013 uOLED::uOLED(PinName serialTX, PinName serialRX, PinName reset) : 00014 _oled(serialTX, serialRX), 00015 _reset(reset) { 00016 00017 _oled.baud(230400); 00018 00019 //friend class uOLED_watch; 00020 } 00021 00022 /******************/ 00023 /* Protected */ 00024 /******************/ 00025 void uOLED::resetDisplay() { 00026 _reset = 0; 00027 wait_ms(20); 00028 _reset = 1; 00029 wait_ms(20); 00030 } 00031 00032 00033 00034 00035 /******************/ 00036 /* Public */ 00037 /******************/ 00038 short uOLED::getRGB(char red, char green, char blue) { 00039 int outR = ((red * 31) / 255); 00040 int outG = ((green * 63) / 255); 00041 int outB = ((blue * 31) / 255); 00042 00043 return (outR << 11) | (outG << 5) | outB; 00044 } 00045 00046 bool uOLED::addBitmappedCharacter(char character, char data[8]) { 00047 _oled.putc(0x41); 00048 _oled.putc(character); 00049 for (int i=0; i<8; i++) _oled.putc(data[i]); 00050 return (_oled.getc() == OLED_ACK); 00051 } 00052 00053 bool uOLED::blockCopyPaste(char sourceX, char sourceY, char destinationX, char destinationY, char width, char height) { 00054 _oled.putc(0x63); 00055 _oled.putc(sourceX); 00056 _oled.putc(sourceY); 00057 _oled.putc(destinationX); 00058 _oled.putc(destinationY); 00059 _oled.putc(width); 00060 _oled.putc(height); 00061 00062 return (_oled.getc() == OLED_ACK); 00063 } 00064 00065 bool uOLED::screenCopy(char x, char y, char width, char height, char sectorHi, char sectorMid, char sectorLow) 00066 { 00067 _oled.putc(0x40); 00068 _oled.putc(0x43); 00069 _oled.putc(x); 00070 _oled.putc(y); 00071 _oled.putc(width); 00072 _oled.putc(height); 00073 _oled.putc(sectorHi); 00074 _oled.putc(sectorMid); 00075 _oled.putc(sectorLow); 00076 00077 return (_oled.getc() == OLED_ACK); 00078 } 00079 00080 bool uOLED::displayControl(char mode, char value) { 00081 _oled.putc(0x59); 00082 _oled.putc(mode); 00083 _oled.putc(value); 00084 00085 return (_oled.getc() == OLED_ACK); 00086 } 00087 00088 bool uOLED::displayUserBitmappedCharacter(char character, char x, char y, short red, short green, short blue) 00089 { 00090 short colour = getRGB(red, green, blue); 00091 00092 _oled.putc(0x44); 00093 _oled.putc(character); 00094 _oled.putc(x); 00095 _oled.putc(y); 00096 _oled.putc(colour >> 8); 00097 _oled.putc(colour & 0xFF); 00098 00099 return (_oled.getc() == OLED_ACK); 00100 } 00101 00102 bool uOLED::drawCharacter(char character, char column, char row, short red, short green, short blue) 00103 { 00104 short colour = getRGB(red, green, blue); 00105 00106 _oled.putc(0x54); 00107 _oled.putc(character); 00108 _oled.putc(column); 00109 _oled.putc(row); 00110 _oled.putc(colour >> 8); 00111 _oled.putc(colour & 0xFF); 00112 00113 return (_oled.getc() == OLED_ACK); 00114 } 00115 00116 bool uOLED::drawCircle(char x, char y, char radius, short red, short green, short blue) 00117 { 00118 short color = getRGB(red, green, blue); 00119 00120 _oled.putc(0x43); 00121 _oled.putc(x); 00122 _oled.putc(y); 00123 _oled.putc(radius); 00124 _oled.putc(color >> 8); 00125 _oled.putc(color & 0xFF); 00126 00127 return (_oled.getc() == OLED_ACK); 00128 } 00129 00130 bool uOLED::drawImage(char x, char y, char width, char height, char colorMode, char *pixels) { 00131 int numberOfBytesPerPixel = 1; 00132 00133 _oled.putc(0x49); 00134 _oled.putc(x); 00135 _oled.putc(y); 00136 _oled.putc(width); 00137 _oled.putc(height); 00138 _oled.putc(colorMode); 00139 00140 if (colorMode == 16) numberOfBytesPerPixel = 2; 00141 00142 for (int i=0; i<width * height * numberOfBytesPerPixel; i++) { 00143 _oled.putc(pixels[i]); 00144 } 00145 00146 return (_oled.getc() == OLED_ACK); 00147 } 00148 00149 bool uOLED::drawImageSD_16bit(char x, char y, char width, char height, char colourMode, char sectorHi, char sectorMid, char sectorLow) 00150 { 00151 00152 _oled.putc(0x40); 00153 _oled.putc(0x49); 00154 _oled.putc(x); 00155 _oled.putc(y); 00156 _oled.putc(width); 00157 _oled.putc(height); 00158 _oled.putc(colourMode); 00159 _oled.putc(sectorHi); 00160 _oled.putc(sectorMid); 00161 _oled.putc(sectorLow); 00162 00163 return (_oled.getc() == OLED_ACK); 00164 } 00165 00166 bool uOLED::drawLine(char x1, char y1, char x2, char y2, short red, short green, short blue) 00167 { 00168 short color = getRGB(red, green, blue); 00169 00170 _oled.putc(0x4C); 00171 _oled.putc(x1); 00172 _oled.putc(y1); 00173 _oled.putc(x2); 00174 _oled.putc(y2); 00175 _oled.putc(color >> 8); 00176 _oled.putc(color & 0xFF); 00177 00178 return (_oled.getc() == OLED_ACK); 00179 } 00180 00181 bool uOLED::drawPolygon(char vertices, char *x, char *y, short red, short green, short blue) { 00182 short colour = getRGB(red, green, blue); 00183 00184 _oled.putc(0x67); 00185 _oled.putc(vertices); 00186 for (int i=0; i < vertices; i++) { 00187 _oled.putc(x[i]); 00188 _oled.putc(y[i]); 00189 } 00190 _oled.putc(colour >> 8); 00191 _oled.putc(colour & 0xFF); 00192 00193 return (_oled.getc() == OLED_ACK); 00194 } 00195 00196 bool uOLED::drawRectangle(char x, char y, char width, char height, short red, short green, short blue) 00197 { 00198 short colour = getRGB(red, green, blue); 00199 00200 _oled.putc(0x72); 00201 _oled.putc(x); 00202 _oled.putc(y); 00203 _oled.putc(x + width); 00204 _oled.putc(y + height); 00205 _oled.putc(colour >> 8); 00206 _oled.putc(colour & 0xFF); 00207 00208 return (_oled.getc() == OLED_ACK); 00209 } 00210 00211 bool uOLED::drawText(char column, char row, char font, short red, short green, short blue, char *text) 00212 { 00213 00214 short colour = getRGB(red, green, blue); 00215 00216 _oled.putc(0x73); 00217 _oled.putc(column); 00218 _oled.putc(row); 00219 _oled.putc(font); 00220 _oled.putc(colour >> 8); 00221 _oled.putc(colour & 0xFF); 00222 for (int i=0 ; i<strlen(text) ; i++) _oled.putc(text[i]); 00223 _oled.putc(0x00); 00224 00225 return (_oled.getc() == OLED_ACK); 00226 } 00227 00228 bool uOLED::drawTextUF(char x, char y, char font, short red, short green, short blue, char width, char height, char *text) { 00229 00230 short colour = getRGB(red, green, blue); 00231 00232 _oled.putc(0x53); 00233 _oled.putc(x); 00234 _oled.putc(y); 00235 _oled.putc(font); 00236 _oled.putc(colour >> 8); 00237 _oled.putc(colour & 0xFF); 00238 _oled.putc(width); 00239 _oled.putc(height); 00240 for (int i=0 ; i<strlen(text) ; i++) _oled.putc(text[i]); 00241 _oled.putc(0x00); 00242 00243 return (_oled.getc() == OLED_ACK); 00244 } 00245 00246 bool uOLED::drawTriangle(char x1, char y1, char x2, char y2, char x3, char y3, short red, short green, short blue) 00247 { 00248 00249 short colour = getRGB(red, green, blue); 00250 00251 _oled.putc(0x47); 00252 _oled.putc(x1); 00253 _oled.putc(y1); 00254 _oled.putc(x2); 00255 _oled.putc(y2); 00256 _oled.putc(x3); 00257 _oled.putc(y3); 00258 _oled.putc(colour >> 8); 00259 _oled.putc(colour & 0xFF); 00260 00261 return (_oled.getc() == OLED_ACK); 00262 } 00263 00264 bool uOLED::eraseScreen() { 00265 _oled.putc(0x45); 00266 00267 return (_oled.getc() == OLED_ACK); 00268 } 00269 00270 bool uOLED::init() { 00271 resetDisplay(); 00272 00273 wait_ms(OLED_INITDELAYMS); 00274 _oled.putc(0x55); 00275 00276 _oled.getc(); 00277 00278 _oled.putc(0x4F); 00279 _oled.putc(0x01); 00280 00281 return (_oled.getc() == OLED_ACK); 00282 } 00283 00284 bool uOLED::penSize(char size) { 00285 _oled.putc(0x70); 00286 _oled.putc(size); 00287 00288 return (_oled.getc() == OLED_ACK); 00289 } 00290 00291 bool uOLED::putPixel(char x, char y, short red, short green, short blue) 00292 { 00293 short colour = getRGB(red, green, blue); 00294 00295 _oled.putc(0x50); 00296 _oled.putc(x); 00297 _oled.putc(y); 00298 00299 _oled.putc(colour >> 8); 00300 _oled.putc(colour & 0xFF); 00301 00302 return (_oled.getc() == OLED_ACK); 00303 } 00304 00305 short uOLED::readPixel(char x, char y) { 00306 short returnValue; 00307 00308 _oled.putc(0x52); 00309 _oled.putc(x); 00310 _oled.putc(y); 00311 returnValue = (_oled.getc() << 8); 00312 returnValue += _oled.getc(); 00313 00314 return returnValue; 00315 } 00316 00317 bool uOLED::setBackgroundColour(char red, char green, char blue) 00318 { 00319 short colour = getRGB(red, green, blue); 00320 00321 _oled.putc(0x42); 00322 00323 _oled.putc(colour >> 8); 00324 _oled.putc(colour & 0xFF); 00325 00326 return (_oled.getc() == OLED_ACK); 00327 } 00328 00329 bool uOLED::setFont(char font) { 00330 _oled.putc(0x46); 00331 _oled.putc(font); 00332 00333 return (_oled.getc() == OLED_ACK); 00334 } 00335 00336 bool uOLED::textButton(char state, char x, char y, short red, short green, short blue, char font, short textRed, short textGreen, short textBlue, char textWidth, char textHeight, char *text) 00337 { 00338 short buttonColour = getRGB(red, green, blue); 00339 short textColour = getRGB(textRed, textGreen, textBlue); 00340 00341 _oled.putc(0x62); 00342 _oled.putc(state); 00343 _oled.putc(x); 00344 _oled.putc(y); 00345 _oled.putc(buttonColour >> 8); 00346 _oled.putc(buttonColour & 0xFF); 00347 _oled.putc(font); 00348 _oled.putc(textColour >> 8); 00349 _oled.putc(textColour & 0xFF); 00350 _oled.putc(textWidth); 00351 _oled.putc(textHeight); 00352 for (int i=0 ; i<strlen(text) ; i++) _oled.putc(text[i]); 00353 _oled.putc(0x00); 00354 00355 return (_oled.getc() == OLED_ACK); 00356 } 00357 00358 bool uOLED::textMode(char mode) { 00359 _oled.putc(0x4F); 00360 _oled.putc(mode); 00361 00362 return (_oled.getc() == OLED_ACK); 00363 } 00364 00365 bool uOLED::versionInfo(bool onScreen, char info[5]) { 00366 _oled.putc(0x56); 00367 if (onScreen) { 00368 _oled.putc(0x01); 00369 } else { 00370 _oled.putc(0x00); 00371 } 00372 00373 info[0] = _oled.getc(); 00374 info[1] = _oled.getc(); 00375 info[2] = _oled.getc(); 00376 info[3] = _oled.getc(); 00377 info[4] = _oled.getc(); 00378 00379 return true; 00380 }
Generated on Tue Jul 19 2022 16:58:29 by
