Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: EthernetInterface NTPClient mbed-rtos mbed
LedPanel/LedPanel.cpp@0:7d6abca457ee, 2015-12-23 (annotated)
- Committer:
- mbed_Cookbook_SE
- Date:
- Wed Dec 23 16:17:01 2015 +0000
- Revision:
- 0:7d6abca457ee
??
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mbed_Cookbook_SE | 0:7d6abca457ee | 1 | /** |
mbed_Cookbook_SE | 0:7d6abca457ee | 2 | * Matrix16x16 LEDPanel library |
mbed_Cookbook_SE | 0:7d6abca457ee | 3 | * |
mbed_Cookbook_SE | 0:7d6abca457ee | 4 | * @author Junichi Katsu |
mbed_Cookbook_SE | 0:7d6abca457ee | 5 | * @version 1.0 |
mbed_Cookbook_SE | 0:7d6abca457ee | 6 | * @date 02-April-2015 |
mbed_Cookbook_SE | 0:7d6abca457ee | 7 | * |
mbed_Cookbook_SE | 0:7d6abca457ee | 8 | */ |
mbed_Cookbook_SE | 0:7d6abca457ee | 9 | |
mbed_Cookbook_SE | 0:7d6abca457ee | 10 | #include "mbed.h" |
mbed_Cookbook_SE | 0:7d6abca457ee | 11 | #include "LedPanel.h" |
mbed_Cookbook_SE | 0:7d6abca457ee | 12 | #include "LedPanel_GFX.h" |
mbed_Cookbook_SE | 0:7d6abca457ee | 13 | |
mbed_Cookbook_SE | 0:7d6abca457ee | 14 | LedPanel::LedPanel(I2C *i2c): _i2c(i2c), LedPanel_GFX(16, 16) |
mbed_Cookbook_SE | 0:7d6abca457ee | 15 | { |
mbed_Cookbook_SE | 0:7d6abca457ee | 16 | |
mbed_Cookbook_SE | 0:7d6abca457ee | 17 | } |
mbed_Cookbook_SE | 0:7d6abca457ee | 18 | |
mbed_Cookbook_SE | 0:7d6abca457ee | 19 | void LedPanel::setBrightness(uint8_t b) |
mbed_Cookbook_SE | 0:7d6abca457ee | 20 | { |
mbed_Cookbook_SE | 0:7d6abca457ee | 21 | if (b > 15) b = 15; |
mbed_Cookbook_SE | 0:7d6abca457ee | 22 | |
mbed_Cookbook_SE | 0:7d6abca457ee | 23 | uint8_t c = 0xE0 | b; |
mbed_Cookbook_SE | 0:7d6abca457ee | 24 | char foo[1]; |
mbed_Cookbook_SE | 0:7d6abca457ee | 25 | |
mbed_Cookbook_SE | 0:7d6abca457ee | 26 | foo[0] = c; |
mbed_Cookbook_SE | 0:7d6abca457ee | 27 | |
mbed_Cookbook_SE | 0:7d6abca457ee | 28 | _i2c->write(i2c_addr[0], foo, 1); |
mbed_Cookbook_SE | 0:7d6abca457ee | 29 | _i2c->write(i2c_addr[1], foo, 1); |
mbed_Cookbook_SE | 0:7d6abca457ee | 30 | } |
mbed_Cookbook_SE | 0:7d6abca457ee | 31 | |
mbed_Cookbook_SE | 0:7d6abca457ee | 32 | void LedPanel::blinkRate(uint8_t b) |
mbed_Cookbook_SE | 0:7d6abca457ee | 33 | { |
mbed_Cookbook_SE | 0:7d6abca457ee | 34 | if (b > 3) b = 0; |
mbed_Cookbook_SE | 0:7d6abca457ee | 35 | |
mbed_Cookbook_SE | 0:7d6abca457ee | 36 | uint8_t c = HT16K33_BLINK_CMD | HT16K33_BLINK_DISPLAYON | (b << 1); |
mbed_Cookbook_SE | 0:7d6abca457ee | 37 | |
mbed_Cookbook_SE | 0:7d6abca457ee | 38 | char foo[1]; |
mbed_Cookbook_SE | 0:7d6abca457ee | 39 | foo[0] = c; |
mbed_Cookbook_SE | 0:7d6abca457ee | 40 | |
mbed_Cookbook_SE | 0:7d6abca457ee | 41 | _i2c->write(i2c_addr[0], foo, 1); |
mbed_Cookbook_SE | 0:7d6abca457ee | 42 | _i2c->write(i2c_addr[1], foo, 1); |
mbed_Cookbook_SE | 0:7d6abca457ee | 43 | } |
mbed_Cookbook_SE | 0:7d6abca457ee | 44 | |
mbed_Cookbook_SE | 0:7d6abca457ee | 45 | void LedPanel::begin(uint8_t _addr0,uint8_t _addr1) |
mbed_Cookbook_SE | 0:7d6abca457ee | 46 | { |
mbed_Cookbook_SE | 0:7d6abca457ee | 47 | i2c_addr[0] = _addr0 << 1; |
mbed_Cookbook_SE | 0:7d6abca457ee | 48 | i2c_addr[1] = _addr1 << 1; |
mbed_Cookbook_SE | 0:7d6abca457ee | 49 | |
mbed_Cookbook_SE | 0:7d6abca457ee | 50 | char foo[1]; |
mbed_Cookbook_SE | 0:7d6abca457ee | 51 | foo[0] = 0x21; |
mbed_Cookbook_SE | 0:7d6abca457ee | 52 | |
mbed_Cookbook_SE | 0:7d6abca457ee | 53 | _i2c->write(i2c_addr[0], foo, 1); |
mbed_Cookbook_SE | 0:7d6abca457ee | 54 | _i2c->write(i2c_addr[1], foo, 1); |
mbed_Cookbook_SE | 0:7d6abca457ee | 55 | |
mbed_Cookbook_SE | 0:7d6abca457ee | 56 | blinkRate(HT16K33_BLINK_OFF); |
mbed_Cookbook_SE | 0:7d6abca457ee | 57 | |
mbed_Cookbook_SE | 0:7d6abca457ee | 58 | setBrightness(15); |
mbed_Cookbook_SE | 0:7d6abca457ee | 59 | } |
mbed_Cookbook_SE | 0:7d6abca457ee | 60 | |
mbed_Cookbook_SE | 0:7d6abca457ee | 61 | void LedPanel::writeDisplay(void) |
mbed_Cookbook_SE | 0:7d6abca457ee | 62 | { |
mbed_Cookbook_SE | 0:7d6abca457ee | 63 | char foo[2][17]; |
mbed_Cookbook_SE | 0:7d6abca457ee | 64 | foo[0][0] = 0x00; |
mbed_Cookbook_SE | 0:7d6abca457ee | 65 | foo[1][0] = 0x00; |
mbed_Cookbook_SE | 0:7d6abca457ee | 66 | |
mbed_Cookbook_SE | 0:7d6abca457ee | 67 | int j = 0; |
mbed_Cookbook_SE | 0:7d6abca457ee | 68 | for (uint8_t i=1; i<=16; i+=2) |
mbed_Cookbook_SE | 0:7d6abca457ee | 69 | { |
mbed_Cookbook_SE | 0:7d6abca457ee | 70 | for(uint8_t k=0; k < 2 ; k++) |
mbed_Cookbook_SE | 0:7d6abca457ee | 71 | { |
mbed_Cookbook_SE | 0:7d6abca457ee | 72 | int x = displaybuffer[j + k*8] & 0xFF; |
mbed_Cookbook_SE | 0:7d6abca457ee | 73 | foo[k][i] = x; |
mbed_Cookbook_SE | 0:7d6abca457ee | 74 | x = displaybuffer[j + k*8] >> 8; |
mbed_Cookbook_SE | 0:7d6abca457ee | 75 | foo[k][i+1] = x; |
mbed_Cookbook_SE | 0:7d6abca457ee | 76 | } |
mbed_Cookbook_SE | 0:7d6abca457ee | 77 | j++; |
mbed_Cookbook_SE | 0:7d6abca457ee | 78 | } |
mbed_Cookbook_SE | 0:7d6abca457ee | 79 | _i2c->write(i2c_addr[0], foo[0], 17); |
mbed_Cookbook_SE | 0:7d6abca457ee | 80 | _i2c->write(i2c_addr[1], foo[1], 17); |
mbed_Cookbook_SE | 0:7d6abca457ee | 81 | } |
mbed_Cookbook_SE | 0:7d6abca457ee | 82 | |
mbed_Cookbook_SE | 0:7d6abca457ee | 83 | void LedPanel::clear(void) |
mbed_Cookbook_SE | 0:7d6abca457ee | 84 | { |
mbed_Cookbook_SE | 0:7d6abca457ee | 85 | for (uint8_t i=0; i<16; i++) |
mbed_Cookbook_SE | 0:7d6abca457ee | 86 | { |
mbed_Cookbook_SE | 0:7d6abca457ee | 87 | displaybuffer[i] = 0; |
mbed_Cookbook_SE | 0:7d6abca457ee | 88 | } |
mbed_Cookbook_SE | 0:7d6abca457ee | 89 | } |
mbed_Cookbook_SE | 0:7d6abca457ee | 90 | |
mbed_Cookbook_SE | 0:7d6abca457ee | 91 | void LedPanel::drawPixel(int16_t x, int16_t y, uint16_t color) |
mbed_Cookbook_SE | 0:7d6abca457ee | 92 | { |
mbed_Cookbook_SE | 0:7d6abca457ee | 93 | if ((y < 0) || (y >= 16)) return; |
mbed_Cookbook_SE | 0:7d6abca457ee | 94 | if ((x < 0) || (x >= 16)) return; |
mbed_Cookbook_SE | 0:7d6abca457ee | 95 | |
mbed_Cookbook_SE | 0:7d6abca457ee | 96 | if (color) |
mbed_Cookbook_SE | 0:7d6abca457ee | 97 | { |
mbed_Cookbook_SE | 0:7d6abca457ee | 98 | displaybuffer[y] |= 1 << x; |
mbed_Cookbook_SE | 0:7d6abca457ee | 99 | } |
mbed_Cookbook_SE | 0:7d6abca457ee | 100 | else |
mbed_Cookbook_SE | 0:7d6abca457ee | 101 | { |
mbed_Cookbook_SE | 0:7d6abca457ee | 102 | displaybuffer[y] &= ~(1 << x); |
mbed_Cookbook_SE | 0:7d6abca457ee | 103 | } |
mbed_Cookbook_SE | 0:7d6abca457ee | 104 | } |
mbed_Cookbook_SE | 0:7d6abca457ee | 105 | |
mbed_Cookbook_SE | 0:7d6abca457ee | 106 | void LedPanel::Scroll(int16_t x, int16_t y) |
mbed_Cookbook_SE | 0:7d6abca457ee | 107 | { |
mbed_Cookbook_SE | 0:7d6abca457ee | 108 | bool bit[16]; |
mbed_Cookbook_SE | 0:7d6abca457ee | 109 | for (uint8_t i=0; i<16; i++) |
mbed_Cookbook_SE | 0:7d6abca457ee | 110 | { |
mbed_Cookbook_SE | 0:7d6abca457ee | 111 | bit[i] = false; |
mbed_Cookbook_SE | 0:7d6abca457ee | 112 | |
mbed_Cookbook_SE | 0:7d6abca457ee | 113 | if( (displaybuffer[i] & 0x8000) != 0 ) |
mbed_Cookbook_SE | 0:7d6abca457ee | 114 | { |
mbed_Cookbook_SE | 0:7d6abca457ee | 115 | bit[i] = true; |
mbed_Cookbook_SE | 0:7d6abca457ee | 116 | } |
mbed_Cookbook_SE | 0:7d6abca457ee | 117 | displaybuffer[i] <<= 1; |
mbed_Cookbook_SE | 0:7d6abca457ee | 118 | |
mbed_Cookbook_SE | 0:7d6abca457ee | 119 | if( bit[i] == true ) |
mbed_Cookbook_SE | 0:7d6abca457ee | 120 | { |
mbed_Cookbook_SE | 0:7d6abca457ee | 121 | displaybuffer[i] |= 1; |
mbed_Cookbook_SE | 0:7d6abca457ee | 122 | } |
mbed_Cookbook_SE | 0:7d6abca457ee | 123 | } |
mbed_Cookbook_SE | 0:7d6abca457ee | 124 | } |