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

Files at this revision

API Documentation at this revision

Comitter:
Nakor
Date:
Mon Dec 20 18:11:30 2010 +0000
Child:
1:476dcc382de3
Commit message:
Library rewrite.

Changed in this revision

uOLED.cpp Show annotated file Show diff for this revision Revisions of this file
uOLED.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uOLED.cpp	Mon Dec 20 18:11:30 2010 +0000
@@ -0,0 +1,289 @@
+#include "uOLED.h"
+#include "mbed.h"
+
+
+#define     OLED_INITDELAYMS            500
+
+#define     OLED_ACK                    0x06  // Ok
+#define     OLED_NAK                    0x15  // Error
+
+
+
+uOLED::uOLED(PinName serialTX, PinName serialRX, PinName reset) :
+    _oled(serialTX, serialRX),
+    _reset(reset) {
+
+    _oled.baud(230400);
+}
+
+/******************/
+/* Protected      */
+/******************/
+void uOLED::resetDisplay() {
+    _reset = 0;
+    wait_ms(20);
+    _reset = 1;
+    wait_ms(20);
+}
+
+
+/******************/
+/* Public         */
+/******************/
+short uOLED::getRGB(char red, char green, char blue) {
+    int outR = ((red * 31) / 255);
+    int outG = ((green * 63) / 255);
+    int outB = ((blue * 31) / 255);
+    
+    return (outR << 11) | (outG << 5) | outB;
+}
+
+bool uOLED::addBitmappedCharacter(char character, char data[8]) {
+    _oled.putc(0x41);
+    _oled.putc(character);
+    for (int i=0; i<8; i++) _oled.putc(data[i]);
+    return (_oled.getc() == OLED_ACK);
+}
+
+bool uOLED::blockCopyPaste(char sourceX, char sourceY, char destinationX, char destinationY, char width, char height) {
+    _oled.putc(0x63);
+    _oled.putc(sourceX);
+    _oled.putc(sourceY);
+    _oled.putc(destinationX);
+    _oled.putc(destinationY);
+    _oled.putc(width);
+    _oled.putc(height);
+
+    return (_oled.getc() == OLED_ACK);
+}
+
+bool uOLED::displayControl(char mode) {
+    _oled.putc(0x59);
+    _oled.putc(mode);
+    
+    return (_oled.getc() == OLED_ACK);
+}
+
+bool uOLED::displayUserBitmappedCharacter(char character, char x, char y, short color) {
+    _oled.putc(0x44);  
+    _oled.putc(character);
+    _oled.putc(x);
+    _oled.putc(y);
+    _oled.putc(color >> 8);
+    _oled.putc(color & 0xFF);
+    
+    return (_oled.getc() == OLED_ACK);
+}
+
+bool uOLED::drawCharacter(char character, char column, char row, short color) {
+    _oled.putc(0x54);
+    _oled.putc(character);
+    _oled.putc(column);
+    _oled.putc(row);    
+    _oled.putc(color >> 8);
+    _oled.putc(color & 0xFF);
+    
+    return (_oled.getc() == OLED_ACK);
+}
+
+bool uOLED::drawCircle(char x, char y, char radius, short color) {
+    _oled.putc(0x43);     
+    _oled.putc(x);
+    _oled.putc(y);
+    _oled.putc(radius);
+    _oled.putc(color >> 8);
+    _oled.putc(color & 0xFF);
+    
+    return (_oled.getc() == OLED_ACK);
+}
+
+bool uOLED::drawImage(char x, char y, char width, char height, char colorMode, char *pixels) {
+    int numberOfBytesPerPixel = 1;
+    
+    _oled.putc(0x49);
+    _oled.putc(x);
+    _oled.putc(y);
+    _oled.putc(width);
+    _oled.putc(height);
+    _oled.putc(colorMode);
+    
+    if (colorMode == 16) numberOfBytesPerPixel = 2;
+        
+    for (int i=0; i<width * height * numberOfBytesPerPixel; i++) {
+        _oled.putc(pixels[i]);
+    }
+
+    return (_oled.getc() == OLED_ACK);
+}
+
+bool uOLED::drawLine(char x1, char y1, char x2, char y2, short color) {
+    _oled.putc(0x4C);
+    _oled.putc(x1);
+    _oled.putc(y1);
+    _oled.putc(x2);
+    _oled.putc(y2);
+    _oled.putc(color >> 8);
+    _oled.putc(color & 0xFF);
+    
+    return (_oled.getc() == OLED_ACK);
+}
+
+bool uOLED::drawPolygon(char vertices, char *x, char *y, short color) {
+    _oled.putc(0x67);
+    _oled.putc(vertices);
+    for (int i=0; i<vertices; i++) {
+        _oled.putc(x[i]);
+        _oled.putc(y[i]);
+    }
+    _oled.putc(color >> 8);
+    _oled.putc(color & 0xFF);
+    
+    return (_oled.getc() == OLED_ACK);
+}
+
+bool uOLED::drawRectangle(char x, char y, char width, char height, short color) {
+    _oled.putc(0x72);
+    _oled.putc(x);
+    _oled.putc(y);   
+    _oled.putc(x + width);
+    _oled.putc(y + height);
+    _oled.putc(color >> 8);
+    _oled.putc(color & 0xFF);
+
+    return (_oled.getc() == OLED_ACK);
+}
+
+bool uOLED::drawText(char column, char row, char font, short color, char *text) {
+    _oled.putc(0x73);
+    _oled.putc(column);
+    _oled.putc(row);
+    _oled.putc(font);   
+    _oled.putc(color >> 8);
+    _oled.putc(color & 0xFF);  
+    for (int i=0 ; i<strlen(text) ; i++) _oled.putc(text[i]);
+    _oled.putc(0x00);
+    
+    return (_oled.getc() == OLED_ACK);
+}
+
+bool uOLED::drawTriangle(char x1, char y1, char x2, char y2, char x3, char y3, short color) {
+    _oled.putc(0x47);
+    _oled.putc(x1);
+    _oled.putc(y1);
+    _oled.putc(x2);
+    _oled.putc(y2);
+    _oled.putc(x3);
+    _oled.putc(y3);
+    _oled.putc(color >> 8);
+    _oled.putc(color & 0xFF);
+
+    return (_oled.getc() == OLED_ACK);
+}
+
+bool uOLED::eraseScreen() {
+    _oled.putc(0x45);
+
+    return (_oled.getc() == OLED_ACK);
+}
+
+bool uOLED::init() {
+    resetDisplay();  
+    
+    wait_ms(OLED_INITDELAYMS); 
+    _oled.putc(0x55);
+    
+    _oled.getc();
+    
+    _oled.putc(0x4F);
+    _oled.putc(0x01);
+
+    return (_oled.getc() == OLED_ACK);
+}
+
+bool uOLED::penSize(char size) {
+    _oled.putc(0x70);
+    _oled.putc(size);
+    
+    return (_oled.getc() == OLED_ACK);
+}
+
+bool uOLED::putPixel(char x, char y, short color) {
+    _oled.putc(0x50);
+    _oled.putc(x);
+    _oled.putc(y);
+    
+    _oled.putc(color >> 8);
+    _oled.putc(color & 0xFF);
+    
+    return (_oled.getc() == OLED_ACK);
+}
+
+short uOLED::readPixel(char x, char y) {
+    short returnValue;
+    
+    _oled.putc(0x52);
+    _oled.putc(x);
+    _oled.putc(y);
+    returnValue = (_oled.getc() << 8);
+    returnValue += _oled.getc();
+    
+    return returnValue;
+}
+
+bool uOLED::setBackgroundColor(short color) {
+    _oled.putc(0x42);
+
+    _oled.putc(color >> 8);
+    _oled.putc(color & 0xFF);
+
+    return (_oled.getc() == OLED_ACK);
+}
+
+bool uOLED::setFontSize(char fontType) {
+    _oled.putc(0x46);
+    _oled.putc(fontType);
+    
+    return (_oled.getc() == OLED_ACK);
+}
+
+bool uOLED::textButton(char state, char x, char y, short buttonColor, char font, short textColor, char textWidth, char textHeight, char *text) {
+    _oled.putc(0x62);
+    _oled.putc(state);
+    _oled.putc(x);
+    _oled.putc(y);
+    _oled.putc(buttonColor >> 8);
+    _oled.putc(buttonColor & 0xFF);
+    _oled.putc(font);
+    _oled.putc(textColor >> 8);
+    _oled.putc(textColor & 0xFF);
+    _oled.putc(textWidth);
+    _oled.putc(textHeight);
+    for (int i=0 ; i<strlen(text) ; i++) _oled.putc(text[i]);   
+    _oled.putc(0x00);
+    
+    return (_oled.getc() == OLED_ACK);
+}
+
+bool uOLED::textMode(char mode) {
+    _oled.putc(0x4F);
+    _oled.putc(mode);
+    
+    return (_oled.getc() == OLED_ACK);
+}
+
+bool uOLED::versionInfo(bool onScreen, char *info) {
+    _oled.putc(0x56);
+    if (onScreen) {
+        _oled.putc(0x01);
+    } else {
+        _oled.putc(0x00);
+    }
+    
+    info[0] = _oled.getc();
+    info[1] = _oled.getc();
+    info[2] = _oled.getc();
+    info[3] = _oled.getc();
+    info[4] = _oled.getc();
+    
+    return true;    
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uOLED.h	Mon Dec 20 18:11:30 2010 +0000
@@ -0,0 +1,77 @@
+/* mbed 4D uOLED Library
+ * Originally designed for use with uOLED-96-G1 (SGC)
+ * serially controlled .96" screen.
+ *
+ * This is a modified library originally obtained from
+ * Erik van Wijk's library code at:
+ * http://mbed.org/users/evwijk/libraries/microOLED/li4nzn
+ */
+
+#ifndef _MBED_UOLED_
+#define _MBED_UOLED_
+
+#include "mbed.h"
+
+#define     OLED_FONT5X7                    0x01
+#define     OLED_FONT8X8                    0x02
+#define     OLED_FONT8X12                   0x03
+
+#define     OLED_DISPLAYCONTROL_DISPLAY     0x01
+#define     OLED_DISPLAYCONTROL_CONTRAST    0x02
+#define     OLED_DISPLAYCONTROL_POWER       0x03
+
+/** uOLED control class using Serial
+ *
+ * Example:
+ * @code
+ * // Draw text on the screen.
+ * #include "mbed.h"
+ * #include "uOLED.h"
+ * 
+ * uOLED SGC(p9, p10, p11);
+ *
+ int main()
+ * {    
+ *     SGC.drawText(0, 0, 0, FF, "This is text");
+ * }
+ */
+class uOLED {
+public:
+
+    uOLED(PinName serialTX, PinName serialRX, PinName reset);
+
+    short getRGB(char red, char green, char blue);
+
+    bool addBitmappedCharacter(char character, char data[8]);
+    bool blockCopyPaste(char sourceX, char sourceY, char destinationX, char destinationY, char width, char height);
+    bool displayControl(char mode);
+    bool displayUserBitmappedCharacter(char character, char x, char y, short color);
+    bool drawCircle(char x, char y, char radius, short color);
+    bool drawCharacter(char character, char column, char row, short color);
+    bool drawImage(char x, char y, char width, char height, char colorMode, char *pixels);
+    bool drawLine(char x1, char y1, char x2, char y2, short color);
+    bool drawPolygon(char vertices, char *x, char *y, short color);
+    bool drawRectangle(char x, char y, char width, char height, short color);
+    bool drawText(char column, char row, char font, short color, char *text);
+    bool drawTriangle(char x1, char y1, char x2, char y2, char x3, char y3, short color);
+    bool eraseScreen();
+    /** Initialize the screen.  This must be completed before any other communication with the device.
+    * Timing allows for at least 500ms delay for initialization.
+    */
+    bool init();
+    bool penSize(char size);
+    bool putPixel(char x, char y, short color);
+    short readPixel(char x, char y);
+    bool setBackgroundColor(short color);
+    bool setFontSize(char fontType);
+    bool textButton(char state, char x, char y, short buttonColor, char font, short textColor, char textWidth, char textHeight, char *text);
+    bool textMode(char mode);
+    bool versionInfo(bool onScreen, char *info);
+    
+    
+protected:
+    Serial      _oled;
+    DigitalOut  _reset;
+    
+    void resetDisplay();
+};
\ No newline at end of file