displaying on SSD1306, 128x64 pixels OLED

Dependencies:   microbit

Committer:
bvirk
Date:
Tue Feb 18 15:18:59 2020 +0000
Revision:
4:19da6ea94042
Parent:
3:f36427797fd7
Child:
6:c69f08f464b5
as requestet

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bvirk 3:f36427797fd7 1 #include "MicroBit.h"
bvirk 4:19da6ea94042 2 #include <vector>
bvirk 4:19da6ea94042 3 #include "cppNorm.h"
bvirk 4:19da6ea94042 4 #ifndef microbitOLED_OLED
bvirk 4:19da6ea94042 5 #define microbitOLED_OLED
bvirk 3:f36427797fd7 6
bvirk 4:19da6ea94042 7 /**
bvirk 4:19da6ea94042 8 * Access to bit 0-7, named by0 or x, and bit 8-15, named by1 or y
bvirk 4:19da6ea94042 9 * of 16 bit named that16. Can be consructed with either two uint8_t or
bvirk 4:19da6ea94042 10 * a uint16_t
bvirk 4:19da6ea94042 11 */
bvirk 4:19da6ea94042 12 union uint16 {
bvirk 4:19da6ea94042 13 struct {
bvirk 4:19da6ea94042 14 uint8_t by0;
bvirk 4:19da6ea94042 15 uint8_t by1;
bvirk 4:19da6ea94042 16 };
bvirk 4:19da6ea94042 17 struct {
bvirk 4:19da6ea94042 18 uint8_t x;
bvirk 4:19da6ea94042 19 uint8_t y;
bvirk 4:19da6ea94042 20 };
bvirk 4:19da6ea94042 21 uint16_t that16;
bvirk 4:19da6ea94042 22 uint16(uint16_t all) : that16(all) {}
bvirk 4:19da6ea94042 23 uint16(uint8_t byte1,uint8_t byte0) : by1(byte1),by0(byte0) {}
bvirk 4:19da6ea94042 24 };
bvirk 4:19da6ea94042 25
bvirk 4:19da6ea94042 26 /**
bvirk 4:19da6ea94042 27 * Representation of a 128x64 pixels, SSD1306 compatibel OLED display
bvirk 4:19da6ea94042 28 */
bvirk 3:f36427797fd7 29 class OLED {
bvirk 3:f36427797fd7 30 static const uint8_t chipAdress = 0x78;
bvirk 3:f36427797fd7 31 static const uint8_t xOffset = 0;
bvirk 3:f36427797fd7 32 static const uint8_t yOffset = 0;
bvirk 3:f36427797fd7 33
bvirk 4:19da6ea94042 34 unsigned char textArea[22][9];
bvirk 3:f36427797fd7 35 uint8_t charX;
bvirk 3:f36427797fd7 36 uint8_t charY;
bvirk 3:f36427797fd7 37 uint8_t displayWidth;
bvirk 3:f36427797fd7 38 uint8_t displayHeight;
bvirk 3:f36427797fd7 39 uint16_t screenSize;
bvirk 3:f36427797fd7 40 bool loadStarted;
bvirk 3:f36427797fd7 41 float loadPercent;
bvirk 4:19da6ea94042 42 bool pendingNewline;
bvirk 3:f36427797fd7 43
bvirk 3:f36427797fd7 44 MicroBitI2C i2c;
bvirk 3:f36427797fd7 45
bvirk 4:19da6ea94042 46 void init(uint8_t width, uint8_t height);
bvirk 3:f36427797fd7 47 void command(uint8_t cmd);
bvirk 4:19da6ea94042 48 void setTextArea(uint8_t chr, bool setLine8);
bvirk 4:19da6ea94042 49
bvirk 4:19da6ea94042 50
bvirk 4:19da6ea94042 51 public:
bvirk 4:19da6ea94042 52
bvirk 4:19da6ea94042 53 /**
bvirk 4:19da6ea94042 54 * ssd1306 compatible device of 128x64 pixels OLED display.
bvirk 4:19da6ea94042 55 * Init() must be called after construction.
bvirk 4:19da6ea94042 56 */
bvirk 4:19da6ea94042 57 OLED();
bvirk 4:19da6ea94042 58
bvirk 4:19da6ea94042 59 /**
bvirk 4:19da6ea94042 60 * Initialisere display and clears it. A buffer representing charaters are
bvirk 4:19da6ea94042 61 * filled with space characters
bvirk 4:19da6ea94042 62 */
bvirk 4:19da6ea94042 63 void init();
bvirk 4:19da6ea94042 64
bvirk 4:19da6ea94042 65 /**
bvirk 4:19da6ea94042 66 * clears the display
bvirk 4:19da6ea94042 67 */
bvirk 3:f36427797fd7 68 void clear();
bvirk 4:19da6ea94042 69
bvirk 4:19da6ea94042 70 /**
bvirk 4:19da6ea94042 71 * Makes a newline by incrementing charY and assigning xOffset to charX
bvirk 4:19da6ea94042 72 * if charY becomes 8 the display screen is scrolled one line and charY
bvirk 4:19da6ea94042 73 * is decremented to 7. pendingNewline=false is done at last.
bvirk 4:19da6ea94042 74 */
bvirk 3:f36427797fd7 75 void newLine();
bvirk 4:19da6ea94042 76
bvirk 4:19da6ea94042 77 /**
bvirk 4:19da6ea94042 78 * Put a char on display. A value in range [0x00,0xFF] i permitted -
bvirk 4:19da6ea94042 79 * 0,0xff and 0x20 are bitpatterns with all null pixels (like space)
bvirk 4:19da6ea94042 80 *
bvirk 4:19da6ea94042 81 * @param x horizontal pixelwise position, range [0,displayWidth - 6]
bvirk 4:19da6ea94042 82 * @param y vertical position, range [0,7]
bvirk 4:19da6ea94042 83 */
bvirk 3:f36427797fd7 84 void drawChar(uint8_t x, uint8_t y, uint8_t chr );
bvirk 4:19da6ea94042 85
bvirk 4:19da6ea94042 86 /**
bvirk 4:19da6ea94042 87 * Write a string at charX, charY position. Afterwards are
bvirk 4:19da6ea94042 88 * charX, charY set to the new starting point for writting
bvirk 4:19da6ea94042 89 *
bvirk 4:19da6ea94042 90 * @param str to be displayed at (charX, charY).
bvirk 4:19da6ea94042 91 */
bvirk 4:19da6ea94042 92 void write(string str);
bvirk 4:19da6ea94042 93
bvirk 4:19da6ea94042 94 /**
bvirk 4:19da6ea94042 95 * Write string at x posion 0 of charY. Afterwards are
bvirk 4:19da6ea94042 96 * charX, charY set to the new starting point for writting
bvirk 4:19da6ea94042 97 *
bvirk 4:19da6ea94042 98 * @param str to be displayed at (0, charY).
bvirk 4:19da6ea94042 99 */
bvirk 4:19da6ea94042 100 void crwrite(string str);
bvirk 4:19da6ea94042 101
bvirk 4:19da6ea94042 102 /**
bvirk 4:19da6ea94042 103 * Write a string at charX, charY position. Afterwards the
bvirk 4:19da6ea94042 104 * pendingNewline state is set
bvirk 4:19da6ea94042 105 *
bvirk 4:19da6ea94042 106 * @param str to be displayed at (charX, charY).
bvirk 4:19da6ea94042 107 */
bvirk 4:19da6ea94042 108 void writeln(string str);
bvirk 4:19da6ea94042 109
bvirk 4:19da6ea94042 110 /**
bvirk 4:19da6ea94042 111 * Write a number at charX, charY position. Afterwards are
bvirk 4:19da6ea94042 112 * charX, charY set to the new starting point for writting
bvirk 4:19da6ea94042 113 *
bvirk 4:19da6ea94042 114 * @param number to be displayed at (charX, charY).
bvirk 4:19da6ea94042 115 */
bvirk 3:f36427797fd7 116 void write(float number);
bvirk 4:19da6ea94042 117
bvirk 4:19da6ea94042 118 /**
bvirk 4:19da6ea94042 119 * Write number at x posion 0 of charY. Afterwards are
bvirk 4:19da6ea94042 120 * charX, charY set to the new starting point for writting
bvirk 4:19da6ea94042 121 *
bvirk 4:19da6ea94042 122 * @param number to be displayed at (0, charY).
bvirk 4:19da6ea94042 123 */
bvirk 4:19da6ea94042 124 void crwrite(float number);
bvirk 4:19da6ea94042 125
bvirk 4:19da6ea94042 126 /**
bvirk 4:19da6ea94042 127 * Write a string at charX, charY position. Afterwards the
bvirk 4:19da6ea94042 128 * pendingNewline state is set
bvirk 4:19da6ea94042 129 *
bvirk 4:19da6ea94042 130 * @param str to be displayed at (charX, charY).
bvirk 4:19da6ea94042 131 */
bvirk 3:f36427797fd7 132 void writeln(float number);
bvirk 4:19da6ea94042 133
bvirk 4:19da6ea94042 134 /**
bvirk 4:19da6ea94042 135 * Scroll display one line up. An empty line will arise at bottom.
bvirk 4:19da6ea94042 136 */
bvirk 4:19da6ea94042 137 void scroll();
bvirk 4:19da6ea94042 138
bvirk 4:19da6ea94042 139 void drawRectangle(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1);
bvirk 4:19da6ea94042 140 void drawShape(vector<uint16> & pixels);
bvirk 4:19da6ea94042 141 void drawLine(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1);
bvirk 3:f36427797fd7 142 void testOLED(MicroBit & uBit);
bvirk 3:f36427797fd7 143 };
bvirk 4:19da6ea94042 144 #endif
bvirk 4:19da6ea94042 145