displaying on SSD1306, 128x64 pixels OLED
OLED.h@4:19da6ea94042, 2020-02-18 (annotated)
- 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?
User | Revision | Line number | New 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 |