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