TR-mbed 1.0
Loading...
Searching...
No Matches
Adafruit_SSD1306.h
Go to the documentation of this file.
1/*********************************************************************
2This is a library for our Monochrome OLEDs based on SSD1306 drivers
3
4 Pick one up today in the adafruit shop!
5 ------> http://www.adafruit.com/category/63_98
6
7These displays use SPI to communicate, 4 or 5 pins are required to
8interface
9
10Adafruit invests time and resources providing this open source code,
11please support Adafruit and open-source hardware by purchasing
12products from Adafruit!
13
14Written by Limor Fried/Ladyada for Adafruit Industries.
15BSD license, check license.txt for more information
16All text above, and the splash screen must be included in any redistribution
17*********************************************************************/
18
19/*
20 * Modified by Neal Horman 7/14/2012 for use in mbed
21 */
22
23#ifndef _ADAFRUIT_SSD1306_H_
24#define _ADAFRUIT_SSD1306_H_
25
26#include "mbed.h"
27#include "Adafruit_GFX.h"
28
29#include <vector>
30#include <algorithm>
31
32// A DigitalOut sub-class that provides a constructed default state
33class DigitalOut2 : public DigitalOut
34{
35public:
36 DigitalOut2(PinName pin, bool active = false) : DigitalOut(pin) { write(active); };
37 DigitalOut2& operator= (int value) { write(value); return *this; };
38 DigitalOut2& operator= (DigitalOut2& rhs) { write(rhs.read()); return *this; };
39 operator int() { return read(); };
40};
41
42#define SSD1306_EXTERNALVCC 0x1
43#define SSD1306_SWITCHCAPVCC 0x2
44
51{
52public:
53 Adafruit_SSD1306(PinName RST, uint8_t rawHeight = 32, uint8_t rawWidth = 128)
54 : Adafruit_GFX(rawWidth,rawHeight)
55 , rst(RST,false)
56 {
57 buffer.resize(rawHeight * rawWidth / 8);
58 };
59
60 void begin(uint8_t switchvcc = SSD1306_SWITCHCAPVCC);
61
62 // These must be implemented in the derived transport driver
63 virtual void command(uint8_t c) = 0;
64 virtual void data(uint8_t c) = 0;
65 virtual void drawPixel(int16_t x, int16_t y, uint16_t color);
66
68 void clearDisplay(void);
69 virtual void invertDisplay(bool i);
70
72 void display();
74 virtual void splash();
75
76protected:
77 virtual void sendDisplayBuffer() = 0;
79
80 // the memory buffer for the LCD
81 std::vector<uint8_t> buffer;
82};
83
84
89{
90public:
103 Adafruit_SSD1306_Spi(SPI &spi, PinName DC, PinName RST, PinName CS, uint8_t rawHieght = 32, uint8_t rawWidth = 128)
104 : Adafruit_SSD1306(RST, rawHieght, rawWidth)
105 , cs(CS,true)
106 , dc(DC,false)
107 , mspi(spi)
108 {
109 begin();
110 splash();
111 display();
112 };
113
114 virtual void command(uint8_t c)
115 {
116 cs = 1;
117 dc = 0;
118 cs = 0;
119 mspi.write(c);
120 cs = 1;
121 };
122
123 virtual void data(uint8_t c)
124 {
125 cs = 1;
126 dc = 1;
127 cs = 0;
128 mspi.write(c);
129 cs = 1;
130 };
131
132protected:
133 virtual void sendDisplayBuffer()
134 {
135 cs = 1;
136 dc = 1;
137 cs = 0;
138
139 for(uint16_t i=0, q=buffer.size(); i<q; i++)
140 mspi.write(buffer[i]);
141
142 if(height() == 32)
143 {
144 for(uint16_t i=0, q=buffer.size(); i<q; i++)
145 mspi.write(0);
146 }
147
148 cs = 1;
149 };
150
152 SPI &mspi;
153};
154
159{
160public:
161#define SSD_I2C_ADDRESS 0x78
173 Adafruit_SSD1306_I2c(I2C &i2c, PinName RST, uint8_t i2cAddress = SSD_I2C_ADDRESS, uint8_t rawHeight = 32, uint8_t rawWidth = 128)
174 : Adafruit_SSD1306(RST, rawHeight, rawWidth)
175 , mi2c(i2c)
176 , mi2cAddress(i2cAddress)
177 {
178 begin();
179 splash();
180 display();
181 };
182
183 virtual void command(uint8_t c)
184 {
185 char buff[2];
186 buff[0] = 0; // Command Mode
187 buff[1] = c;
188 mi2c.write(mi2cAddress, buff, sizeof(buff));
189 }
190
191 virtual void data(uint8_t c)
192 {
193 char buff[2];
194 buff[0] = 0x40; // Data Mode
195 buff[1] = c;
196 mi2c.write(mi2cAddress, buff, sizeof(buff));
197 };
198
199protected:
200 virtual void sendDisplayBuffer()
201 {
202 char buff[17];
203 buff[0] = 0x40; // Data Mode
204
205 // send display buffer in 16 byte chunks
206 for(uint16_t i=0, q=buffer.size(); i<q; i+=16 )
207 { uint8_t x ;
208
209 // TODO - this will segfault if buffer.size() % 16 != 0
210 for(x=1; x<sizeof(buff); x++)
211 buff[x] = buffer[i+x-1];
212 mi2c.write(mi2cAddress, buff, sizeof(buff));
213 }
214 };
215
216 I2C &mi2c;
217 uint8_t mi2cAddress;
218};
219
220#endif
#define SSD_I2C_ADDRESS
Definition Adafruit_SSD1306.h:161
#define SSD1306_SWITCHCAPVCC
Definition Adafruit_SSD1306.h:43
int i
Definition BiCGSTAB_step_by_step.cpp:9
Scalar Scalar * c
Definition benchVecAdd.cpp:17
Definition Adafruit_GFX.h:50
int16_t height(void)
Get the height of the display in pixels.
Definition Adafruit_GFX.h:151
Definition Adafruit_SSD1306.h:159
virtual void command(uint8_t c)
Definition Adafruit_SSD1306.h:183
uint8_t mi2cAddress
Definition Adafruit_SSD1306.h:217
virtual void data(uint8_t c)
Definition Adafruit_SSD1306.h:191
I2C & mi2c
Definition Adafruit_SSD1306.h:216
virtual void sendDisplayBuffer()
Definition Adafruit_SSD1306.h:200
Adafruit_SSD1306_I2c(I2C &i2c, PinName RST, uint8_t i2cAddress=SSD_I2C_ADDRESS, uint8_t rawHeight=32, uint8_t rawWidth=128)
Definition Adafruit_SSD1306.h:173
Definition Adafruit_SSD1306.h:89
virtual void data(uint8_t c)
Definition Adafruit_SSD1306.h:123
DigitalOut2 dc
Definition Adafruit_SSD1306.h:151
SPI & mspi
Definition Adafruit_SSD1306.h:152
DigitalOut2 cs
Definition Adafruit_SSD1306.h:151
Adafruit_SSD1306_Spi(SPI &spi, PinName DC, PinName RST, PinName CS, uint8_t rawHieght=32, uint8_t rawWidth=128)
Definition Adafruit_SSD1306.h:103
virtual void command(uint8_t c)
Definition Adafruit_SSD1306.h:114
virtual void sendDisplayBuffer()
Definition Adafruit_SSD1306.h:133
Definition Adafruit_SSD1306.h:51
virtual void command(uint8_t c)=0
virtual void invertDisplay(bool i)
Definition Adafruit_SSD1306.cpp:132
DigitalOut2 rst
Definition Adafruit_SSD1306.h:78
virtual void splash()
Fill the buffer with the AdaFruit splash screen.
Definition Adafruit_SSD1306.cpp:152
virtual void data(uint8_t c)=0
Adafruit_SSD1306(PinName RST, uint8_t rawHeight=32, uint8_t rawWidth=128)
Definition Adafruit_SSD1306.h:53
std::vector< uint8_t > buffer
Definition Adafruit_SSD1306.h:81
virtual void drawPixel(int16_t x, int16_t y, uint16_t color)
Paint one BLACK or WHITE pixel in the display buffer.
Definition Adafruit_SSD1306.cpp:103
void display()
Cause the display to be updated with the buffer content.
Definition Adafruit_SSD1306.cpp:138
virtual void sendDisplayBuffer()=0
void clearDisplay(void)
Clear the display buffer.
Definition Adafruit_SSD1306.cpp:147
void begin(uint8_t switchvcc=SSD1306_SWITCHCAPVCC)
Definition Adafruit_SSD1306.cpp:48
Definition Adafruit_SSD1306.h:34
DigitalOut2(PinName pin, bool active=false)
Definition Adafruit_SSD1306.h:36
DigitalOut2 & operator=(int value)
Definition Adafruit_SSD1306.h:37
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy x
Definition gnuplot_common_settings.hh:12
I2C i2c(PB_9, PB_8)
return int(ret)+1
Scalar * y
Definition level1_cplx_impl.h:124
buff_t buff
Definition ref_serial.cpp:62