A derived version of the BSD licensed Adafrut GFX library for the SSD1306 controller for an OLED 128x32 or 128x64 display using SPI or I2C.

Dependents:   servo_sensor ArchPro_TFT BLE_Display SSD1306_demo ... more

Import libraryAdafruit_GFX

A derived version of the BSD licensed Adafrut GFX library for the SSD1306 controller for an OLED 128x32 or 128x64 display using SPI or I2C.

This is an SPI or I2C driver, font, and graphics drawing library as initially provided by Adafruit which has been modified for use in the mbed envionment.

128x32 OLED Display

Example

/*
 *  Copyright (c) 2012 Neal Horman - http://www.wanlink.com
 *  
 *  License: MIT open source (http://opensource.org/licenses/MIT)
 *      Summary;
 *      Use / modify / distribute / publish it how you want and 
 *      if you use it, or don't, you can't hold me liable for how
 *      it does or doesn't work.
 *      If it doesn't work how you want, don't use it, or change
 *      it so that it does work.
 */
 
#include "mbed.h"
#include "Adafruit_SSD1306.h"

DigitalOut myled(LED1);

// an SPI sub-class that provides a constructed default
class SPIPreInit : public SPI
{
public:
    SPIPreInit(PinName mosi, PinName miso, PinName clk) : SPI(mosi,miso,clk)
    {
        format(8,3);
        frequency(2000000);
    };
};

// an I2C sub-class that provides a constructed default
class I2CPreInit : public I2C
{
public:
    I2CPreInit(PinName sda, PinName scl) : I2C(sda, scl)
    {
        frequency(400000);
        start();
    };
};

SPIPreInit gSpi(p5,NC,p7);
Adafruit_SSD1306_Spi gOled1(gSpi,p26,p25,p24);

I2CPreInit gI2C(p9,p10);
Adafruit_SSD1306_I2c gOled2(gI2C,p27);

int main()
{   uint16_t x=0;

    gOled1.printf("%ux%u OLED Display\r\n", gOled1.width(), gOled1.height());
    gOled2.printf("%ux%u OLED Display\r\n", gOled2.width(), gOled2.height());
    
    while(1)
    {
        myled = !myled;
        gOled1.printf("%u\r",x);
        gOled1.display();
        gOled2.printf("%u\r",x);
        gOled2.display();
        x++;
        wait(1.0);
    }
}
Committer:
nkhorman
Date:
Tue Oct 21 02:04:08 2014 +0000
Revision:
11:86909e6db3c8
Parent:
9:ddb97c9850a2
Child:
13:8f03f908f22a
Add some documentation

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nkhorman 9:ddb97c9850a2 1 /***********************************
nkhorman 9:ddb97c9850a2 2 This is a our graphics core library, for all our displays.
nkhorman 9:ddb97c9850a2 3 We'll be adapting all the
nkhorman 9:ddb97c9850a2 4 existing libaries to use this core to make updating, support
nkhorman 9:ddb97c9850a2 5 and upgrading easier!
nkhorman 9:ddb97c9850a2 6
nkhorman 9:ddb97c9850a2 7 Adafruit invests time and resources providing this open source code,
nkhorman 9:ddb97c9850a2 8 please support Adafruit and open-source hardware by purchasing
nkhorman 9:ddb97c9850a2 9 products from Adafruit!
nkhorman 9:ddb97c9850a2 10
nkhorman 9:ddb97c9850a2 11 Written by Limor Fried/Ladyada for Adafruit Industries.
nkhorman 9:ddb97c9850a2 12 BSD license, check license.txt for more information
nkhorman 9:ddb97c9850a2 13 All text above must be included in any redistribution
nkhorman 9:ddb97c9850a2 14 ****************************************/
nkhorman 9:ddb97c9850a2 15
nkhorman 9:ddb97c9850a2 16 /*
nkhorman 9:ddb97c9850a2 17 * Modified by Neal Horman 7/14/2012 for use in mbed
nkhorman 9:ddb97c9850a2 18 */
nkhorman 9:ddb97c9850a2 19
nkhorman 9:ddb97c9850a2 20 #ifndef _ADAFRUIT_GFX_H_
nkhorman 9:ddb97c9850a2 21 #define _ADAFRUIT_GFX_H_
nkhorman 9:ddb97c9850a2 22
nkhorman 9:ddb97c9850a2 23 // Uncomment this on to enable all functionality
nkhorman 9:ddb97c9850a2 24 //#define GFX_WANT_ABSTRACTS
nkhorman 9:ddb97c9850a2 25
nkhorman 9:ddb97c9850a2 26 // Uncomment this to enable only runtime font scaling, without all the rest of the Abstracts
nkhorman 9:ddb97c9850a2 27 //#define GFX_SIZEABLE_TEXT
nkhorman 9:ddb97c9850a2 28
nkhorman 9:ddb97c9850a2 29 static inline void swap(int16_t &a, int16_t &b)
nkhorman 9:ddb97c9850a2 30 {
nkhorman 9:ddb97c9850a2 31 int16_t t = a;
nkhorman 9:ddb97c9850a2 32
nkhorman 9:ddb97c9850a2 33 a = b;
nkhorman 9:ddb97c9850a2 34 b = t;
nkhorman 9:ddb97c9850a2 35 }
nkhorman 9:ddb97c9850a2 36
nkhorman 9:ddb97c9850a2 37 #ifndef _BV
nkhorman 9:ddb97c9850a2 38 #define _BV(bit) (1<<(bit))
nkhorman 9:ddb97c9850a2 39 #endif
nkhorman 9:ddb97c9850a2 40
nkhorman 9:ddb97c9850a2 41 #define BLACK 0
nkhorman 9:ddb97c9850a2 42 #define WHITE 1
nkhorman 9:ddb97c9850a2 43
nkhorman 11:86909e6db3c8 44 /**
nkhorman 11:86909e6db3c8 45 * This is a Text and Graphics element drawing class.
nkhorman 11:86909e6db3c8 46 * These functions draw to the display buffer.
nkhorman 11:86909e6db3c8 47 *
nkhorman 11:86909e6db3c8 48 * Display drivers should be derived from here.
nkhorman 11:86909e6db3c8 49 * The Display drivers push the display buffer to the
nkhorman 11:86909e6db3c8 50 * hardware based on application control.
nkhorman 11:86909e6db3c8 51 *
nkhorman 11:86909e6db3c8 52 */
nkhorman 9:ddb97c9850a2 53 class Adafruit_GFX : public Stream
nkhorman 9:ddb97c9850a2 54 {
nkhorman 9:ddb97c9850a2 55 public:
nkhorman 9:ddb97c9850a2 56 Adafruit_GFX(int16_t w, int16_t h)
nkhorman 9:ddb97c9850a2 57 : _rawWidth(w)
nkhorman 9:ddb97c9850a2 58 , _rawHeight(h)
nkhorman 9:ddb97c9850a2 59 , _width(w)
nkhorman 9:ddb97c9850a2 60 , _height(h)
nkhorman 9:ddb97c9850a2 61 , cursor_x(0)
nkhorman 9:ddb97c9850a2 62 , cursor_y(0)
nkhorman 9:ddb97c9850a2 63 , textcolor(WHITE)
nkhorman 9:ddb97c9850a2 64 , textbgcolor(BLACK)
nkhorman 9:ddb97c9850a2 65 , textsize(1)
nkhorman 9:ddb97c9850a2 66 , rotation(0)
nkhorman 9:ddb97c9850a2 67 , wrap(true)
nkhorman 9:ddb97c9850a2 68 {};
nkhorman 9:ddb97c9850a2 69
nkhorman 11:86909e6db3c8 70 /// Paint one BLACK or WHITE pixel in the display buffer
nkhorman 9:ddb97c9850a2 71 // this must be defined by the subclass
nkhorman 9:ddb97c9850a2 72 virtual void drawPixel(int16_t x, int16_t y, uint16_t color) = 0;
nkhorman 9:ddb97c9850a2 73 // this is optional
nkhorman 9:ddb97c9850a2 74 virtual void invertDisplay(bool i) {};
nkhorman 9:ddb97c9850a2 75
nkhorman 9:ddb97c9850a2 76 // Stream implementation - provides printf() interface
nkhorman 9:ddb97c9850a2 77 // You would otherwise be forced to use writeChar()
nkhorman 9:ddb97c9850a2 78 virtual int _putc(int value) { return writeChar(value); };
nkhorman 9:ddb97c9850a2 79 virtual int _getc() { return -1; };
nkhorman 9:ddb97c9850a2 80
nkhorman 9:ddb97c9850a2 81 #ifdef GFX_WANT_ABSTRACTS
nkhorman 9:ddb97c9850a2 82 // these are 'generic' drawing functions, so we can share them!
nkhorman 11:86909e6db3c8 83
nkhorman 11:86909e6db3c8 84 /** Draw a Horizontal Line
nkhorman 11:86909e6db3c8 85 * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
nkhorman 11:86909e6db3c8 86 */
nkhorman 9:ddb97c9850a2 87 virtual void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color);
nkhorman 11:86909e6db3c8 88 /** Draw a rectangle
nkhorman 11:86909e6db3c8 89 * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
nkhorman 11:86909e6db3c8 90 */
nkhorman 9:ddb97c9850a2 91 virtual void drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
nkhorman 11:86909e6db3c8 92 /** Fill the entire display
nkhorman 11:86909e6db3c8 93 * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
nkhorman 11:86909e6db3c8 94 */
nkhorman 9:ddb97c9850a2 95 virtual void fillScreen(uint16_t color);
nkhorman 9:ddb97c9850a2 96
nkhorman 11:86909e6db3c8 97 /** Draw a circle
nkhorman 11:86909e6db3c8 98 * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
nkhorman 11:86909e6db3c8 99 */
nkhorman 9:ddb97c9850a2 100 void drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);
nkhorman 9:ddb97c9850a2 101 void drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, uint16_t color);
nkhorman 11:86909e6db3c8 102
nkhorman 11:86909e6db3c8 103 /** Draw and fill a circle
nkhorman 11:86909e6db3c8 104 * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
nkhorman 11:86909e6db3c8 105 */
nkhorman 9:ddb97c9850a2 106 void fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);
nkhorman 9:ddb97c9850a2 107 void fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, int16_t delta, uint16_t color);
nkhorman 9:ddb97c9850a2 108
nkhorman 11:86909e6db3c8 109 /** Draw a triangle
nkhorman 11:86909e6db3c8 110 * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
nkhorman 11:86909e6db3c8 111 */
nkhorman 9:ddb97c9850a2 112 void drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color);
nkhorman 11:86909e6db3c8 113 /** Draw and fill a triangle
nkhorman 11:86909e6db3c8 114 * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
nkhorman 11:86909e6db3c8 115 */
nkhorman 9:ddb97c9850a2 116 void fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color);
nkhorman 11:86909e6db3c8 117
nkhorman 11:86909e6db3c8 118 /** Draw a rounded rectangle
nkhorman 11:86909e6db3c8 119 * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
nkhorman 11:86909e6db3c8 120 */
nkhorman 9:ddb97c9850a2 121 void drawRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color);
nkhorman 11:86909e6db3c8 122 /** Draw and fill a rounded rectangle
nkhorman 11:86909e6db3c8 123 * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
nkhorman 11:86909e6db3c8 124 */
nkhorman 9:ddb97c9850a2 125 void fillRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color);
nkhorman 9:ddb97c9850a2 126 #endif
nkhorman 9:ddb97c9850a2 127
nkhorman 9:ddb97c9850a2 128 #if defined(GFX_WANT_ABSTRACTS) || defined(GFX_SIZEABLE_TEXT)
nkhorman 11:86909e6db3c8 129 /** Draw a line
nkhorman 11:86909e6db3c8 130 * @note GFX_WANT_ABSTRACTS or GFX_SIZEABLE_TEXT must be defined in Adafruit_GFX_config.h
nkhorman 11:86909e6db3c8 131 */
nkhorman 9:ddb97c9850a2 132 virtual void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color);
nkhorman 11:86909e6db3c8 133 /** Draw a vertical line
nkhorman 11:86909e6db3c8 134 * @note GFX_WANT_ABSTRACTS or GFX_SIZEABLE_TEXT must be defined in Adafruit_GFX_config.h
nkhorman 11:86909e6db3c8 135 */
nkhorman 9:ddb97c9850a2 136 virtual void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color);
nkhorman 11:86909e6db3c8 137 /** Draw and fill a rectangle
nkhorman 11:86909e6db3c8 138 * @note GFX_WANT_ABSTRACTS or GFX_SIZEABLE_TEXT must be defined in Adafruit_GFX_config.h
nkhorman 11:86909e6db3c8 139 */
nkhorman 9:ddb97c9850a2 140 virtual void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
nkhorman 9:ddb97c9850a2 141 #endif
nkhorman 9:ddb97c9850a2 142
nkhorman 11:86909e6db3c8 143 /// Draw a bitmap
nkhorman 9:ddb97c9850a2 144 void drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color);
nkhorman 11:86909e6db3c8 145 /// Draw a text character at a specified pixel location
nkhorman 9:ddb97c9850a2 146 void drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size);
nkhorman 11:86909e6db3c8 147 /// Draw a text character at the text cursor location
nkhorman 9:ddb97c9850a2 148 size_t writeChar(uint8_t);
nkhorman 9:ddb97c9850a2 149
nkhorman 11:86909e6db3c8 150 /// Get the width of the display in pixels
nkhorman 9:ddb97c9850a2 151 int16_t width(void) { return _width; };
nkhorman 11:86909e6db3c8 152 /// Get the height of the display in pixels
nkhorman 9:ddb97c9850a2 153 int16_t height(void) { return _height; };
nkhorman 9:ddb97c9850a2 154
nkhorman 11:86909e6db3c8 155 /// Set the text cursor location, based on the size of the text
nkhorman 9:ddb97c9850a2 156 void setTextCursor(int16_t x, int16_t y) { cursor_x = x; cursor_y = y; };
nkhorman 9:ddb97c9850a2 157 #if defined(GFX_SIZEABLE_TEXT)
nkhorman 11:86909e6db3c8 158 /** Set the size of the text to be drawn
nkhorman 11:86909e6db3c8 159 * @note Make sure to enable either GFX_SIZEABLE_TEXT or GFX_WANT_ABSTRACTS
nkhorman 11:86909e6db3c8 160 */
nkhorman 9:ddb97c9850a2 161 void setTextSize(uint8_t s) { textsize = (s > 0) ? s : 1; };
nkhorman 9:ddb97c9850a2 162 #endif
nkhorman 11:86909e6db3c8 163 /// Set the text foreground and background colors to be the same
nkhorman 9:ddb97c9850a2 164 void setTextColor(uint16_t c) { textcolor = c; textbgcolor = c; }
nkhorman 11:86909e6db3c8 165 /// Set the text foreground and background colors independantly
nkhorman 9:ddb97c9850a2 166 void setTextColor(uint16_t c, uint16_t b) { textcolor = c; textbgcolor = b; };
nkhorman 11:86909e6db3c8 167 /// Set text wraping mode true or false
nkhorman 9:ddb97c9850a2 168 void setTextWrap(bool w) { wrap = w; };
nkhorman 9:ddb97c9850a2 169
nkhorman 11:86909e6db3c8 170 /// Set the display rotation, 1, 2, 3, or 4
nkhorman 9:ddb97c9850a2 171 void setRotation(uint8_t r);
nkhorman 11:86909e6db3c8 172 /// Get the current rotation
nkhorman 9:ddb97c9850a2 173 uint8_t getRotation(void) { rotation %= 4; return rotation; };
nkhorman 9:ddb97c9850a2 174
nkhorman 9:ddb97c9850a2 175 protected:
nkhorman 9:ddb97c9850a2 176 int16_t _rawWidth, _rawHeight; // this is the 'raw' display w/h - never changes
nkhorman 9:ddb97c9850a2 177 int16_t _width, _height; // dependent on rotation
nkhorman 9:ddb97c9850a2 178 int16_t cursor_x, cursor_y;
nkhorman 9:ddb97c9850a2 179 uint16_t textcolor, textbgcolor;
nkhorman 9:ddb97c9850a2 180 uint8_t textsize;
nkhorman 9:ddb97c9850a2 181 uint8_t rotation;
nkhorman 9:ddb97c9850a2 182 bool wrap; // If set, 'wrap' text at right edge of display
nkhorman 9:ddb97c9850a2 183 };
nkhorman 9:ddb97c9850a2 184
nkhorman 9:ddb97c9850a2 185 #endif