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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers uOLED.cpp Source File

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 }