SSD1306 LCD 96x16 model
Dependents: testSoftware8_alles_display
Fork of ssd1306_library by
ssd1306.h@11:1b5a69808460, 2018-08-09 (annotated)
- Committer:
- mikevd1
- Date:
- Thu Aug 09 12:41:15 2018 +0000
- Revision:
- 11:1b5a69808460
- Parent:
- 10:346065d26cc9
- Child:
- 13:e52c5cb758ca
Werkend display
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rodriguj | 0:3d84b3bfb794 | 1 | /* |
rodriguj | 4:35757c8b7625 | 2 | * ssd1306.cpp |
rodriguj | 0:3d84b3bfb794 | 3 | * |
rodriguj | 0:3d84b3bfb794 | 4 | * Created on: 20 oct. 2017 |
rodriguj | 3:bb6fba3e84ff | 5 | * Author: Miguel Angel Rodriguez Jodar |
rodriguj | 3:bb6fba3e84ff | 6 | * |
rodriguj | 3:bb6fba3e84ff | 7 | * Based upon Adafruit library. |
rodriguj | 3:bb6fba3e84ff | 8 | * GPL licensed. |
rodriguj | 3:bb6fba3e84ff | 9 | * |
rodriguj | 0:3d84b3bfb794 | 10 | */ |
rodriguj | 3:bb6fba3e84ff | 11 | |
rodriguj | 0:3d84b3bfb794 | 12 | #ifndef MBED_SSD1306_LIBRARY |
rodriguj | 0:3d84b3bfb794 | 13 | #define MBED_SSD1306_LIBRARY |
rodriguj | 0:3d84b3bfb794 | 14 | |
rodriguj | 0:3d84b3bfb794 | 15 | #include "mbed.h" |
rodriguj | 0:3d84b3bfb794 | 16 | |
rodriguj | 4:35757c8b7625 | 17 | #define SSD1306_IS_COMMAND 0x00 |
rodriguj | 4:35757c8b7625 | 18 | #define SSD1306_IS_DATA 0x40 |
rodriguj | 4:35757c8b7625 | 19 | #define SSD1306_IS_NOT_LAST 0x80 |
rodriguj | 4:35757c8b7625 | 20 | #define SSD1306_IS_LAST 0x00 |
rodriguj | 0:3d84b3bfb794 | 21 | |
rodriguj | 0:3d84b3bfb794 | 22 | #define SSD1306_SETCONTRAST 0x81 |
rodriguj | 0:3d84b3bfb794 | 23 | #define SSD1306_DISPLAYALLON_RESUME 0xA4 |
rodriguj | 0:3d84b3bfb794 | 24 | #define SSD1306_DISPLAYALLON 0xA5 |
rodriguj | 0:3d84b3bfb794 | 25 | #define SSD1306_NORMALDISPLAY 0xA6 |
rodriguj | 0:3d84b3bfb794 | 26 | #define SSD1306_INVERTDISPLAY 0xA7 |
rodriguj | 0:3d84b3bfb794 | 27 | #define SSD1306_DISPLAYOFF 0xAE |
rodriguj | 0:3d84b3bfb794 | 28 | #define SSD1306_DISPLAYON 0xAF |
rodriguj | 0:3d84b3bfb794 | 29 | |
mikevd1 | 11:1b5a69808460 | 30 | #define SSD1306_SETCOLUMNADRESS 0x21 |
mikevd1 | 11:1b5a69808460 | 31 | #define SSD1306_SETPAGEADRESS 0x22 |
mikevd1 | 11:1b5a69808460 | 32 | |
rodriguj | 0:3d84b3bfb794 | 33 | #define SSD1306_SETDISPLAYOFFSET 0xD3 |
rodriguj | 0:3d84b3bfb794 | 34 | #define SSD1306_SETCOMPINS 0xDA |
rodriguj | 0:3d84b3bfb794 | 35 | |
rodriguj | 0:3d84b3bfb794 | 36 | #define SSD1306_SETVCOMDETECT 0xDB |
rodriguj | 0:3d84b3bfb794 | 37 | |
rodriguj | 0:3d84b3bfb794 | 38 | #define SSD1306_SETDISPLAYCLOCKDIV 0xD5 |
rodriguj | 0:3d84b3bfb794 | 39 | #define SSD1306_SETPRECHARGE 0xD9 |
rodriguj | 0:3d84b3bfb794 | 40 | |
rodriguj | 0:3d84b3bfb794 | 41 | #define SSD1306_SETMULTIPLEX 0xA8 |
rodriguj | 0:3d84b3bfb794 | 42 | |
rodriguj | 0:3d84b3bfb794 | 43 | #define SSD1306_SETLOWCOLUMN 0x00 |
rodriguj | 0:3d84b3bfb794 | 44 | #define SSD1306_SETHIGHCOLUMN 0x10 |
rodriguj | 0:3d84b3bfb794 | 45 | |
rodriguj | 0:3d84b3bfb794 | 46 | #define SSD1306_SETSTARTLINE 0x40 |
rodriguj | 0:3d84b3bfb794 | 47 | |
rodriguj | 0:3d84b3bfb794 | 48 | #define SSD1306_MEMORYMODE 0x20 |
rodriguj | 0:3d84b3bfb794 | 49 | |
rodriguj | 0:3d84b3bfb794 | 50 | #define SSD1306_COMSCANINC 0xC0 |
rodriguj | 0:3d84b3bfb794 | 51 | #define SSD1306_COMSCANDEC 0xC8 |
rodriguj | 0:3d84b3bfb794 | 52 | |
rodriguj | 0:3d84b3bfb794 | 53 | #define SSD1306_SEGREMAP 0xA0 |
rodriguj | 0:3d84b3bfb794 | 54 | |
rodriguj | 0:3d84b3bfb794 | 55 | #define SSD1306_CHARGEPUMP 0x8D |
rodriguj | 0:3d84b3bfb794 | 56 | |
rodriguj | 0:3d84b3bfb794 | 57 | #define SSD1306_EXTERNALVCC 0x1 |
rodriguj | 0:3d84b3bfb794 | 58 | #define SSD1306_SWITCHCAPVCC 0x2 |
rodriguj | 0:3d84b3bfb794 | 59 | |
rodriguj | 0:3d84b3bfb794 | 60 | // Scrolling #defines |
rodriguj | 0:3d84b3bfb794 | 61 | #define SSD1306_ACTIVATE_SCROLL 0x2F |
rodriguj | 0:3d84b3bfb794 | 62 | #define SSD1306_DEACTIVATE_SCROLL 0x2E |
rodriguj | 0:3d84b3bfb794 | 63 | #define SSD1306_SET_VERTICAL_SCROLL_AREA 0xA3 |
rodriguj | 0:3d84b3bfb794 | 64 | #define SSD1306_RIGHT_HORIZONTAL_SCROLL 0x26 |
rodriguj | 0:3d84b3bfb794 | 65 | #define SSD1306_LEFT_HORIZONTAL_SCROLL 0x27 |
rodriguj | 0:3d84b3bfb794 | 66 | #define SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL 0x29 |
rodriguj | 0:3d84b3bfb794 | 67 | #define SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL 0x2A |
rodriguj | 0:3d84b3bfb794 | 68 | |
rodriguj | 7:b0e7ccc9138b | 69 | /** |
rodriguj | 7:b0e7ccc9138b | 70 | * SSD1306. A class for interacting with SSD1306 controlled 128x64 cheap OLED displays |
rodriguj | 8:09b1578f93d9 | 71 | * |
rodriguj | 8:09b1578f93d9 | 72 | * Example of use: |
rodriguj | 8:09b1578f93d9 | 73 | * @code |
rodriguj | 8:09b1578f93d9 | 74 | * #include "mbed.h" |
rodriguj | 8:09b1578f93d9 | 75 | * #include "ssd1306.h" |
rodriguj | 8:09b1578f93d9 | 76 | * |
rodriguj | 8:09b1578f93d9 | 77 | * SSD1306 lcd (I2C_SDA, I2C_SCL); // assumes default I2C address of 0x78 |
rodriguj | 8:09b1578f93d9 | 78 | * AnalogIn knob (A0); // potentiometer to analog pin A0 |
rodriguj | 8:09b1578f93d9 | 79 | * |
rodriguj | 8:09b1578f93d9 | 80 | * int main() |
rodriguj | 8:09b1578f93d9 | 81 | * { |
rodriguj | 8:09b1578f93d9 | 82 | * lcd.speed (SSD1306::Medium); // set working frequency |
rodriguj | 8:09b1578f93d9 | 83 | * lcd.init(); // initialize SSD1306 |
rodriguj | 8:09b1578f93d9 | 84 | * lcd.cls(); // clear frame buffer |
rodriguj | 8:09b1578f93d9 | 85 | * lcd.locate (3,1); // set text cursor to line 3, column 1 |
rodriguj | 8:09b1578f93d9 | 86 | * lcd.printf ("Hello, world!"); // print to frame buffer |
rodriguj | 9:57209a7e9cba | 87 | * lcd.line ( 6, 22, 114, 22, SSD1306::Normal); // |
rodriguj | 9:57209a7e9cba | 88 | * lcd.line (114, 22, 114, 33, SSD1306::Normal); // Surrounds text with |
rodriguj | 9:57209a7e9cba | 89 | * lcd.line (114, 33, 6, 33, SSD1306::Normal); // a rectangle |
rodriguj | 9:57209a7e9cba | 90 | * lcd.line ( 6, 33, 6, 22, SSD1306::Normal); // |
rodriguj | 8:09b1578f93d9 | 91 | * lcd.fill (0, 0); // fills screen outside rectangle |
rodriguj | 8:09b1578f93d9 | 92 | * lcd.redraw(); // updates actual display transferring frame buffer over I2C bus |
rodriguj | 8:09b1578f93d9 | 93 | * while (1) { |
rodriguj | 8:09b1578f93d9 | 94 | * unsigned char level = 255*knob.read(); // reads pot. Scales to 0-255 |
rodriguj | 8:09b1578f93d9 | 95 | * lcd.set_contrast (level); // set contrast |
rodriguj | 8:09b1578f93d9 | 96 | * wait_ms (20); // waits a little to prevent excesive I2C traffic |
rodriguj | 8:09b1578f93d9 | 97 | * } |
rodriguj | 8:09b1578f93d9 | 98 | * } |
rodriguj | 8:09b1578f93d9 | 99 | * @endcode |
rodriguj | 7:b0e7ccc9138b | 100 | */ |
rodriguj | 4:35757c8b7625 | 101 | class SSD1306 { |
rodriguj | 0:3d84b3bfb794 | 102 | public: |
rodriguj | 6:cff0e772910f | 103 | /** |
rodriguj | 6:cff0e772910f | 104 | * PlotStyle. Defines how pixels being plotted interact with existing pixels on the screen |
rodriguj | 6:cff0e772910f | 105 | */ |
rodriguj | 0:3d84b3bfb794 | 106 | enum PlotStyle |
rodriguj | 0:3d84b3bfb794 | 107 | { |
rodriguj | 8:09b1578f93d9 | 108 | Normal, /**< The point is set on the display */ |
rodriguj | 8:09b1578f93d9 | 109 | Inverse, /**< The point is erased on the display */ |
rodriguj | 8:09b1578f93d9 | 110 | Xor /**< The point is erased on the display if it was already set, otherwise, it is set */ |
rodriguj | 0:3d84b3bfb794 | 111 | }; |
rodriguj | 0:3d84b3bfb794 | 112 | |
rodriguj | 6:cff0e772910f | 113 | /** |
rodriguj | 6:cff0e772910f | 114 | * I2CSpeed. Defines the speed of the I2C bus |
rodriguj | 6:cff0e772910f | 115 | */ |
rodriguj | 0:3d84b3bfb794 | 116 | enum I2CSpeed |
rodriguj | 0:3d84b3bfb794 | 117 | { |
rodriguj | 8:09b1578f93d9 | 118 | Slow, /**< I2C frequency is set to 100 kHz */ |
rodriguj | 8:09b1578f93d9 | 119 | Medium, /**< I2C frequency is set to 400 kHz */ |
rodriguj | 8:09b1578f93d9 | 120 | Fast /**< I2C frequency is set to 1 MHz. Use it only with short connections to host */ |
rodriguj | 0:3d84b3bfb794 | 121 | }; |
rodriguj | 0:3d84b3bfb794 | 122 | |
rodriguj | 6:cff0e772910f | 123 | /** |
rodriguj | 6:cff0e772910f | 124 | * Creates an instance of a SSD1306 driver, specifying I2C pins to use |
rodriguj | 6:cff0e772910f | 125 | * |
rodriguj | 6:cff0e772910f | 126 | * @param sda I2C data line pin |
rodriguj | 6:cff0e772910f | 127 | * @param scl I2C clock line pin |
rodriguj | 6:cff0e772910f | 128 | */ |
rodriguj | 3:bb6fba3e84ff | 129 | SSD1306 (PinName sda, PinName scl, char ssd1306_addr = 0x78); |
rodriguj | 3:bb6fba3e84ff | 130 | |
rodriguj | 6:cff0e772910f | 131 | /** |
rodriguj | 6:cff0e772910f | 132 | * Creates an instance of a SSD1306 driver using an existing I2C object |
rodriguj | 6:cff0e772910f | 133 | * |
rodriguj | 6:cff0e772910f | 134 | * @param busi2c I2C object |
rodriguj | 6:cff0e772910f | 135 | * @param ssd1306_addr I2C addr of SSD1306 controller |
rodriguj | 6:cff0e772910f | 136 | */ |
rodriguj | 3:bb6fba3e84ff | 137 | SSD1306 (I2C &busi2c, char ssd1306_addr = 0x78); |
rodriguj | 0:3d84b3bfb794 | 138 | |
rodriguj | 6:cff0e772910f | 139 | /** |
rodriguj | 6:cff0e772910f | 140 | * Set the frequency of the I2C interface |
rodriguj | 6:cff0e772910f | 141 | * |
rodriguj | 6:cff0e772910f | 142 | * @param hz The bus frequency in hertz |
rodriguj | 6:cff0e772910f | 143 | */ |
rodriguj | 0:3d84b3bfb794 | 144 | void speed (I2CSpeed spd); |
rodriguj | 0:3d84b3bfb794 | 145 | |
rodriguj | 6:cff0e772910f | 146 | /** |
rodriguj | 6:cff0e772910f | 147 | * Initialize the SSD1306 controller |
rodriguj | 6:cff0e772910f | 148 | */ |
rodriguj | 0:3d84b3bfb794 | 149 | int init (void); |
rodriguj | 0:3d84b3bfb794 | 150 | |
rodriguj | 6:cff0e772910f | 151 | /** |
mikevd1 | 10:346065d26cc9 | 152 | * Initialize the SSD1306 controller |
mikevd1 | 10:346065d26cc9 | 153 | */ |
mikevd1 | 10:346065d26cc9 | 154 | int initAll (void); |
mikevd1 | 10:346065d26cc9 | 155 | |
mikevd1 | 10:346065d26cc9 | 156 | /** |
rodriguj | 6:cff0e772910f | 157 | * Scrolls up one text line |
rodriguj | 6:cff0e772910f | 158 | * |
rodriguj | 6:cff0e772910f | 159 | * @param refresh (optional) Force an actual screen redraw after scrolling |
rodriguj | 6:cff0e772910f | 160 | */ |
rodriguj | 1:c5cf4ca5939f | 161 | void scroll (bool refresh=false); |
rodriguj | 0:3d84b3bfb794 | 162 | |
rodriguj | 6:cff0e772910f | 163 | /** |
rodriguj | 6:cff0e772910f | 164 | * Print a character at the current text position. Updates the text position and forces a scroll if at the end of the screen |
rodriguj | 6:cff0e772910f | 165 | * |
rodriguj | 6:cff0e772910f | 166 | * @param c ASCII code of the character to print (8-bit ASCII code, use original IBM code page 437. No control codes. |
rodriguj | 6:cff0e772910f | 167 | * @param refresh (optional) Force an actual screen redraw after scrolling |
rodriguj | 6:cff0e772910f | 168 | */ |
rodriguj | 1:c5cf4ca5939f | 169 | void putchar (char c, bool refresh=false); |
rodriguj | 0:3d84b3bfb794 | 170 | |
rodriguj | 6:cff0e772910f | 171 | /** |
rodriguj | 6:cff0e772910f | 172 | * Prints a NUL terminated string |
rodriguj | 6:cff0e772910f | 173 | * |
rodriguj | 6:cff0e772910f | 174 | * @param s C-style string (NUL terminated) to print. |
rodriguj | 8:09b1578f93d9 | 175 | * @param refresh (optional) Force an actual screen redraw after the operation |
rodriguj | 6:cff0e772910f | 176 | */ |
rodriguj | 2:7f1160c1a741 | 177 | void puts (char *s, bool refresh=false); |
rodriguj | 3:bb6fba3e84ff | 178 | |
rodriguj | 6:cff0e772910f | 179 | /** |
rodriguj | 6:cff0e772910f | 180 | * printf interface to SSD1306 controller |
rodriguj | 6:cff0e772910f | 181 | * |
rodriguj | 6:cff0e772910f | 182 | * @param fmt Format string. |
rodriguj | 6:cff0e772910f | 183 | */ |
rodriguj | 4:35757c8b7625 | 184 | void printf (const char *fmt,...); |
rodriguj | 2:7f1160c1a741 | 185 | |
rodriguj | 6:cff0e772910f | 186 | /** |
rodriguj | 6:cff0e772910f | 187 | * Change the text position |
rodriguj | 6:cff0e772910f | 188 | * |
rodriguj | 6:cff0e772910f | 189 | * @param row Text row (0-7) to print the next character |
rodriguj | 6:cff0e772910f | 190 | * @param column Text column (0-15) to print the next character |
rodriguj | 6:cff0e772910f | 191 | */ |
rodriguj | 2:7f1160c1a741 | 192 | void locate (char row, char column); |
rodriguj | 2:7f1160c1a741 | 193 | |
rodriguj | 6:cff0e772910f | 194 | /** |
rodriguj | 8:09b1578f93d9 | 195 | * (Deprecated: use redraw instead) Redraws the physical display, sending the content of the display memory to the SSD1306 controller using the I2C bus. |
rodriguj | 6:cff0e772910f | 196 | */ |
rodriguj | 0:3d84b3bfb794 | 197 | void display (void); |
rodriguj | 0:3d84b3bfb794 | 198 | |
rodriguj | 6:cff0e772910f | 199 | /** |
rodriguj | 8:09b1578f93d9 | 200 | * Redraws the physical display, sending the content of the display memory to the SSD1306 controller using the I2C bus |
rodriguj | 8:09b1578f93d9 | 201 | */ |
rodriguj | 8:09b1578f93d9 | 202 | void redraw (void); |
rodriguj | 8:09b1578f93d9 | 203 | |
rodriguj | 8:09b1578f93d9 | 204 | /** |
rodriguj | 6:cff0e772910f | 205 | * Changes the contrast (actually, pixel brightness) of the screen |
rodriguj | 6:cff0e772910f | 206 | * |
rodriguj | 6:cff0e772910f | 207 | * @param v Contrast level (0-255) |
rodriguj | 6:cff0e772910f | 208 | */ |
rodriguj | 0:3d84b3bfb794 | 209 | void set_contrast (char v); |
rodriguj | 0:3d84b3bfb794 | 210 | |
rodriguj | 6:cff0e772910f | 211 | /** |
rodriguj | 6:cff0e772910f | 212 | * Clear screen and optionally, fills it with a predefined picture (in 128x64 OLED format, see display datasheet). Also resets the text position. |
rodriguj | 6:cff0e772910f | 213 | * |
rodriguj | 6:cff0e772910f | 214 | * @param bkground If not NULL, should point to a 1024 byte buffer with the image to load to the display |
rodriguj | 8:09b1578f93d9 | 215 | * @param refresh (optional) Force an actual screen redraw after the operation |
rodriguj | 6:cff0e772910f | 216 | */ |
rodriguj | 1:c5cf4ca5939f | 217 | void cls (char *bkground=NULL, bool refresh=false); |
rodriguj | 0:3d84b3bfb794 | 218 | |
mikevd1 | 10:346065d26cc9 | 219 | |
mikevd1 | 10:346065d26cc9 | 220 | /** |
mikevd1 | 10:346065d26cc9 | 221 | * fills screen |
mikevd1 | 10:346065d26cc9 | 222 | * |
mikevd1 | 10:346065d26cc9 | 223 | * @param bkground If not NULL, should point to a 1024 byte buffer with the image to load to the display |
mikevd1 | 10:346065d26cc9 | 224 | * @param refresh (optional) Force an actual screen redraw after the operation |
mikevd1 | 10:346065d26cc9 | 225 | */ |
mikevd1 | 10:346065d26cc9 | 226 | void bitMap (char *bkground=NULL, bool refresh=false); |
mikevd1 | 10:346065d26cc9 | 227 | |
rodriguj | 6:cff0e772910f | 228 | /** |
rodriguj | 6:cff0e772910f | 229 | * Plots a pixel. |
rodriguj | 6:cff0e772910f | 230 | * |
rodriguj | 6:cff0e772910f | 231 | * @param x x-coordinate (0-127) of the pixel. X coordinates go left to right. |
rodriguj | 6:cff0e772910f | 232 | * @param y y-coordinate (0-63) of the pixel. Y coordinates go up to down. |
rodriguj | 6:cff0e772910f | 233 | * @param mode. Plot style mode: Normal (pixel is drawn), Inverse (pixel is erased), or Xor (pixel is erased if background position is already set, otherwise is drawn) |
rodriguj | 8:09b1578f93d9 | 234 | * @param refresh (optional) Force an actual screen redraw after plotting |
rodriguj | 6:cff0e772910f | 235 | */ |
rodriguj | 4:35757c8b7625 | 236 | void plot (char x, char y, PlotStyle mode, bool refresh=false); |
rodriguj | 1:c5cf4ca5939f | 237 | |
rodriguj | 6:cff0e772910f | 238 | /** |
rodriguj | 6:cff0e772910f | 239 | * Returns the state of a pixel coordinate from screen |
rodriguj | 6:cff0e772910f | 240 | * |
rodriguj | 6:cff0e772910f | 241 | * @param x x-coordinate (0-127) of the pixel. X coordinates go left to right. |
rodriguj | 6:cff0e772910f | 242 | * @param y y-coordinate (0-63) of the pixel. Y coordinates go up to down. |
rodriguj | 6:cff0e772910f | 243 | * @return true if the pixel was set, or false otherwise |
rodriguj | 6:cff0e772910f | 244 | */ |
rodriguj | 3:bb6fba3e84ff | 245 | bool point (char x, char y); |
rodriguj | 3:bb6fba3e84ff | 246 | |
rodriguj | 6:cff0e772910f | 247 | /** |
rodriguj | 6:cff0e772910f | 248 | * Draws a line using the Bresenham algorithm |
rodriguj | 6:cff0e772910f | 249 | * |
rodriguj | 6:cff0e772910f | 250 | * @param x0 x-coordinate (0-127) of the starting point |
rodriguj | 6:cff0e772910f | 251 | * @param y0 y-coordinate (0-63) of the starting point |
rodriguj | 6:cff0e772910f | 252 | * @param x1 x-coordinate (0-127) of the ending point |
rodriguj | 6:cff0e772910f | 253 | * @param y1 y-coordinate (0-63) of the ending point |
rodriguj | 6:cff0e772910f | 254 | * @param mode. Plot style mode: Normal (pixel is drawn), Inverse (pixel is erased), or Xor (pixel is erased if background position is already set, otherwise is drawn) |
rodriguj | 8:09b1578f93d9 | 255 | * @param refresh (optional) Force an actual screen redraw after drawing the line |
rodriguj | 6:cff0e772910f | 256 | */ |
rodriguj | 4:35757c8b7625 | 257 | void line (char x0, char y0, char x1, char y1, PlotStyle mode, bool refresh=false); |
rodriguj | 0:3d84b3bfb794 | 258 | |
rodriguj | 6:cff0e772910f | 259 | /** |
rodriguj | 6:cff0e772910f | 260 | * Draws a circle |
rodriguj | 6:cff0e772910f | 261 | * |
rodriguj | 6:cff0e772910f | 262 | * @param x0 x-coordinate (0-127) of the center point |
rodriguj | 6:cff0e772910f | 263 | * @param y0 y-coordinate (0-63) of the center point |
rodriguj | 6:cff0e772910f | 264 | * @param r radius of the circle |
rodriguj | 6:cff0e772910f | 265 | * @param mode. Plot style mode: Normal (pixel is drawn), Inverse (pixel is erased), or Xor (pixel is erased if background position is already set, otherwise is drawn) |
rodriguj | 8:09b1578f93d9 | 266 | * @param refresh (optional) Force an actual screen redraw after drawing the shape |
rodriguj | 6:cff0e772910f | 267 | */ |
rodriguj | 4:35757c8b7625 | 268 | void circle (char x0, char y0, char r, PlotStyle mode, bool refresh=false); |
rodriguj | 3:bb6fba3e84ff | 269 | |
rodriguj | 8:09b1578f93d9 | 270 | /** |
rodriguj | 8:09b1578f93d9 | 271 | * Flood fills an area surrounded by the screen edge and/or a closed shape. |
rodriguj | 8:09b1578f93d9 | 272 | * |
rodriguj | 8:09b1578f93d9 | 273 | * @param x x-coordinate (0-127) of a point inside the area to fill, not plotted |
rodriguj | 8:09b1578f93d9 | 274 | * @param y y-coordinate (0-63) of a point inside the area to fill, not plotted |
rodriguj | 8:09b1578f93d9 | 275 | * @param refresh (optional) Force an actual screen redraw after the operation |
rodriguj | 8:09b1578f93d9 | 276 | */ |
rodriguj | 8:09b1578f93d9 | 277 | void fill (char x, char y, bool refresh=false); |
rodriguj | 8:09b1578f93d9 | 278 | |
rodriguj | 0:3d84b3bfb794 | 279 | virtual ~SSD1306 () { |
rodriguj | 3:bb6fba3e84ff | 280 | if (!do_not_delete_bus) |
rodriguj | 3:bb6fba3e84ff | 281 | delete bus; |
rodriguj | 0:3d84b3bfb794 | 282 | delete fb; |
rodriguj | 0:3d84b3bfb794 | 283 | } |
rodriguj | 0:3d84b3bfb794 | 284 | |
rodriguj | 0:3d84b3bfb794 | 285 | protected: |
rodriguj | 4:35757c8b7625 | 286 | I2C *bus; // I2C object |
rodriguj | 4:35757c8b7625 | 287 | char ssd1306_i2c_addr; // I2C address of SSD1306 controller |
rodriguj | 4:35757c8b7625 | 288 | char *fb; // pointer to display buffer (1024 bytes) |
rodriguj | 4:35757c8b7625 | 289 | char do_not_delete_bus; // flag to prevent deletion of bus when destroying SSD1306 object |
rodriguj | 4:35757c8b7625 | 290 | int idxfb; // Current text position (referred to screen address memory) |
rodriguj | 4:35757c8b7625 | 291 | int command (char c); // Sends a I2C command to SSD1306 |
rodriguj | 4:35757c8b7625 | 292 | int data (char d); // Sends I2C data to SSD1306 |
rodriguj | 4:35757c8b7625 | 293 | int command_data (char c, char c_or_d, char lastitem); // Sends a command or data and signal if it is not the last command/data in a list |
rodriguj | 4:35757c8b7625 | 294 | char scan (); // Scans the I2C bus searcing for I2C id's 0x78 or 0x7A. Currently not used |
rodriguj | 0:3d84b3bfb794 | 295 | }; |
rodriguj | 0:3d84b3bfb794 | 296 | |
rodriguj | 0:3d84b3bfb794 | 297 | #endif |