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 "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