displaying on SSD1306, 128x64 pixels OLED
Display.cpp@6:c69f08f464b5, 2020-02-23 (annotated)
- 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?
User | Revision | Line number | New contents of line |
---|---|---|---|
bvirk | 6:c69f08f464b5 | 1 | #include "MicroBit.h" |
bvirk | 6:c69f08f464b5 | 2 | #include "Display.h" |
bvirk | 6:c69f08f464b5 | 3 | |
bvirk | 6:c69f08f464b5 | 4 | Display::Display(MicroBitDisplay & uDpl) : uDisplay(uDpl) { |
bvirk | 6:c69f08f464b5 | 5 | for (uint8_t i = 0 ; i < 25; i++) |
bvirk | 6:c69f08f464b5 | 6 | stick[i]=false; |
bvirk | 6:c69f08f464b5 | 7 | } |
bvirk | 6:c69f08f464b5 | 8 | void Display::setPixel(uint8_t x,uint8_t y) { |
bvirk | 6:c69f08f464b5 | 9 | uDisplay.image.setPixelValue(x,y,1); |
bvirk | 6:c69f08f464b5 | 10 | } |
bvirk | 6:c69f08f464b5 | 11 | |
bvirk | 6:c69f08f464b5 | 12 | void Display::setStick(uint8_t length) { |
bvirk | 6:c69f08f464b5 | 13 | curLength = length; |
bvirk | 6:c69f08f464b5 | 14 | paintStick(&Display::lessCurLength); |
bvirk | 6:c69f08f464b5 | 15 | } |
bvirk | 6:c69f08f464b5 | 16 | |
bvirk | 6:c69f08f464b5 | 17 | void Display::setFlag(uint8_t position) { |
bvirk | 6:c69f08f464b5 | 18 | showbit = position; |
bvirk | 6:c69f08f464b5 | 19 | paintStick(&Display::orPoint); |
bvirk | 6:c69f08f464b5 | 20 | } |
bvirk | 6:c69f08f464b5 | 21 | |
bvirk | 6:c69f08f464b5 | 22 | void Display::toRow(uint8_t rowNr, uint8_t rowContent) { |
bvirk | 6:c69f08f464b5 | 23 | this->rowNr=rowNr; |
bvirk | 6:c69f08f464b5 | 24 | showbit=rowContent; |
bvirk | 6:c69f08f464b5 | 25 | paintStick(&Display::bitplot); |
bvirk | 6:c69f08f464b5 | 26 | } |
bvirk | 6:c69f08f464b5 | 27 | |
bvirk | 6:c69f08f464b5 | 28 | void Display::toRows(uint32_t bits25) { |
bvirk | 6:c69f08f464b5 | 29 | showbit=bits25; |
bvirk | 6:c69f08f464b5 | 30 | paintStick(&Display::simplePlot); |
bvirk | 6:c69f08f464b5 | 31 | } |
bvirk | 6:c69f08f464b5 | 32 | |
bvirk | 6:c69f08f464b5 | 33 | void Display::vertDecimal(uint8_t r0,uint8_t r1,uint8_t r2,uint8_t r3,uint8_t r4) { |
bvirk | 6:c69f08f464b5 | 34 | vertDecimal(r0,r1,r2,r3,r4,false); |
bvirk | 6:c69f08f464b5 | 35 | } |
bvirk | 6:c69f08f464b5 | 36 | |
bvirk | 6:c69f08f464b5 | 37 | void Display::vertDecimal(uint8_t r0,uint8_t r1,uint8_t r2,uint8_t r3,uint8_t r4, bool b15On) { |
bvirk | 6:c69f08f464b5 | 38 | Ledrows lr(r0,r1,r2,r3,r4,b15On); |
bvirk | 6:c69f08f464b5 | 39 | showbit = lr.all; |
bvirk | 6:c69f08f464b5 | 40 | paintStick(&Display::simplePlot); |
bvirk | 6:c69f08f464b5 | 41 | } |
bvirk | 6:c69f08f464b5 | 42 | |
bvirk | 6:c69f08f464b5 | 43 | void Display::vertClock(uint16_t minuts) { |
bvirk | 6:c69f08f464b5 | 44 | uint8_t hours = minuts/60; |
bvirk | 6:c69f08f464b5 | 45 | minuts -= 60*hours; |
bvirk | 6:c69f08f464b5 | 46 | uint8_t h1 = hours/10; |
bvirk | 6:c69f08f464b5 | 47 | uint8_t m1 = minuts/10; |
bvirk | 6:c69f08f464b5 | 48 | vertDecimal(minuts-10*m1,m1,16,hours-10*h1,h1,false); |
bvirk | 6:c69f08f464b5 | 49 | } |
bvirk | 6:c69f08f464b5 | 50 | |
bvirk | 6:c69f08f464b5 | 51 | void Display::vertSecClock(uint32_t seconds) { |
bvirk | 6:c69f08f464b5 | 52 | uint8_t hours = seconds/3600; |
bvirk | 6:c69f08f464b5 | 53 | uint8_t minuts = (seconds - 3600*hours)/60; |
bvirk | 6:c69f08f464b5 | 54 | seconds -= 3600*hours+60*minuts; |
bvirk | 6:c69f08f464b5 | 55 | uint8_t m1 = minuts/10; |
bvirk | 6:c69f08f464b5 | 56 | int8_t s1 = seconds/10; |
bvirk | 6:c69f08f464b5 | 57 | vertDecimal(seconds-10*s1,s1,minuts-10*m1,m1,hours,false); |
bvirk | 6:c69f08f464b5 | 58 | } |
bvirk | 6:c69f08f464b5 | 59 | |
bvirk | 6:c69f08f464b5 | 60 | // private function |
bvirk | 6:c69f08f464b5 | 61 | |
bvirk | 6:c69f08f464b5 | 62 | void Display::paintStick(bool(Display::*getState)(uint8_t)) { |
bvirk | 6:c69f08f464b5 | 63 | for (int8_t pos = 0; pos < 25; pos++) { |
bvirk | 6:c69f08f464b5 | 64 | bool value = (this->*getState)(pos); |
bvirk | 6:c69f08f464b5 | 65 | if (stick[pos] != value) { |
bvirk | 6:c69f08f464b5 | 66 | stick[pos] = value; |
bvirk | 6:c69f08f464b5 | 67 | uDisplay.image.setPixelValue( |
bvirk | 6:c69f08f464b5 | 68 | 4 - pos % 5,4 - pos / 5,value ? 1 : 0); |
bvirk | 6:c69f08f464b5 | 69 | } |
bvirk | 6:c69f08f464b5 | 70 | } |
bvirk | 6:c69f08f464b5 | 71 | } |
bvirk | 6:c69f08f464b5 | 72 | |
bvirk | 6:c69f08f464b5 | 73 | bool Display::orPoint(uint8_t stickPos) { |
bvirk | 6:c69f08f464b5 | 74 | return showbit == stickPos ? 1 : stick[stickPos]; |
bvirk | 6:c69f08f464b5 | 75 | } |
bvirk | 6:c69f08f464b5 | 76 | |
bvirk | 6:c69f08f464b5 | 77 | bool Display::simplePlot(uint8_t stickPos) { |
bvirk | 6:c69f08f464b5 | 78 | return ((1 << stickPos) & showbit) > 0 ? true : false; |
bvirk | 6:c69f08f464b5 | 79 | } |
bvirk | 6:c69f08f464b5 | 80 | |
bvirk | 6:c69f08f464b5 | 81 | bool Display::bitplot(uint8_t stickPos) { |
bvirk | 6:c69f08f464b5 | 82 | return stickPos < 5*(rowNr+1) && stickPos >= 5*rowNr |
bvirk | 6:c69f08f464b5 | 83 | ? (((1 << (stickPos-5*rowNr)) & showbit) > 0 |
bvirk | 6:c69f08f464b5 | 84 | ? true |
bvirk | 6:c69f08f464b5 | 85 | : false) |
bvirk | 6:c69f08f464b5 | 86 | : stick[stickPos]; |
bvirk | 6:c69f08f464b5 | 87 | } |
bvirk | 6:c69f08f464b5 | 88 | |
bvirk | 6:c69f08f464b5 | 89 | bool Display::lessCurLength(uint8_t num) { |
bvirk | 6:c69f08f464b5 | 90 | return num < curLength; |
bvirk | 6:c69f08f464b5 | 91 | } |
bvirk | 6:c69f08f464b5 | 92 |