displaying on SSD1306, 128x64 pixels OLED

Dependencies:   microbit

Committer:
bvirk
Date:
Sun Feb 23 01:57:35 2020 +0000
Revision:
6:c69f08f464b5
Child:
7:7b225c565fe6
All examples in own files - demo of command pattern using functionpointer array to chose example

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bvirk 6:c69f08f464b5 1 #include "MicroBit.h"
bvirk 6:c69f08f464b5 2 #include "MicroBitDisplay.h"
bvirk 6:c69f08f464b5 3
bvirk 6:c69f08f464b5 4 #ifndef microbitOLED_Display
bvirk 6:c69f08f464b5 5 #define microbitOLED_Display
bvirk 6:c69f08f464b5 6
bvirk 6:c69f08f464b5 7
bvirk 6:c69f08f464b5 8 struct Ledrows {
bvirk 6:c69f08f464b5 9 union {
bvirk 6:c69f08f464b5 10 struct {
bvirk 6:c69f08f464b5 11 int r0:5;
bvirk 6:c69f08f464b5 12 int r1:5;
bvirk 6:c69f08f464b5 13 int r2:5;
bvirk 6:c69f08f464b5 14 int r3:5;
bvirk 6:c69f08f464b5 15 int r4:5; };
bvirk 6:c69f08f464b5 16 int all; };
bvirk 6:c69f08f464b5 17 Ledrows(uint8_t lr0,uint8_t lr1,uint8_t lr2,uint8_t lr3,uint8_t lr4, bool b15On)
bvirk 6:c69f08f464b5 18 : r0(lr0),r1(lr1),r2(lr2),r3(lr3),r4(lr4) {
bvirk 6:c69f08f464b5 19 if (b15On) all |= 0x01084210; }
bvirk 6:c69f08f464b5 20
bvirk 6:c69f08f464b5 21 };
bvirk 6:c69f08f464b5 22
bvirk 6:c69f08f464b5 23
bvirk 6:c69f08f464b5 24 /**
bvirk 6:c69f08f464b5 25 * Use Microbit 5x5 led display in various output communications
bvirk 6:c69f08f464b5 26 * It deals with DISPLAY_MODE_BLACK_AND_WHITE mode
bvirk 6:c69f08f464b5 27 */
bvirk 6:c69f08f464b5 28 class Display {
bvirk 6:c69f08f464b5 29
bvirk 6:c69f08f464b5 30 /**
bvirk 6:c69f08f464b5 31 * Representation the 25 leds, counting from right bottom and continuing
bvirk 6:c69f08f464b5 32 * from right on each row above. Light on is the pixel value 1 or true
bvirk 6:c69f08f464b5 33 */
bvirk 6:c69f08f464b5 34 bool stick[25];
bvirk 6:c69f08f464b5 35 MicroBitDisplay & uDisplay;
bvirk 6:c69f08f464b5 36 union { // context dependt trueshowing aliases
bvirk 6:c69f08f464b5 37 uint8_t curLength;
bvirk 6:c69f08f464b5 38 uint8_t rowNr; };
bvirk 6:c69f08f464b5 39 uint32_t showbit;
bvirk 6:c69f08f464b5 40
bvirk 6:c69f08f464b5 41 public:
bvirk 6:c69f08f464b5 42 Display(MicroBitDisplay & uDpl);
bvirk 6:c69f08f464b5 43
bvirk 6:c69f08f464b5 44 /**
bvirk 6:c69f08f464b5 45 * The with defalt 'on' value call MicroBitDisplay.image.setPixelValue
bvirk 6:c69f08f464b5 46 *
bvirk 6:c69f08f464b5 47 * @param x left 0 indexed position
bvirk 6:c69f08f464b5 48 * @param y top 0 indexed position
bvirk 6:c69f08f464b5 49 */
bvirk 6:c69f08f464b5 50 void setPixel(uint8_t x,uint8_t y);
bvirk 6:c69f08f464b5 51
bvirk 6:c69f08f464b5 52 /**
bvirk 6:c69f08f464b5 53 * the stick is a binary representaion of the led display
bvirk 6:c69f08f464b5 54 * @param size in range [0,24]
bvirk 6:c69f08f464b5 55 */
bvirk 6:c69f08f464b5 56 void setStick(uint8_t size);
bvirk 6:c69f08f464b5 57
bvirk 6:c69f08f464b5 58 /**
bvirk 6:c69f08f464b5 59 * Set a single dot
bvirk 6:c69f08f464b5 60 *
bvirk 6:c69f08f464b5 61 * @param position in [0,24] for showing that single dot.
bvirk 6:c69f08f464b5 62 */
bvirk 6:c69f08f464b5 63 void setFlag(uint8_t position);
bvirk 6:c69f08f464b5 64
bvirk 6:c69f08f464b5 65 /**
bvirk 6:c69f08f464b5 66 * Puts a bitpattern in a row
bvirk 6:c69f08f464b5 67 *
bvirk 6:c69f08f464b5 68 * @param rowNr in [0,4] for selected row
bvirk 6:c69f08f464b5 69 * @param rowContent in [0,31] to be shown binary
bvirk 6:c69f08f464b5 70 */
bvirk 6:c69f08f464b5 71 void toRow(uint8_t rowNr, uint8_t rowContent);
bvirk 6:c69f08f464b5 72
bvirk 6:c69f08f464b5 73 /**
bvirk 6:c69f08f464b5 74 * 25 bits showed in display as a whole.
bvirk 6:c69f08f464b5 75 *
bvirk 6:c69f08f464b5 76 * @param allBits contains the 25 bit to be showed
bvirk 6:c69f08f464b5 77 */
bvirk 6:c69f08f464b5 78 void toRows(uint32_t allBits);
bvirk 6:c69f08f464b5 79
bvirk 6:c69f08f464b5 80 /**
bvirk 6:c69f08f464b5 81 * Vertdecimal is intended for showing a single number in [00000,99999],
bvirk 6:c69f08f464b5 82 * vertical read from top to bottom.
bvirk 6:c69f08f464b5 83 *
bvirk 6:c69f08f464b5 84 * @param r0 bottom row - row 0
bvirk 6:c69f08f464b5 85 * @param r1 row 1
bvirk 6:c69f08f464b5 86 * @param r2 row 2
bvirk 6:c69f08f464b5 87 * @param r3 row 3
bvirk 6:c69f08f464b5 88 * @param r4 top row - row 4
bvirk 6:c69f08f464b5 89 */
bvirk 6:c69f08f464b5 90 void vertDecimal(uint8_t r0,uint8_t r1,uint8_t r2,uint8_t r3,uint8_t r4);
bvirk 6:c69f08f464b5 91
bvirk 6:c69f08f464b5 92 /**
bvirk 6:c69f08f464b5 93 * Vertdecimal is intended for showing a single number in [00000,99999],
bvirk 6:c69f08f464b5 94 * vertical read from top to bottom.
bvirk 6:c69f08f464b5 95 *
bvirk 6:c69f08f464b5 96 *
bvirk 6:c69f08f464b5 97 * @param r0 bottom row - row 0
bvirk 6:c69f08f464b5 98 * @param r1 row 1
bvirk 6:c69f08f464b5 99 * @param r2 row 2
bvirk 6:c69f08f464b5 100 * @param r3 row 3
bvirk 6:c69f08f464b5 101 * @param r4 top row - row 4
bvirk 6:c69f08f464b5 102 * @param leftDotOn turns left dot on. leftdot is not used to represent a digit in base 10 numbers.
bvirk 6:c69f08f464b5 103 */
bvirk 6:c69f08f464b5 104 void vertDecimal(uint8_t r0,uint8_t r1,uint8_t r2,uint8_t r3,uint8_t r4, bool leftDotOn);
bvirk 6:c69f08f464b5 105
bvirk 6:c69f08f464b5 106 /**
bvirk 6:c69f08f464b5 107 * binary Clock, hours in top rows (4 for multiplum of 10, 3 for remainer)
bvirk 6:c69f08f464b5 108 * minuts in bottom rows (1 for multiplum of 10, 0 for remainer)
bvirk 6:c69f08f464b5 109 *
bvirk 6:c69f08f464b5 110 * @param minuts of the day
bvirk 6:c69f08f464b5 111 */
bvirk 6:c69f08f464b5 112 void vertClock(uint16_t minuts);
bvirk 6:c69f08f464b5 113
bvirk 6:c69f08f464b5 114 /**
bvirk 6:c69f08f464b5 115 * binary Clock, hours in top rows (4)
bvirk 6:c69f08f464b5 116 * minuts in rows 3 and 2 (3 for multiplum of 10, 2 for remainer)
bvirk 6:c69f08f464b5 117 * seconds in rows 1 and 0 (1 for multiplum of 10, 0 for remainer)
bvirk 6:c69f08f464b5 118 * @param second of the day
bvirk 6:c69f08f464b5 119 */
bvirk 6:c69f08f464b5 120 void vertSecClock(uint32_t minuts);
bvirk 6:c69f08f464b5 121
bvirk 6:c69f08f464b5 122 private:
bvirk 6:c69f08f464b5 123 void paintStick(bool(Display::*getState)(uint8_t));
bvirk 6:c69f08f464b5 124 bool bitplot(uint8_t num);
bvirk 6:c69f08f464b5 125 bool simplePlot(uint8_t num);
bvirk 6:c69f08f464b5 126 bool lessCurLength(uint8_t num);
bvirk 6:c69f08f464b5 127 bool orPoint(uint8_t num);
bvirk 6:c69f08f464b5 128 };
bvirk 6:c69f08f464b5 129
bvirk 6:c69f08f464b5 130
bvirk 6:c69f08f464b5 131 #endif