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

Committer:
Nakor
Date:
Tue Dec 28 21:24:03 2010 +0000
Revision:
29:757036aa73cd
Parent:
25:caf134ebfc34
Child:
30:41a872ad6155
All examples are tested.  Hopefully everything is ready to go.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nakor 0:4f009971ac11 1 #include "uOLED.h"
Nakor 0:4f009971ac11 2 #include "mbed.h"
Nakor 0:4f009971ac11 3
Nakor 0:4f009971ac11 4
Nakor 0:4f009971ac11 5 #define OLED_INITDELAYMS 500
Nakor 0:4f009971ac11 6
Nakor 0:4f009971ac11 7 #define OLED_ACK 0x06 // Ok
Nakor 0:4f009971ac11 8 #define OLED_NAK 0x15 // Error
Nakor 0:4f009971ac11 9
Nakor 0:4f009971ac11 10
Nakor 0:4f009971ac11 11
Nakor 0:4f009971ac11 12 uOLED::uOLED(PinName serialTX, PinName serialRX, PinName reset) :
Nakor 0:4f009971ac11 13 _oled(serialTX, serialRX),
Nakor 0:4f009971ac11 14 _reset(reset) {
Nakor 0:4f009971ac11 15
Nakor 0:4f009971ac11 16 _oled.baud(230400);
Nakor 0:4f009971ac11 17 }
Nakor 0:4f009971ac11 18
Nakor 0:4f009971ac11 19 /******************/
Nakor 0:4f009971ac11 20 /* Protected */
Nakor 0:4f009971ac11 21 /******************/
Nakor 0:4f009971ac11 22 void uOLED::resetDisplay() {
Nakor 0:4f009971ac11 23 _reset = 0;
Nakor 0:4f009971ac11 24 wait_ms(20);
Nakor 0:4f009971ac11 25 _reset = 1;
Nakor 0:4f009971ac11 26 wait_ms(20);
Nakor 0:4f009971ac11 27 }
Nakor 0:4f009971ac11 28
Nakor 0:4f009971ac11 29
Nakor 0:4f009971ac11 30 /******************/
Nakor 0:4f009971ac11 31 /* Public */
Nakor 0:4f009971ac11 32 /******************/
Nakor 0:4f009971ac11 33 short uOLED::getRGB(char red, char green, char blue) {
Nakor 0:4f009971ac11 34 int outR = ((red * 31) / 255);
Nakor 0:4f009971ac11 35 int outG = ((green * 63) / 255);
Nakor 0:4f009971ac11 36 int outB = ((blue * 31) / 255);
Nakor 0:4f009971ac11 37
Nakor 0:4f009971ac11 38 return (outR << 11) | (outG << 5) | outB;
Nakor 0:4f009971ac11 39 }
Nakor 0:4f009971ac11 40
Nakor 0:4f009971ac11 41 bool uOLED::addBitmappedCharacter(char character, char data[8]) {
Nakor 0:4f009971ac11 42 _oled.putc(0x41);
Nakor 0:4f009971ac11 43 _oled.putc(character);
Nakor 0:4f009971ac11 44 for (int i=0; i<8; i++) _oled.putc(data[i]);
Nakor 0:4f009971ac11 45 return (_oled.getc() == OLED_ACK);
Nakor 0:4f009971ac11 46 }
Nakor 0:4f009971ac11 47
Nakor 0:4f009971ac11 48 bool uOLED::blockCopyPaste(char sourceX, char sourceY, char destinationX, char destinationY, char width, char height) {
Nakor 0:4f009971ac11 49 _oled.putc(0x63);
Nakor 0:4f009971ac11 50 _oled.putc(sourceX);
Nakor 0:4f009971ac11 51 _oled.putc(sourceY);
Nakor 0:4f009971ac11 52 _oled.putc(destinationX);
Nakor 0:4f009971ac11 53 _oled.putc(destinationY);
Nakor 0:4f009971ac11 54 _oled.putc(width);
Nakor 0:4f009971ac11 55 _oled.putc(height);
Nakor 0:4f009971ac11 56
Nakor 0:4f009971ac11 57 return (_oled.getc() == OLED_ACK);
Nakor 0:4f009971ac11 58 }
Nakor 0:4f009971ac11 59
Nakor 17:cee1c66b3133 60 bool uOLED::displayControl(char mode, char value) {
Nakor 0:4f009971ac11 61 _oled.putc(0x59);
Nakor 0:4f009971ac11 62 _oled.putc(mode);
Nakor 17:cee1c66b3133 63 _oled.putc(value);
Nakor 0:4f009971ac11 64
Nakor 0:4f009971ac11 65 return (_oled.getc() == OLED_ACK);
Nakor 0:4f009971ac11 66 }
Nakor 0:4f009971ac11 67
Nakor 25:caf134ebfc34 68 bool uOLED::displayUserBitmappedCharacter(char character, char x, char y, short red, short green, short blue)
Nakor 25:caf134ebfc34 69 {
Nakor 25:caf134ebfc34 70 short colour = getRGB(red, green, blue);
Nakor 25:caf134ebfc34 71
Nakor 0:4f009971ac11 72 _oled.putc(0x44);
Nakor 0:4f009971ac11 73 _oled.putc(character);
Nakor 0:4f009971ac11 74 _oled.putc(x);
Nakor 0:4f009971ac11 75 _oled.putc(y);
Nakor 25:caf134ebfc34 76 _oled.putc(colour >> 8);
Nakor 25:caf134ebfc34 77 _oled.putc(colour & 0xFF);
Nakor 0:4f009971ac11 78
Nakor 0:4f009971ac11 79 return (_oled.getc() == OLED_ACK);
Nakor 0:4f009971ac11 80 }
Nakor 0:4f009971ac11 81
Nakor 25:caf134ebfc34 82 bool uOLED::drawCharacter(char character, char column, char row, short red, short green, short blue)
Nakor 25:caf134ebfc34 83 {
Nakor 25:caf134ebfc34 84 short colour = getRGB(red, green, blue);
Nakor 25:caf134ebfc34 85
Nakor 0:4f009971ac11 86 _oled.putc(0x54);
Nakor 0:4f009971ac11 87 _oled.putc(character);
Nakor 0:4f009971ac11 88 _oled.putc(column);
Nakor 0:4f009971ac11 89 _oled.putc(row);
Nakor 25:caf134ebfc34 90 _oled.putc(colour >> 8);
Nakor 25:caf134ebfc34 91 _oled.putc(colour & 0xFF);
Nakor 0:4f009971ac11 92
Nakor 0:4f009971ac11 93 return (_oled.getc() == OLED_ACK);
Nakor 0:4f009971ac11 94 }
Nakor 0:4f009971ac11 95
Nakor 19:cc4f5d01f080 96 bool uOLED::drawCircle(char x, char y, char radius, short red, short green, short blue)
Nakor 19:cc4f5d01f080 97 {
Nakor 19:cc4f5d01f080 98 short color = getRGB(red, green, blue);
Nakor 19:cc4f5d01f080 99
Nakor 0:4f009971ac11 100 _oled.putc(0x43);
Nakor 0:4f009971ac11 101 _oled.putc(x);
Nakor 0:4f009971ac11 102 _oled.putc(y);
Nakor 0:4f009971ac11 103 _oled.putc(radius);
Nakor 0:4f009971ac11 104 _oled.putc(color >> 8);
Nakor 0:4f009971ac11 105 _oled.putc(color & 0xFF);
Nakor 0:4f009971ac11 106
Nakor 0:4f009971ac11 107 return (_oled.getc() == OLED_ACK);
Nakor 0:4f009971ac11 108 }
Nakor 0:4f009971ac11 109
Nakor 0:4f009971ac11 110 bool uOLED::drawImage(char x, char y, char width, char height, char colorMode, char *pixels) {
Nakor 0:4f009971ac11 111 int numberOfBytesPerPixel = 1;
Nakor 0:4f009971ac11 112
Nakor 0:4f009971ac11 113 _oled.putc(0x49);
Nakor 0:4f009971ac11 114 _oled.putc(x);
Nakor 0:4f009971ac11 115 _oled.putc(y);
Nakor 0:4f009971ac11 116 _oled.putc(width);
Nakor 0:4f009971ac11 117 _oled.putc(height);
Nakor 0:4f009971ac11 118 _oled.putc(colorMode);
Nakor 0:4f009971ac11 119
Nakor 0:4f009971ac11 120 if (colorMode == 16) numberOfBytesPerPixel = 2;
Nakor 0:4f009971ac11 121
Nakor 0:4f009971ac11 122 for (int i=0; i<width * height * numberOfBytesPerPixel; i++) {
Nakor 0:4f009971ac11 123 _oled.putc(pixels[i]);
Nakor 0:4f009971ac11 124 }
Nakor 0:4f009971ac11 125
Nakor 0:4f009971ac11 126 return (_oled.getc() == OLED_ACK);
Nakor 0:4f009971ac11 127 }
Nakor 0:4f009971ac11 128
Nakor 19:cc4f5d01f080 129 bool uOLED::drawLine(char x1, char y1, char x2, char y2, short red, short green, short blue)
Nakor 19:cc4f5d01f080 130 {
Nakor 19:cc4f5d01f080 131 short color = getRGB(red, green, blue);
Nakor 19:cc4f5d01f080 132
Nakor 0:4f009971ac11 133 _oled.putc(0x4C);
Nakor 0:4f009971ac11 134 _oled.putc(x1);
Nakor 0:4f009971ac11 135 _oled.putc(y1);
Nakor 0:4f009971ac11 136 _oled.putc(x2);
Nakor 0:4f009971ac11 137 _oled.putc(y2);
Nakor 0:4f009971ac11 138 _oled.putc(color >> 8);
Nakor 0:4f009971ac11 139 _oled.putc(color & 0xFF);
Nakor 0:4f009971ac11 140
Nakor 0:4f009971ac11 141 return (_oled.getc() == OLED_ACK);
Nakor 0:4f009971ac11 142 }
Nakor 0:4f009971ac11 143
Nakor 25:caf134ebfc34 144 bool uOLED::drawPolygon(char vertices, char *x, char *y, short red, short green, short blue) {
Nakor 25:caf134ebfc34 145 short colour = getRGB(red, green, blue);
Nakor 25:caf134ebfc34 146
Nakor 0:4f009971ac11 147 _oled.putc(0x67);
Nakor 0:4f009971ac11 148 _oled.putc(vertices);
Nakor 25:caf134ebfc34 149 for (int i=0; i < vertices; i++) {
Nakor 0:4f009971ac11 150 _oled.putc(x[i]);
Nakor 0:4f009971ac11 151 _oled.putc(y[i]);
Nakor 0:4f009971ac11 152 }
Nakor 25:caf134ebfc34 153 _oled.putc(colour >> 8);
Nakor 25:caf134ebfc34 154 _oled.putc(colour & 0xFF);
Nakor 0:4f009971ac11 155
Nakor 0:4f009971ac11 156 return (_oled.getc() == OLED_ACK);
Nakor 0:4f009971ac11 157 }
Nakor 0:4f009971ac11 158
Nakor 21:87a2227c1ad2 159 bool uOLED::drawRectangle(char x, char y, char width, char height, short red, short green, short blue)
Nakor 21:87a2227c1ad2 160 {
Nakor 21:87a2227c1ad2 161 short colour = getRGB(red, green, blue);
Nakor 21:87a2227c1ad2 162
Nakor 0:4f009971ac11 163 _oled.putc(0x72);
Nakor 0:4f009971ac11 164 _oled.putc(x);
Nakor 0:4f009971ac11 165 _oled.putc(y);
Nakor 0:4f009971ac11 166 _oled.putc(x + width);
Nakor 0:4f009971ac11 167 _oled.putc(y + height);
Nakor 21:87a2227c1ad2 168 _oled.putc(colour >> 8);
Nakor 21:87a2227c1ad2 169 _oled.putc(colour & 0xFF);
Nakor 0:4f009971ac11 170
Nakor 0:4f009971ac11 171 return (_oled.getc() == OLED_ACK);
Nakor 0:4f009971ac11 172 }
Nakor 0:4f009971ac11 173
Nakor 21:87a2227c1ad2 174 bool uOLED::drawText(char column, char row, char font, short red, short green, short blue, char *text)
Nakor 21:87a2227c1ad2 175 {
Nakor 21:87a2227c1ad2 176
Nakor 21:87a2227c1ad2 177 short colour = getRGB(red, green, blue);
Nakor 21:87a2227c1ad2 178
Nakor 0:4f009971ac11 179 _oled.putc(0x73);
Nakor 0:4f009971ac11 180 _oled.putc(column);
Nakor 0:4f009971ac11 181 _oled.putc(row);
Nakor 0:4f009971ac11 182 _oled.putc(font);
Nakor 21:87a2227c1ad2 183 _oled.putc(colour >> 8);
Nakor 21:87a2227c1ad2 184 _oled.putc(colour & 0xFF);
Nakor 0:4f009971ac11 185 for (int i=0 ; i<strlen(text) ; i++) _oled.putc(text[i]);
Nakor 0:4f009971ac11 186 _oled.putc(0x00);
Nakor 0:4f009971ac11 187
Nakor 0:4f009971ac11 188 return (_oled.getc() == OLED_ACK);
Nakor 0:4f009971ac11 189 }
Nakor 0:4f009971ac11 190
Nakor 14:3d90211095d4 191 bool uOLED::drawTextUF(char x, char y, char font, short red, short green, short blue, char width, char height, char *text) {
Nakor 14:3d90211095d4 192
Nakor 19:cc4f5d01f080 193 short colour = getRGB(red, green, blue);
Nakor 14:3d90211095d4 194
Nakor 14:3d90211095d4 195 _oled.putc(0x53);
Nakor 14:3d90211095d4 196 _oled.putc(x);
Nakor 14:3d90211095d4 197 _oled.putc(y);
Nakor 14:3d90211095d4 198 _oled.putc(font);
Nakor 14:3d90211095d4 199 _oled.putc(colour >> 8);
Nakor 14:3d90211095d4 200 _oled.putc(colour & 0xFF);
Nakor 14:3d90211095d4 201 _oled.putc(width);
Nakor 14:3d90211095d4 202 _oled.putc(height);
Nakor 14:3d90211095d4 203 for (int i=0 ; i<strlen(text) ; i++) _oled.putc(text[i]);
Nakor 14:3d90211095d4 204 _oled.putc(0x00);
Nakor 14:3d90211095d4 205
Nakor 14:3d90211095d4 206 return (_oled.getc() == OLED_ACK);
Nakor 14:3d90211095d4 207 }
Nakor 14:3d90211095d4 208
Nakor 21:87a2227c1ad2 209 bool uOLED::drawTriangle(char x1, char y1, char x2, char y2, char x3, char y3, short red, short green, short blue)
Nakor 21:87a2227c1ad2 210 {
Nakor 21:87a2227c1ad2 211
Nakor 21:87a2227c1ad2 212 short colour = getRGB(red, green, blue);
Nakor 21:87a2227c1ad2 213
Nakor 0:4f009971ac11 214 _oled.putc(0x47);
Nakor 0:4f009971ac11 215 _oled.putc(x1);
Nakor 0:4f009971ac11 216 _oled.putc(y1);
Nakor 0:4f009971ac11 217 _oled.putc(x2);
Nakor 0:4f009971ac11 218 _oled.putc(y2);
Nakor 0:4f009971ac11 219 _oled.putc(x3);
Nakor 0:4f009971ac11 220 _oled.putc(y3);
Nakor 21:87a2227c1ad2 221 _oled.putc(colour >> 8);
Nakor 21:87a2227c1ad2 222 _oled.putc(colour & 0xFF);
Nakor 0:4f009971ac11 223
Nakor 0:4f009971ac11 224 return (_oled.getc() == OLED_ACK);
Nakor 0:4f009971ac11 225 }
Nakor 0:4f009971ac11 226
Nakor 0:4f009971ac11 227 bool uOLED::eraseScreen() {
Nakor 0:4f009971ac11 228 _oled.putc(0x45);
Nakor 0:4f009971ac11 229
Nakor 0:4f009971ac11 230 return (_oled.getc() == OLED_ACK);
Nakor 0:4f009971ac11 231 }
Nakor 0:4f009971ac11 232
Nakor 0:4f009971ac11 233 bool uOLED::init() {
Nakor 0:4f009971ac11 234 resetDisplay();
Nakor 0:4f009971ac11 235
Nakor 0:4f009971ac11 236 wait_ms(OLED_INITDELAYMS);
Nakor 0:4f009971ac11 237 _oled.putc(0x55);
Nakor 0:4f009971ac11 238
Nakor 0:4f009971ac11 239 _oled.getc();
Nakor 0:4f009971ac11 240
Nakor 0:4f009971ac11 241 _oled.putc(0x4F);
Nakor 0:4f009971ac11 242 _oled.putc(0x01);
Nakor 0:4f009971ac11 243
Nakor 0:4f009971ac11 244 return (_oled.getc() == OLED_ACK);
Nakor 0:4f009971ac11 245 }
Nakor 0:4f009971ac11 246
Nakor 0:4f009971ac11 247 bool uOLED::penSize(char size) {
Nakor 0:4f009971ac11 248 _oled.putc(0x70);
Nakor 0:4f009971ac11 249 _oled.putc(size);
Nakor 0:4f009971ac11 250
Nakor 0:4f009971ac11 251 return (_oled.getc() == OLED_ACK);
Nakor 0:4f009971ac11 252 }
Nakor 0:4f009971ac11 253
Nakor 22:66401b612b1b 254 bool uOLED::putPixel(char x, char y, short red, short green, short blue)
Nakor 22:66401b612b1b 255 {
Nakor 22:66401b612b1b 256 short colour = getRGB(red, green, blue);
Nakor 22:66401b612b1b 257
Nakor 0:4f009971ac11 258 _oled.putc(0x50);
Nakor 0:4f009971ac11 259 _oled.putc(x);
Nakor 0:4f009971ac11 260 _oled.putc(y);
Nakor 0:4f009971ac11 261
Nakor 22:66401b612b1b 262 _oled.putc(colour >> 8);
Nakor 22:66401b612b1b 263 _oled.putc(colour & 0xFF);
Nakor 0:4f009971ac11 264
Nakor 0:4f009971ac11 265 return (_oled.getc() == OLED_ACK);
Nakor 0:4f009971ac11 266 }
Nakor 0:4f009971ac11 267
Nakor 0:4f009971ac11 268 short uOLED::readPixel(char x, char y) {
Nakor 0:4f009971ac11 269 short returnValue;
Nakor 0:4f009971ac11 270
Nakor 0:4f009971ac11 271 _oled.putc(0x52);
Nakor 0:4f009971ac11 272 _oled.putc(x);
Nakor 0:4f009971ac11 273 _oled.putc(y);
Nakor 0:4f009971ac11 274 returnValue = (_oled.getc() << 8);
Nakor 0:4f009971ac11 275 returnValue += _oled.getc();
Nakor 0:4f009971ac11 276
Nakor 0:4f009971ac11 277 return returnValue;
Nakor 0:4f009971ac11 278 }
Nakor 0:4f009971ac11 279
Nakor 13:f2b9f249bcff 280 bool uOLED::setBackgroundColour(char red, char green, char blue)
Nakor 13:f2b9f249bcff 281 {
Nakor 19:cc4f5d01f080 282 short colour = getRGB(red, green, blue);
Nakor 13:f2b9f249bcff 283
Nakor 13:f2b9f249bcff 284 _oled.putc(0x42);
Nakor 11:1686d4d4bbdb 285
Nakor 13:f2b9f249bcff 286 _oled.putc(colour >> 8);
Nakor 13:f2b9f249bcff 287 _oled.putc(colour & 0xFF);
Nakor 0:4f009971ac11 288
Nakor 0:4f009971ac11 289 return (_oled.getc() == OLED_ACK);
Nakor 0:4f009971ac11 290 }
Nakor 0:4f009971ac11 291
Nakor 22:66401b612b1b 292 bool uOLED::setFont(char font) {
Nakor 0:4f009971ac11 293 _oled.putc(0x46);
Nakor 22:66401b612b1b 294 _oled.putc(font);
Nakor 0:4f009971ac11 295
Nakor 0:4f009971ac11 296 return (_oled.getc() == OLED_ACK);
Nakor 0:4f009971ac11 297 }
Nakor 0:4f009971ac11 298
Nakor 22:66401b612b1b 299 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)
Nakor 22:66401b612b1b 300 {
Nakor 22:66401b612b1b 301 short buttonColour = getRGB(red, green, blue);
Nakor 22:66401b612b1b 302 short textColour = getRGB(textRed, textGreen, textBlue);
Nakor 22:66401b612b1b 303
Nakor 0:4f009971ac11 304 _oled.putc(0x62);
Nakor 0:4f009971ac11 305 _oled.putc(state);
Nakor 0:4f009971ac11 306 _oled.putc(x);
Nakor 0:4f009971ac11 307 _oled.putc(y);
Nakor 22:66401b612b1b 308 _oled.putc(buttonColour >> 8);
Nakor 22:66401b612b1b 309 _oled.putc(buttonColour & 0xFF);
Nakor 0:4f009971ac11 310 _oled.putc(font);
Nakor 22:66401b612b1b 311 _oled.putc(textColour >> 8);
Nakor 22:66401b612b1b 312 _oled.putc(textColour & 0xFF);
Nakor 0:4f009971ac11 313 _oled.putc(textWidth);
Nakor 0:4f009971ac11 314 _oled.putc(textHeight);
Nakor 0:4f009971ac11 315 for (int i=0 ; i<strlen(text) ; i++) _oled.putc(text[i]);
Nakor 0:4f009971ac11 316 _oled.putc(0x00);
Nakor 0:4f009971ac11 317
Nakor 0:4f009971ac11 318 return (_oled.getc() == OLED_ACK);
Nakor 0:4f009971ac11 319 }
Nakor 0:4f009971ac11 320
Nakor 0:4f009971ac11 321 bool uOLED::textMode(char mode) {
Nakor 0:4f009971ac11 322 _oled.putc(0x4F);
Nakor 0:4f009971ac11 323 _oled.putc(mode);
Nakor 0:4f009971ac11 324
Nakor 0:4f009971ac11 325 return (_oled.getc() == OLED_ACK);
Nakor 0:4f009971ac11 326 }
Nakor 0:4f009971ac11 327
Nakor 29:757036aa73cd 328 bool uOLED::versionInfo(bool onScreen, char info[5]) {
Nakor 0:4f009971ac11 329 _oled.putc(0x56);
Nakor 0:4f009971ac11 330 if (onScreen) {
Nakor 0:4f009971ac11 331 _oled.putc(0x01);
Nakor 0:4f009971ac11 332 } else {
Nakor 0:4f009971ac11 333 _oled.putc(0x00);
Nakor 0:4f009971ac11 334 }
Nakor 0:4f009971ac11 335
Nakor 0:4f009971ac11 336 info[0] = _oled.getc();
Nakor 0:4f009971ac11 337 info[1] = _oled.getc();
Nakor 0:4f009971ac11 338 info[2] = _oled.getc();
Nakor 0:4f009971ac11 339 info[3] = _oled.getc();
Nakor 0:4f009971ac11 340 info[4] = _oled.getc();
Nakor 0:4f009971ac11 341
Nakor 0:4f009971ac11 342 return true;
Nakor 0:4f009971ac11 343 }