displaying on SSD1306, 128x64 pixels OLED

Dependencies:   microbit

Committer:
bvirk
Date:
Tue Feb 25 20:59:35 2020 +0000
Revision:
12:b4d5e007640e
Parent:
10:8bf77efd1579
doc removed from cpp files

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 8:5972683a7190 7 /**
bvirk 12:b4d5e007640e 8 * Constructs display by parameters to the '5 rows'.
bvirk 12:b4d5e007640e 9 * Takes five 5bit values in range [0,31] and a bool \n
bvirk 12:b4d5e007640e 10 * value for 'showing left bit column'
bvirk 8:5972683a7190 11 */
bvirk 6:c69f08f464b5 12 struct Ledrows {
bvirk 6:c69f08f464b5 13 union {
bvirk 6:c69f08f464b5 14 struct {
bvirk 6:c69f08f464b5 15 int r0:5;
bvirk 6:c69f08f464b5 16 int r1:5;
bvirk 6:c69f08f464b5 17 int r2:5;
bvirk 6:c69f08f464b5 18 int r3:5;
bvirk 6:c69f08f464b5 19 int r4:5; };
bvirk 6:c69f08f464b5 20 int all; };
bvirk 6:c69f08f464b5 21 Ledrows(uint8_t lr0,uint8_t lr1,uint8_t lr2,uint8_t lr3,uint8_t lr4, bool b15On)
bvirk 6:c69f08f464b5 22 : r0(lr0),r1(lr1),r2(lr2),r3(lr3),r4(lr4) {
bvirk 6:c69f08f464b5 23 if (b15On) all |= 0x01084210; }
bvirk 6:c69f08f464b5 24
bvirk 6:c69f08f464b5 25 };
bvirk 6:c69f08f464b5 26
bvirk 6:c69f08f464b5 27
bvirk 6:c69f08f464b5 28 /**
bvirk 12:b4d5e007640e 29 * Use Microbit 5x5 led display in various output communications.
bvirk 8:5972683a7190 30 * It deals with display in DISPLAY_MODE_BLACK_AND_WHITE mode
bvirk 6:c69f08f464b5 31 */
bvirk 6:c69f08f464b5 32 class Display {
bvirk 6:c69f08f464b5 33
bvirk 6:c69f08f464b5 34 /**
bvirk 12:b4d5e007640e 35 * Representation the 25 leds.
bvirk 12:b4d5e007640e 36 * The physical leds are counted from right bottom and continuing \n
bvirk 12:b4d5e007640e 37 * from right on each row above. Light in a led corresponds to 1 stick.\n
bvirk 12:b4d5e007640e 38 * Writting to the display is writting to this buffer AND the display \n
bvirk 12:b4d5e007640e 39 * only if a value is changed - this demands clearing the display is \n
bvirk 12:b4d5e007640e 40 * nullifying this stick prior uDisplay.image.clear();
bvirk 6:c69f08f464b5 41 */
bvirk 6:c69f08f464b5 42 bool stick[25];
bvirk 6:c69f08f464b5 43 MicroBitDisplay & uDisplay;
bvirk 6:c69f08f464b5 44 union { // context dependt trueshowing aliases
bvirk 6:c69f08f464b5 45 uint8_t curLength;
bvirk 6:c69f08f464b5 46 uint8_t rowNr; };
bvirk 6:c69f08f464b5 47 uint32_t showbit;
bvirk 6:c69f08f464b5 48
bvirk 6:c69f08f464b5 49 public:
bvirk 8:5972683a7190 50
bvirk 8:5972683a7190 51 /**
bvirk 12:b4d5e007640e 52 * Display hold a refference to a MicroBitDisplay object.
bvirk 12:b4d5e007640e 53 * When constructed from MicroBit's MicroBitDisplay of a not yet initialized \n
bvirk 12:b4d5e007640e 54 * MicroBit object - that must be done before using the Display instance.\n
bvirk 12:b4d5e007640e 55 *
bvirk 12:b4d5e007640e 56 * @param uDpl reference to a MicroBitDisplay object.
bvirk 8:5972683a7190 57 */
bvirk 6:c69f08f464b5 58 Display(MicroBitDisplay & uDpl);
bvirk 6:c69f08f464b5 59
bvirk 6:c69f08f464b5 60 /**
bvirk 10:8bf77efd1579 61 * Clears the display and its buffer
bvirk 6:c69f08f464b5 62 */
bvirk 7:7b225c565fe6 63 void clear();
bvirk 6:c69f08f464b5 64
bvirk 6:c69f08f464b5 65 /**
bvirk 10:8bf77efd1579 66 * The stick's length is represented by the count of digits being 1.
bvirk 12:b4d5e007640e 67 *
bvirk 6:c69f08f464b5 68 * @param size in range [0,24]
bvirk 6:c69f08f464b5 69 */
bvirk 6:c69f08f464b5 70 void setStick(uint8_t size);
bvirk 6:c69f08f464b5 71
bvirk 6:c69f08f464b5 72 /**
bvirk 12:b4d5e007640e 73 * Set a single dot.
bvirk 6:c69f08f464b5 74 *
bvirk 6:c69f08f464b5 75 * @param position in [0,24] for showing that single dot.
bvirk 6:c69f08f464b5 76 */
bvirk 6:c69f08f464b5 77 void setFlag(uint8_t position);
bvirk 6:c69f08f464b5 78
bvirk 6:c69f08f464b5 79 /**
bvirk 12:b4d5e007640e 80 * Puts a bitpattern in a row.
bvirk 6:c69f08f464b5 81 *
bvirk 6:c69f08f464b5 82 * @param rowNr in [0,4] for selected row
bvirk 6:c69f08f464b5 83 * @param rowContent in [0,31] to be shown binary
bvirk 6:c69f08f464b5 84 */
bvirk 6:c69f08f464b5 85 void toRow(uint8_t rowNr, uint8_t rowContent);
bvirk 6:c69f08f464b5 86
bvirk 6:c69f08f464b5 87 /**
bvirk 10:8bf77efd1579 88 * 25 bits showed in the display as a whole.
bvirk 6:c69f08f464b5 89 *
bvirk 10:8bf77efd1579 90 * @param bits25 contains the 25 bit to be showed
bvirk 6:c69f08f464b5 91 */
bvirk 6:c69f08f464b5 92 void toRows(uint32_t allBits);
bvirk 6:c69f08f464b5 93
bvirk 6:c69f08f464b5 94 /**
bvirk 12:b4d5e007640e 95 * Vertdecimal shows a single number in [00000,99999].
bvirk 12:b4d5e007640e 96 * The parameters goes from top to bottom, whereas a obvious \n
bvirk 12:b4d5e007640e 97 * perception is reading the disply number from top bottom. \n
bvirk 12:b4d5e007640e 98 * Nothing restrict the rows to hold values less teen \n
bvirk 12:b4d5e007640e 99 * but if some are greather than 31 the value or proberbly \n
bvirk 12:b4d5e007640e 100 * bitwise ored og cleared by other numbers
bvirk 6:c69f08f464b5 101 *
bvirk 6:c69f08f464b5 102 * @param r0 bottom row - row 0
bvirk 6:c69f08f464b5 103 * @param r1 row 1
bvirk 6:c69f08f464b5 104 * @param r2 row 2
bvirk 6:c69f08f464b5 105 * @param r3 row 3
bvirk 6:c69f08f464b5 106 * @param r4 top row - row 4
bvirk 6:c69f08f464b5 107 */
bvirk 6:c69f08f464b5 108 void vertDecimal(uint8_t r0,uint8_t r1,uint8_t r2,uint8_t r3,uint8_t r4);
bvirk 6:c69f08f464b5 109
bvirk 6:c69f08f464b5 110 /**
bvirk 12:b4d5e007640e 111 * Vertdecimal shows a single number in [00000,99999].
bvirk 12:b4d5e007640e 112 * The parameters goes from top to bottom, whereas a obvious \n
bvirk 12:b4d5e007640e 113 * perception is reading the disply number from top bottom. \n
bvirk 12:b4d5e007640e 114 * It os possible to turn on left column on the display
bvirk 6:c69f08f464b5 115 *
bvirk 6:c69f08f464b5 116 * @param r0 bottom row - row 0
bvirk 6:c69f08f464b5 117 * @param r1 row 1
bvirk 6:c69f08f464b5 118 * @param r2 row 2
bvirk 6:c69f08f464b5 119 * @param r3 row 3
bvirk 6:c69f08f464b5 120 * @param r4 top row - row 4
bvirk 6:c69f08f464b5 121 * @param leftDotOn turns left dot on. leftdot is not used to represent a digit in base 10 numbers.
bvirk 6:c69f08f464b5 122 */
bvirk 6:c69f08f464b5 123 void vertDecimal(uint8_t r0,uint8_t r1,uint8_t r2,uint8_t r3,uint8_t r4, bool leftDotOn);
bvirk 6:c69f08f464b5 124
bvirk 6:c69f08f464b5 125 /**
bvirk 12:b4d5e007640e 126 * Binary Clock with hours and minuts.
bvirk 12:b4d5e007640e 127 * hours in top rows (4 for multiplum of 10, 3 for remainer) \n
bvirk 6:c69f08f464b5 128 * minuts in bottom rows (1 for multiplum of 10, 0 for remainer)
bvirk 6:c69f08f464b5 129 *
bvirk 6:c69f08f464b5 130 * @param minuts of the day
bvirk 6:c69f08f464b5 131 */
bvirk 6:c69f08f464b5 132 void vertClock(uint16_t minuts);
bvirk 6:c69f08f464b5 133
bvirk 6:c69f08f464b5 134 /**
bvirk 12:b4d5e007640e 135 * Binary Clock with hours, minuts an seconds.
bvirk 12:b4d5e007640e 136 * hours in row 4 (top row)\n
bvirk 12:b4d5e007640e 137 * minuts in rows 3 and 2 (3 for multiplum of 10, 2 for remainer)\n
bvirk 12:b4d5e007640e 138 * seconds in rows 1 and 0 (1 for multiplum of 10, 0 for remainer)\n
bvirk 12:b4d5e007640e 139 *
bvirk 6:c69f08f464b5 140 * @param second of the day
bvirk 6:c69f08f464b5 141 */
bvirk 6:c69f08f464b5 142 void vertSecClock(uint32_t minuts);
bvirk 6:c69f08f464b5 143
bvirk 6:c69f08f464b5 144 private:
bvirk 6:c69f08f464b5 145 void paintStick(bool(Display::*getState)(uint8_t));
bvirk 7:7b225c565fe6 146 void clearStick();
bvirk 6:c69f08f464b5 147 bool bitplot(uint8_t num);
bvirk 6:c69f08f464b5 148 bool simplePlot(uint8_t num);
bvirk 6:c69f08f464b5 149 bool lessCurLength(uint8_t num);
bvirk 6:c69f08f464b5 150 bool orPoint(uint8_t num);
bvirk 6:c69f08f464b5 151 };
bvirk 6:c69f08f464b5 152
bvirk 6:c69f08f464b5 153
bvirk 6:c69f08f464b5 154 #endif