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:
JojoS
Date:
Tue Nov 11 22:08:20 2014 +0000
Revision:
16:7fb1d4d3525d
Parent:
14:edb3c36aa1a7
removed test comments

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 13:8f03f908f22a 23 #include "Adafruit_GFX_Config.h"
nkhorman 9:ddb97c9850a2 24
nkhorman 9:ddb97c9850a2 25 static inline void swap(int16_t &a, int16_t &b)
nkhorman 9:ddb97c9850a2 26 {
nkhorman 9:ddb97c9850a2 27 int16_t t = a;
nkhorman 9:ddb97c9850a2 28
nkhorman 9:ddb97c9850a2 29 a = b;
nkhorman 9:ddb97c9850a2 30 b = t;
nkhorman 9:ddb97c9850a2 31 }
nkhorman 9:ddb97c9850a2 32
nkhorman 9:ddb97c9850a2 33 #ifndef _BV
nkhorman 9:ddb97c9850a2 34 #define _BV(bit) (1<<(bit))
nkhorman 9:ddb97c9850a2 35 #endif
nkhorman 9:ddb97c9850a2 36
nkhorman 9:ddb97c9850a2 37 #define BLACK 0
nkhorman 9:ddb97c9850a2 38 #define WHITE 1
nkhorman 9:ddb97c9850a2 39
nkhorman 11:86909e6db3c8 40 /**
nkhorman 11:86909e6db3c8 41 * This is a Text and Graphics element drawing class.
nkhorman 11:86909e6db3c8 42 * These functions draw to the display buffer.
nkhorman 11:86909e6db3c8 43 *
nkhorman 11:86909e6db3c8 44 * Display drivers should be derived from here.
nkhorman 11:86909e6db3c8 45 * The Display drivers push the display buffer to the
nkhorman 11:86909e6db3c8 46 * hardware based on application control.
nkhorman 11:86909e6db3c8 47 *
nkhorman 11:86909e6db3c8 48 */
nkhorman 9:ddb97c9850a2 49 class Adafruit_GFX : public Stream
nkhorman 9:ddb97c9850a2 50 {
nkhorman 9:ddb97c9850a2 51 public:
nkhorman 9:ddb97c9850a2 52 Adafruit_GFX(int16_t w, int16_t h)
nkhorman 9:ddb97c9850a2 53 : _rawWidth(w)
nkhorman 9:ddb97c9850a2 54 , _rawHeight(h)
nkhorman 9:ddb97c9850a2 55 , _width(w)
nkhorman 9:ddb97c9850a2 56 , _height(h)
nkhorman 9:ddb97c9850a2 57 , cursor_x(0)
nkhorman 9:ddb97c9850a2 58 , cursor_y(0)
nkhorman 9:ddb97c9850a2 59 , textcolor(WHITE)
nkhorman 9:ddb97c9850a2 60 , textbgcolor(BLACK)
nkhorman 9:ddb97c9850a2 61 , textsize(1)
nkhorman 9:ddb97c9850a2 62 , rotation(0)
nkhorman 9:ddb97c9850a2 63 , wrap(true)
nkhorman 9:ddb97c9850a2 64 {};
nkhorman 9:ddb97c9850a2 65
nkhorman 11:86909e6db3c8 66 /// Paint one BLACK or WHITE pixel in the display buffer
nkhorman 9:ddb97c9850a2 67 // this must be defined by the subclass
nkhorman 9:ddb97c9850a2 68 virtual void drawPixel(int16_t x, int16_t y, uint16_t color) = 0;
nkhorman 9:ddb97c9850a2 69 // this is optional
nkhorman 9:ddb97c9850a2 70 virtual void invertDisplay(bool i) {};
nkhorman 9:ddb97c9850a2 71
nkhorman 9:ddb97c9850a2 72 // Stream implementation - provides printf() interface
nkhorman 9:ddb97c9850a2 73 // You would otherwise be forced to use writeChar()
nkhorman 9:ddb97c9850a2 74 virtual int _putc(int value) { return writeChar(value); };
nkhorman 9:ddb97c9850a2 75 virtual int _getc() { return -1; };
nkhorman 9:ddb97c9850a2 76
nkhorman 9:ddb97c9850a2 77 #ifdef GFX_WANT_ABSTRACTS
nkhorman 9:ddb97c9850a2 78 // these are 'generic' drawing functions, so we can share them!
nkhorman 11:86909e6db3c8 79
nkhorman 11:86909e6db3c8 80 /** Draw a Horizontal Line
nkhorman 11:86909e6db3c8 81 * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
nkhorman 11:86909e6db3c8 82 */
nkhorman 9:ddb97c9850a2 83 virtual void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color);
nkhorman 11:86909e6db3c8 84 /** Draw a rectangle
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 drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
nkhorman 11:86909e6db3c8 88 /** Fill the entire display
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 fillScreen(uint16_t color);
nkhorman 9:ddb97c9850a2 92
nkhorman 11:86909e6db3c8 93 /** Draw a circle
nkhorman 11:86909e6db3c8 94 * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
nkhorman 11:86909e6db3c8 95 */
nkhorman 9:ddb97c9850a2 96 void drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);
nkhorman 9:ddb97c9850a2 97 void drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, uint16_t color);
nkhorman 11:86909e6db3c8 98
nkhorman 11:86909e6db3c8 99 /** Draw and fill a circle
nkhorman 11:86909e6db3c8 100 * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
nkhorman 11:86909e6db3c8 101 */
nkhorman 9:ddb97c9850a2 102 void fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);
nkhorman 9:ddb97c9850a2 103 void fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, int16_t delta, uint16_t color);
nkhorman 9:ddb97c9850a2 104
nkhorman 11:86909e6db3c8 105 /** Draw a triangle
nkhorman 11:86909e6db3c8 106 * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
nkhorman 11:86909e6db3c8 107 */
nkhorman 9:ddb97c9850a2 108 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 109 /** Draw and fill 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 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 113
nkhorman 11:86909e6db3c8 114 /** Draw a rounded rectangle
nkhorman 11:86909e6db3c8 115 * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
nkhorman 11:86909e6db3c8 116 */
nkhorman 9:ddb97c9850a2 117 void drawRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color);
nkhorman 11:86909e6db3c8 118 /** Draw and fill 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 fillRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color);
nkhorman 14:edb3c36aa1a7 122 /** Draw a bitmap
nkhorman 14:edb3c36aa1a7 123 * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
nkhorman 14:edb3c36aa1a7 124 */
nkhorman 14:edb3c36aa1a7 125 void drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, 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 text character at a specified pixel location
nkhorman 9:ddb97c9850a2 144 void drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size);
nkhorman 11:86909e6db3c8 145 /// Draw a text character at the text cursor location
nkhorman 9:ddb97c9850a2 146 size_t writeChar(uint8_t);
nkhorman 9:ddb97c9850a2 147
nkhorman 11:86909e6db3c8 148 /// Get the width of the display in pixels
nkhorman 14:edb3c36aa1a7 149 inline int16_t width(void) { return _width; };
nkhorman 11:86909e6db3c8 150 /// Get the height of the display in pixels
nkhorman 14:edb3c36aa1a7 151 inline int16_t height(void) { return _height; };
nkhorman 9:ddb97c9850a2 152
nkhorman 11:86909e6db3c8 153 /// Set the text cursor location, based on the size of the text
nkhorman 14:edb3c36aa1a7 154 inline void setTextCursor(int16_t x, int16_t y) { cursor_x = x; cursor_y = y; };
nkhorman 14:edb3c36aa1a7 155 #if defined(GFX_WANT_ABSTRACTS) || defined(GFX_SIZEABLE_TEXT)
nkhorman 11:86909e6db3c8 156 /** Set the size of the text to be drawn
nkhorman 11:86909e6db3c8 157 * @note Make sure to enable either GFX_SIZEABLE_TEXT or GFX_WANT_ABSTRACTS
nkhorman 11:86909e6db3c8 158 */
nkhorman 14:edb3c36aa1a7 159 inline void setTextSize(uint8_t s) { textsize = (s > 0) ? s : 1; };
nkhorman 9:ddb97c9850a2 160 #endif
nkhorman 11:86909e6db3c8 161 /// Set the text foreground and background colors to be the same
nkhorman 14:edb3c36aa1a7 162 inline void setTextColor(uint16_t c) { textcolor = c; textbgcolor = c; }
nkhorman 11:86909e6db3c8 163 /// Set the text foreground and background colors independantly
nkhorman 14:edb3c36aa1a7 164 inline void setTextColor(uint16_t c, uint16_t b) { textcolor = c; textbgcolor = b; };
nkhorman 11:86909e6db3c8 165 /// Set text wraping mode true or false
nkhorman 14:edb3c36aa1a7 166 inline void setTextWrap(bool w) { wrap = w; };
nkhorman 9:ddb97c9850a2 167
nkhorman 11:86909e6db3c8 168 /// Set the display rotation, 1, 2, 3, or 4
nkhorman 9:ddb97c9850a2 169 void setRotation(uint8_t r);
nkhorman 11:86909e6db3c8 170 /// Get the current rotation
nkhorman 14:edb3c36aa1a7 171 inline uint8_t getRotation(void) { rotation %= 4; return rotation; };
nkhorman 9:ddb97c9850a2 172
nkhorman 9:ddb97c9850a2 173 protected:
nkhorman 9:ddb97c9850a2 174 int16_t _rawWidth, _rawHeight; // this is the 'raw' display w/h - never changes
nkhorman 9:ddb97c9850a2 175 int16_t _width, _height; // dependent on rotation
nkhorman 9:ddb97c9850a2 176 int16_t cursor_x, cursor_y;
nkhorman 9:ddb97c9850a2 177 uint16_t textcolor, textbgcolor;
nkhorman 9:ddb97c9850a2 178 uint8_t textsize;
nkhorman 9:ddb97c9850a2 179 uint8_t rotation;
nkhorman 9:ddb97c9850a2 180 bool wrap; // If set, 'wrap' text at right edge of display
nkhorman 9:ddb97c9850a2 181 };
nkhorman 9:ddb97c9850a2 182
nkhorman 9:ddb97c9850a2 183 #endif