displaying on SSD1306, 128x64 pixels OLED

Dependencies:   microbit

Committer:
bvirk
Date:
Mon Feb 24 18:31:22 2020 +0000
Revision:
8:5972683a7190
Parent:
7:7b225c565fe6
Child:
10:8bf77efd1579
class header doc copied to 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 8:5972683a7190 8 * Constructer takes five 5bit and a being true 'showing left column'
bvirk 8:5972683a7190 9 * parameters for the led display.
bvirk 8:5972683a7190 10 */
bvirk 6:c69f08f464b5 11 struct Ledrows {
bvirk 6:c69f08f464b5 12 union {
bvirk 6:c69f08f464b5 13 struct {
bvirk 6:c69f08f464b5 14 int r0:5;
bvirk 6:c69f08f464b5 15 int r1:5;
bvirk 6:c69f08f464b5 16 int r2:5;
bvirk 6:c69f08f464b5 17 int r3:5;
bvirk 6:c69f08f464b5 18 int r4:5; };
bvirk 6:c69f08f464b5 19 int all; };
bvirk 6:c69f08f464b5 20 Ledrows(uint8_t lr0,uint8_t lr1,uint8_t lr2,uint8_t lr3,uint8_t lr4, bool b15On)
bvirk 6:c69f08f464b5 21 : r0(lr0),r1(lr1),r2(lr2),r3(lr3),r4(lr4) {
bvirk 6:c69f08f464b5 22 if (b15On) all |= 0x01084210; }
bvirk 6:c69f08f464b5 23
bvirk 6:c69f08f464b5 24 };
bvirk 6:c69f08f464b5 25
bvirk 6:c69f08f464b5 26
bvirk 6:c69f08f464b5 27 /**
bvirk 6:c69f08f464b5 28 * Use Microbit 5x5 led display in various output communications
bvirk 8:5972683a7190 29 * It deals with display in DISPLAY_MODE_BLACK_AND_WHITE mode
bvirk 6:c69f08f464b5 30 */
bvirk 6:c69f08f464b5 31 class Display {
bvirk 6:c69f08f464b5 32
bvirk 6:c69f08f464b5 33 /**
bvirk 6:c69f08f464b5 34 * Representation the 25 leds, counting from right bottom and continuing
bvirk 6:c69f08f464b5 35 * from right on each row above. Light on is the pixel value 1 or true
bvirk 8:5972683a7190 36 * Writting to the display is writting to this buffer AND the display only
bvirk 8:5972683a7190 37 * if a value is changed - this demands clearing the display is clearing this
bvirk 8:5972683a7190 38 * buffer prior uDisplay.image.clear();;
bvirk 6:c69f08f464b5 39 */
bvirk 6:c69f08f464b5 40 bool stick[25];
bvirk 6:c69f08f464b5 41 MicroBitDisplay & uDisplay;
bvirk 6:c69f08f464b5 42 union { // context dependt trueshowing aliases
bvirk 6:c69f08f464b5 43 uint8_t curLength;
bvirk 6:c69f08f464b5 44 uint8_t rowNr; };
bvirk 6:c69f08f464b5 45 uint32_t showbit;
bvirk 6:c69f08f464b5 46
bvirk 6:c69f08f464b5 47 public:
bvirk 8:5972683a7190 48
bvirk 8:5972683a7190 49 /**
bvirk 8:5972683a7190 50 * When constructed from MicroBit's MicroBitDisplay of a not yet initialized
bvirk 8:5972683a7190 51 * MicroBit object - that must be done before using the Display instance.
bvirk 8:5972683a7190 52 */
bvirk 6:c69f08f464b5 53 Display(MicroBitDisplay & uDpl);
bvirk 6:c69f08f464b5 54
bvirk 6:c69f08f464b5 55 /**
bvirk 8:5972683a7190 56 * clears the display and is buffer
bvirk 6:c69f08f464b5 57 */
bvirk 7:7b225c565fe6 58 void clear();
bvirk 6:c69f08f464b5 59
bvirk 6:c69f08f464b5 60 /**
bvirk 6:c69f08f464b5 61 * the stick is a binary representaion of the led display
bvirk 6:c69f08f464b5 62 * @param size in range [0,24]
bvirk 6:c69f08f464b5 63 */
bvirk 6:c69f08f464b5 64 void setStick(uint8_t size);
bvirk 6:c69f08f464b5 65
bvirk 6:c69f08f464b5 66 /**
bvirk 6:c69f08f464b5 67 * Set a single dot
bvirk 6:c69f08f464b5 68 *
bvirk 6:c69f08f464b5 69 * @param position in [0,24] for showing that single dot.
bvirk 6:c69f08f464b5 70 */
bvirk 6:c69f08f464b5 71 void setFlag(uint8_t position);
bvirk 6:c69f08f464b5 72
bvirk 6:c69f08f464b5 73 /**
bvirk 6:c69f08f464b5 74 * Puts a bitpattern in a row
bvirk 6:c69f08f464b5 75 *
bvirk 6:c69f08f464b5 76 * @param rowNr in [0,4] for selected row
bvirk 6:c69f08f464b5 77 * @param rowContent in [0,31] to be shown binary
bvirk 6:c69f08f464b5 78 */
bvirk 6:c69f08f464b5 79 void toRow(uint8_t rowNr, uint8_t rowContent);
bvirk 6:c69f08f464b5 80
bvirk 6:c69f08f464b5 81 /**
bvirk 6:c69f08f464b5 82 * 25 bits showed in display as a whole.
bvirk 6:c69f08f464b5 83 *
bvirk 6:c69f08f464b5 84 * @param allBits contains the 25 bit to be showed
bvirk 6:c69f08f464b5 85 */
bvirk 6:c69f08f464b5 86 void toRows(uint32_t allBits);
bvirk 6:c69f08f464b5 87
bvirk 6:c69f08f464b5 88 /**
bvirk 6:c69f08f464b5 89 * Vertdecimal is intended for showing a single number in [00000,99999],
bvirk 6:c69f08f464b5 90 * vertical read from top to bottom.
bvirk 6:c69f08f464b5 91 *
bvirk 6:c69f08f464b5 92 * @param r0 bottom row - row 0
bvirk 6:c69f08f464b5 93 * @param r1 row 1
bvirk 6:c69f08f464b5 94 * @param r2 row 2
bvirk 6:c69f08f464b5 95 * @param r3 row 3
bvirk 6:c69f08f464b5 96 * @param r4 top row - row 4
bvirk 6:c69f08f464b5 97 */
bvirk 6:c69f08f464b5 98 void vertDecimal(uint8_t r0,uint8_t r1,uint8_t r2,uint8_t r3,uint8_t r4);
bvirk 6:c69f08f464b5 99
bvirk 6:c69f08f464b5 100 /**
bvirk 6:c69f08f464b5 101 * Vertdecimal is intended for showing a single number in [00000,99999],
bvirk 6:c69f08f464b5 102 * vertical read from top to bottom.
bvirk 6:c69f08f464b5 103 *
bvirk 6:c69f08f464b5 104 *
bvirk 6:c69f08f464b5 105 * @param r0 bottom row - row 0
bvirk 6:c69f08f464b5 106 * @param r1 row 1
bvirk 6:c69f08f464b5 107 * @param r2 row 2
bvirk 6:c69f08f464b5 108 * @param r3 row 3
bvirk 6:c69f08f464b5 109 * @param r4 top row - row 4
bvirk 6:c69f08f464b5 110 * @param leftDotOn turns left dot on. leftdot is not used to represent a digit in base 10 numbers.
bvirk 6:c69f08f464b5 111 */
bvirk 6:c69f08f464b5 112 void vertDecimal(uint8_t r0,uint8_t r1,uint8_t r2,uint8_t r3,uint8_t r4, bool leftDotOn);
bvirk 6:c69f08f464b5 113
bvirk 6:c69f08f464b5 114 /**
bvirk 6:c69f08f464b5 115 * binary Clock, hours in top rows (4 for multiplum of 10, 3 for remainer)
bvirk 6:c69f08f464b5 116 * minuts in bottom rows (1 for multiplum of 10, 0 for remainer)
bvirk 6:c69f08f464b5 117 *
bvirk 6:c69f08f464b5 118 * @param minuts of the day
bvirk 6:c69f08f464b5 119 */
bvirk 6:c69f08f464b5 120 void vertClock(uint16_t minuts);
bvirk 6:c69f08f464b5 121
bvirk 6:c69f08f464b5 122 /**
bvirk 6:c69f08f464b5 123 * binary Clock, hours in top rows (4)
bvirk 6:c69f08f464b5 124 * minuts in rows 3 and 2 (3 for multiplum of 10, 2 for remainer)
bvirk 6:c69f08f464b5 125 * seconds in rows 1 and 0 (1 for multiplum of 10, 0 for remainer)
bvirk 6:c69f08f464b5 126 * @param second of the day
bvirk 6:c69f08f464b5 127 */
bvirk 6:c69f08f464b5 128 void vertSecClock(uint32_t minuts);
bvirk 6:c69f08f464b5 129
bvirk 6:c69f08f464b5 130 private:
bvirk 6:c69f08f464b5 131 void paintStick(bool(Display::*getState)(uint8_t));
bvirk 7:7b225c565fe6 132 void clearStick();
bvirk 6:c69f08f464b5 133 bool bitplot(uint8_t num);
bvirk 6:c69f08f464b5 134 bool simplePlot(uint8_t num);
bvirk 6:c69f08f464b5 135 bool lessCurLength(uint8_t num);
bvirk 6:c69f08f464b5 136 bool orPoint(uint8_t num);
bvirk 6:c69f08f464b5 137 };
bvirk 6:c69f08f464b5 138
bvirk 6:c69f08f464b5 139
bvirk 6:c69f08f464b5 140 #endif