Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: Adafruit_SSD1306.h
- Revision:
- 18:6fc8104e8548
- Parent:
- 15:77feec1c0684
--- a/Adafruit_SSD1306.h Thu Mar 12 15:37:16 2020 +0000 +++ b/Adafruit_SSD1306.h Fri Jul 17 09:26:07 2020 +0000 @@ -29,16 +29,6 @@ #include <vector> #include <algorithm> -// A DigitalOut sub-class that provides a constructed default state -class DigitalOut2 : public DigitalOut -{ -public: - DigitalOut2(PinName pin, bool active = false) : DigitalOut(pin) { write(active); }; - DigitalOut2& operator= (int value) { write(value); return *this; }; - DigitalOut2& operator= (DigitalOut2& rhs) { write(rhs.read()); return *this; }; - operator int() { return read(); }; -}; - #define SSD1306_EXTERNALVCC 0x1 #define SSD1306_SWITCHCAPVCC 0x2 @@ -50,136 +40,21 @@ class Adafruit_SSD1306 : public Adafruit_GFX { public: - Adafruit_SSD1306(PinName RST, uint8_t rawHeight = 32, uint8_t rawWidth = 128) + #define SSD_I2C_ADDRESS 0x78 + Adafruit_SSD1306(I2C &i2c, uint8_t i2cAddress = SSD_I2C_ADDRESS, uint8_t rawHeight = 64, uint8_t rawWidth = 128) : Adafruit_GFX(rawWidth,rawHeight) - , rst(RST,false) + , mi2c(i2c) + , mi2cAddress(i2cAddress) { buffer.resize(rawHeight * rawWidth / 8); + begin(); + //splash(); + //display(); }; void begin(uint8_t switchvcc = SSD1306_SWITCHCAPVCC); // These must be implemented in the derived transport driver - virtual void command(uint8_t c) = 0; - virtual void data(uint8_t c) = 0; - virtual void drawPixel(int16_t x, int16_t y, uint16_t color); - - /// Clear the display buffer - void clearDisplay(void); - virtual void invertDisplay(bool i); - - /// Cause the display to be updated with the buffer content. - void display(); - /// Fill the buffer with the AdaFruit splash screen. - virtual void splash(); - -protected: - virtual void sendDisplayBuffer() = 0; - DigitalOut2 rst; - - // the memory buffer for the LCD - std::vector<uint8_t> buffer; -}; - - -/** This is the SPI SSD1306 display driver transport class - * - */ -class Adafruit_SSD1306_Spi : public Adafruit_SSD1306 -{ -public: - /** Create a SSD1306 SPI transport display driver instance with the specified DC, RST, and CS pins, as well as the display dimentions - * - * Required parameters - * @param spi - a reference to an initialized SPI object - * @param DC (Data/Command) pin name - * @param RST (Reset) pin name - * @param CS (Chip Select) pin name - * - * Optional parameters - * @param rawHeight - the vertical number of pixels for the display, defaults to 32 - * @param rawWidth - the horizonal number of pixels for the display, defaults to 128 - */ - Adafruit_SSD1306_Spi(SPI &spi, PinName DC, PinName RST, PinName CS, uint8_t rawHieght = 32, uint8_t rawWidth = 128) - : Adafruit_SSD1306(RST, rawHieght, rawWidth) - , cs(CS,true) - , dc(DC,false) - , mspi(spi) - { - begin(); - splash(); - display(); - }; - - virtual void command(uint8_t c) - { - cs = 1; - dc = 0; - cs = 0; - mspi.write(c); - cs = 1; - }; - - virtual void data(uint8_t c) - { - cs = 1; - dc = 1; - cs = 0; - mspi.write(c); - cs = 1; - }; - -protected: - virtual void sendDisplayBuffer() - { - cs = 1; - dc = 1; - cs = 0; - - for(uint16_t i=0, q=buffer.size(); i<q; i++) - mspi.write(buffer[i]); - - if(height() == 32) - { - for(uint16_t i=0, q=buffer.size(); i<q; i++) - mspi.write(0); - } - - cs = 1; - }; - - DigitalOut2 cs, dc; - SPI &mspi; -}; - -/** This is the I2C SSD1306 display driver transport class - * - */ -class Adafruit_SSD1306_I2c : public Adafruit_SSD1306 -{ -public: - #define SSD_I2C_ADDRESS 0x78 - /** Create a SSD1306 I2C transport display driver instance with the specified RST pin name, the I2C address, as well as the display dimensions - * - * Required parameters - * @param i2c - A reference to an initialized I2C object - * @param RST - The Reset pin name - * - * Optional parameters - * @param i2cAddress - The i2c address of the display - * @param rawHeight - The vertical number of pixels for the display, defaults to 32 - * @param rawWidth - The horizonal number of pixels for the display, defaults to 128 - */ - Adafruit_SSD1306_I2c(I2C &i2c, PinName RST, uint8_t i2cAddress = SSD_I2C_ADDRESS, uint8_t rawHeight = 32, uint8_t rawWidth = 128) - : Adafruit_SSD1306(RST, rawHeight, rawWidth) - , mi2c(i2c) - , mi2cAddress(i2cAddress) - { - begin(); - splash(); - display(); - }; - virtual void command(uint8_t c) { char buff[2]; @@ -195,8 +70,21 @@ buff[1] = c; mi2c.write(mi2cAddress, buff, sizeof(buff)); }; + virtual void drawPixel(int16_t x, int16_t y, uint16_t color); + /// Clear the display buffer + void clearDisplay(void); + virtual void invertDisplay(bool i); + + /// Cause the display to be updated with the buffer content. + void display(); + /// Fill the buffer with the AdaFruit splash screen. + virtual void splash(); + virtual void E4_logo(); + virtual void AI_logo(); + protected: + std::vector<uint8_t> buffer; virtual void sendDisplayBuffer() { char buff[17]; @@ -212,9 +100,12 @@ mi2c.write(mi2cAddress, buff, sizeof(buff)); } }; - + I2C &mi2c; uint8_t mi2cAddress; + + // the memory buffer for the LCD + //std::vector<uint8_t> buffer; }; #endif \ No newline at end of file