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: mbed
LEDMatrix.cpp@0:4c2681e58186, 2021-01-19 (annotated)
- Committer:
- yanissk
- Date:
- Tue Jan 19 17:58:03 2021 +0000
- Revision:
- 0:4c2681e58186
PanneauLED_2021
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| yanissk | 0:4c2681e58186 | 1 | #include "LEDMatrix.h" |
| yanissk | 0:4c2681e58186 | 2 | #include "mbed.h" |
| yanissk | 0:4c2681e58186 | 3 | |
| yanissk | 0:4c2681e58186 | 4 | LEDMatrix::LEDMatrix(PinName pinA, PinName pinB, PinName pinC, PinName pinD, PinName pinOE, |
| yanissk | 0:4c2681e58186 | 5 | PinName pinR1, PinName pinR2, PinName pinB1, PinName pinB2, PinName pinG1, PinName pinG2, |
| yanissk | 0:4c2681e58186 | 6 | PinName pinSTB, PinName pinCLK) : |
| yanissk | 0:4c2681e58186 | 7 | oe(pinOE), stb(pinSTB), clk(pinCLK), |
| yanissk | 0:4c2681e58186 | 8 | _row(pinA, pinB, pinC, pinD), _rgb1(pinR1, pinG1, pinB1), _rgb2(pinR2, pinG2, pinB2) |
| yanissk | 0:4c2681e58186 | 9 | { |
| yanissk | 0:4c2681e58186 | 10 | clk = 0; |
| yanissk | 0:4c2681e58186 | 11 | oe = 1; |
| yanissk | 0:4c2681e58186 | 12 | stb = 1; |
| yanissk | 0:4c2681e58186 | 13 | mask = 0xff; |
| yanissk | 0:4c2681e58186 | 14 | state = 0; |
| yanissk | 0:4c2681e58186 | 15 | bufferIndex = 0; |
| yanissk | 0:4c2681e58186 | 16 | flagSwap = 0; |
| yanissk | 0:4c2681e58186 | 17 | nbImages = 0; |
| yanissk | 0:4c2681e58186 | 18 | } |
| yanissk | 0:4c2681e58186 | 19 | |
| yanissk | 0:4c2681e58186 | 20 | void LEDMatrix::begin(uint8_t *displaybuf, uint16_t width, uint16_t height) |
| yanissk | 0:4c2681e58186 | 21 | { |
| yanissk | 0:4c2681e58186 | 22 | this->displaybuf = displaybuf; |
| yanissk | 0:4c2681e58186 | 23 | memoBuf = displaybuf; |
| yanissk | 0:4c2681e58186 | 24 | drawBuf = memoBuf + width * height; |
| yanissk | 0:4c2681e58186 | 25 | this->width = width; |
| yanissk | 0:4c2681e58186 | 26 | this->height = height; |
| yanissk | 0:4c2681e58186 | 27 | |
| yanissk | 0:4c2681e58186 | 28 | state = 1; |
| yanissk | 0:4c2681e58186 | 29 | } |
| yanissk | 0:4c2681e58186 | 30 | |
| yanissk | 0:4c2681e58186 | 31 | void LEDMatrix::drawPoint(uint16_t x, uint16_t y, uint8_t pixel) |
| yanissk | 0:4c2681e58186 | 32 | { |
| yanissk | 0:4c2681e58186 | 33 | if (x>=width) return; |
| yanissk | 0:4c2681e58186 | 34 | if (y>=height) return; |
| yanissk | 0:4c2681e58186 | 35 | drawBuf[x+ width * y] = pixel & 0x07; |
| yanissk | 0:4c2681e58186 | 36 | } |
| yanissk | 0:4c2681e58186 | 37 | |
| yanissk | 0:4c2681e58186 | 38 | void LEDMatrix::drawRect(int x1, int y1, int x2, int y2, uint8_t pixel) |
| yanissk | 0:4c2681e58186 | 39 | { |
| yanissk | 0:4c2681e58186 | 40 | for (int x = x1; x < x2; x++) { |
| yanissk | 0:4c2681e58186 | 41 | for (int y = y1; y < y2; y++) { |
| yanissk | 0:4c2681e58186 | 42 | drawPoint((uint16_t)x, (uint16_t)y, pixel); |
| yanissk | 0:4c2681e58186 | 43 | } |
| yanissk | 0:4c2681e58186 | 44 | } |
| yanissk | 0:4c2681e58186 | 45 | } |
| yanissk | 0:4c2681e58186 | 46 | |
| yanissk | 0:4c2681e58186 | 47 | int LEDMatrix::drawChar(int x, int y, char c, uint8_t pixel, int font) |
| yanissk | 0:4c2681e58186 | 48 | { |
| yanissk | 0:4c2681e58186 | 49 | int i, j,k, col, max = 0; |
| yanissk | 0:4c2681e58186 | 50 | const Font *fptr = Font::getFont(font); |
| yanissk | 0:4c2681e58186 | 51 | for (i=0; i<fptr->hauteur(); i++) { |
| yanissk | 0:4c2681e58186 | 52 | for (k=0; k<fptr->largeur(); k++) { |
| yanissk | 0:4c2681e58186 | 53 | col = fptr->octet(c, i, k); |
| yanissk | 0:4c2681e58186 | 54 | for (j=8; j>=0; j--) { |
| yanissk | 0:4c2681e58186 | 55 | if (col & 0x01 != 0) { |
| yanissk | 0:4c2681e58186 | 56 | int dx = j+8*k; |
| yanissk | 0:4c2681e58186 | 57 | if (dx > max) max = dx; |
| yanissk | 0:4c2681e58186 | 58 | drawPoint((uint16_t)(x + dx), (uint16_t)(y+i), pixel); |
| yanissk | 0:4c2681e58186 | 59 | } |
| yanissk | 0:4c2681e58186 | 60 | col = col >> 1; |
| yanissk | 0:4c2681e58186 | 61 | } |
| yanissk | 0:4c2681e58186 | 62 | } |
| yanissk | 0:4c2681e58186 | 63 | } |
| yanissk | 0:4c2681e58186 | 64 | if (c==' ') { |
| yanissk | 0:4c2681e58186 | 65 | return 5*fptr->largeur(); |
| yanissk | 0:4c2681e58186 | 66 | } else { |
| yanissk | 0:4c2681e58186 | 67 | return max + fptr->largeur(); |
| yanissk | 0:4c2681e58186 | 68 | } |
| yanissk | 0:4c2681e58186 | 69 | } |
| yanissk | 0:4c2681e58186 | 70 | |
| yanissk | 0:4c2681e58186 | 71 | |
| yanissk | 0:4c2681e58186 | 72 | void LEDMatrix::drawCharString (int x, int y, char *c, uint8_t pixel, int font) |
| yanissk | 0:4c2681e58186 | 73 | { |
| yanissk | 0:4c2681e58186 | 74 | int i=0; |
| yanissk | 0:4c2681e58186 | 75 | while(c[i] != '\0') { |
| yanissk | 0:4c2681e58186 | 76 | int dx = drawChar(x,y,c[i],pixel,font); |
| yanissk | 0:4c2681e58186 | 77 | i++; |
| yanissk | 0:4c2681e58186 | 78 | x += dx; |
| yanissk | 0:4c2681e58186 | 79 | } |
| yanissk | 0:4c2681e58186 | 80 | } |
| yanissk | 0:4c2681e58186 | 81 | |
| yanissk | 0:4c2681e58186 | 82 | |
| yanissk | 0:4c2681e58186 | 83 | void LEDMatrix::drawImage(int x, int y, uint8_t w, uint8_t h, uint8_t *image) |
| yanissk | 0:4c2681e58186 | 84 | { |
| yanissk | 0:4c2681e58186 | 85 | for (int i = 0; i < h; i++) { |
| yanissk | 0:4c2681e58186 | 86 | for (int j = 0; j < w; j++) { |
| yanissk | 0:4c2681e58186 | 87 | drawPoint(x+j, y+i, *image); |
| yanissk | 0:4c2681e58186 | 88 | image++; |
| yanissk | 0:4c2681e58186 | 89 | } |
| yanissk | 0:4c2681e58186 | 90 | } |
| yanissk | 0:4c2681e58186 | 91 | } |
| yanissk | 0:4c2681e58186 | 92 | |
| yanissk | 0:4c2681e58186 | 93 | void LEDMatrix::drawArt(artDisplay * art) |
| yanissk | 0:4c2681e58186 | 94 | { |
| yanissk | 0:4c2681e58186 | 95 | this->drawImage(art->offset_x,art->offset_y,art->width,art->height,(uint8_t *)art->art); |
| yanissk | 0:4c2681e58186 | 96 | } |
| yanissk | 0:4c2681e58186 | 97 | |
| yanissk | 0:4c2681e58186 | 98 | void LEDMatrix::drawArtAnim(artAnim * anim) |
| yanissk | 0:4c2681e58186 | 99 | { |
| yanissk | 0:4c2681e58186 | 100 | for(int i=0; i < anim->steps; i++) |
| yanissk | 0:4c2681e58186 | 101 | { |
| yanissk | 0:4c2681e58186 | 102 | this->clear(); |
| yanissk | 0:4c2681e58186 | 103 | this->drawArt(&anim->arts[i]); |
| yanissk | 0:4c2681e58186 | 104 | this->swap(); |
| yanissk | 0:4c2681e58186 | 105 | while (!this->synchro()); |
| yanissk | 0:4c2681e58186 | 106 | wait_ms(anim->arts[i].duration); |
| yanissk | 0:4c2681e58186 | 107 | } |
| yanissk | 0:4c2681e58186 | 108 | } |
| yanissk | 0:4c2681e58186 | 109 | |
| yanissk | 0:4c2681e58186 | 110 | void LEDMatrix::drawShiftAnim(artDisplay * art){ |
| yanissk | 0:4c2681e58186 | 111 | |
| yanissk | 0:4c2681e58186 | 112 | for(int i=0; i < 33; i++) |
| yanissk | 0:4c2681e58186 | 113 | { |
| yanissk | 0:4c2681e58186 | 114 | this->clear(); |
| yanissk | 0:4c2681e58186 | 115 | this->drawImage(32-i, art->offset_y, art->width, art->height, (uint8_t *)art->art); |
| yanissk | 0:4c2681e58186 | 116 | this->swap(); |
| yanissk | 0:4c2681e58186 | 117 | while (!this->synchro()); |
| yanissk | 0:4c2681e58186 | 118 | wait_ms(60); |
| yanissk | 0:4c2681e58186 | 119 | } |
| yanissk | 0:4c2681e58186 | 120 | wait_ms(500); |
| yanissk | 0:4c2681e58186 | 121 | this->clear(); |
| yanissk | 0:4c2681e58186 | 122 | this->swap(); |
| yanissk | 0:4c2681e58186 | 123 | |
| yanissk | 0:4c2681e58186 | 124 | wait_ms(500); |
| yanissk | 0:4c2681e58186 | 125 | this->drawImage(32, art->offset_y, art->width, art->height, (uint8_t *)art->art); |
| yanissk | 0:4c2681e58186 | 126 | this->swap(); |
| yanissk | 0:4c2681e58186 | 127 | |
| yanissk | 0:4c2681e58186 | 128 | wait_ms(500); |
| yanissk | 0:4c2681e58186 | 129 | this->clear(); |
| yanissk | 0:4c2681e58186 | 130 | this->swap(); |
| yanissk | 0:4c2681e58186 | 131 | |
| yanissk | 0:4c2681e58186 | 132 | wait_ms(500); |
| yanissk | 0:4c2681e58186 | 133 | this->drawImage(32, art->offset_y, art->width, art->height, (uint8_t *)art->art); |
| yanissk | 0:4c2681e58186 | 134 | this->swap(); |
| yanissk | 0:4c2681e58186 | 135 | |
| yanissk | 0:4c2681e58186 | 136 | } |
| yanissk | 0:4c2681e58186 | 137 | |
| yanissk | 0:4c2681e58186 | 138 | void LEDMatrix::drawdoorAnim(uint8_t artToDraw[32][32]){ |
| yanissk | 0:4c2681e58186 | 139 | this->clear(); |
| yanissk | 0:4c2681e58186 | 140 | |
| yanissk | 0:4c2681e58186 | 141 | for(unsigned char j = 0; j<16; j++){ |
| yanissk | 0:4c2681e58186 | 142 | |
| yanissk | 0:4c2681e58186 | 143 | for(int i=0; i < 33; i++){ |
| yanissk | 0:4c2681e58186 | 144 | |
| yanissk | 0:4c2681e58186 | 145 | if(artToDraw[i][j]){ |
| yanissk | 0:4c2681e58186 | 146 | |
| yanissk | 0:4c2681e58186 | 147 | this->drawPoint(j, i, artToDraw[i][j]); |
| yanissk | 0:4c2681e58186 | 148 | this->swap(); |
| yanissk | 0:4c2681e58186 | 149 | while (!this->synchro()); |
| yanissk | 0:4c2681e58186 | 150 | wait_ms(5); |
| yanissk | 0:4c2681e58186 | 151 | |
| yanissk | 0:4c2681e58186 | 152 | } |
| yanissk | 0:4c2681e58186 | 153 | |
| yanissk | 0:4c2681e58186 | 154 | if(artToDraw[i][32-j]){ |
| yanissk | 0:4c2681e58186 | 155 | |
| yanissk | 0:4c2681e58186 | 156 | this->drawPoint(31-j, i, artToDraw[i][32-j]); |
| yanissk | 0:4c2681e58186 | 157 | this->swap(); |
| yanissk | 0:4c2681e58186 | 158 | while (!this->synchro()); |
| yanissk | 0:4c2681e58186 | 159 | wait_ms(5); |
| yanissk | 0:4c2681e58186 | 160 | } |
| yanissk | 0:4c2681e58186 | 161 | } |
| yanissk | 0:4c2681e58186 | 162 | } |
| yanissk | 0:4c2681e58186 | 163 | this->clear(); |
| yanissk | 0:4c2681e58186 | 164 | this->swap(); |
| yanissk | 0:4c2681e58186 | 165 | |
| yanissk | 0:4c2681e58186 | 166 | wait_ms(500); |
| yanissk | 0:4c2681e58186 | 167 | this->drawImage(0, 0, 32, 32, artToDraw[0]); |
| yanissk | 0:4c2681e58186 | 168 | this->swap(); |
| yanissk | 0:4c2681e58186 | 169 | |
| yanissk | 0:4c2681e58186 | 170 | wait_ms(500); |
| yanissk | 0:4c2681e58186 | 171 | this->clear(); |
| yanissk | 0:4c2681e58186 | 172 | this->swap(); |
| yanissk | 0:4c2681e58186 | 173 | |
| yanissk | 0:4c2681e58186 | 174 | wait_ms(500); |
| yanissk | 0:4c2681e58186 | 175 | this->drawImage(0, 0, 32, 32, artToDraw[0]); |
| yanissk | 0:4c2681e58186 | 176 | this->swap(); |
| yanissk | 0:4c2681e58186 | 177 | } |
| yanissk | 0:4c2681e58186 | 178 | |
| yanissk | 0:4c2681e58186 | 179 | void LEDMatrix::drawSpiralAnim(uint8_t artToDraw[32][32]){ |
| yanissk | 0:4c2681e58186 | 180 | |
| yanissk | 0:4c2681e58186 | 181 | unsigned char x = 32, y = 32; |
| yanissk | 0:4c2681e58186 | 182 | this->clear(); |
| yanissk | 0:4c2681e58186 | 183 | for(int i=0; i < x; i++) |
| yanissk | 0:4c2681e58186 | 184 | { |
| yanissk | 0:4c2681e58186 | 185 | |
| yanissk | 0:4c2681e58186 | 186 | for(int j=0; j<y; j++){ |
| yanissk | 0:4c2681e58186 | 187 | if(!artToDraw[i][j]) continue; |
| yanissk | 0:4c2681e58186 | 188 | this->drawPoint(j, i, artToDraw[i][j]); |
| yanissk | 0:4c2681e58186 | 189 | this->swap(); |
| yanissk | 0:4c2681e58186 | 190 | wait_ms(5); |
| yanissk | 0:4c2681e58186 | 191 | } |
| yanissk | 0:4c2681e58186 | 192 | |
| yanissk | 0:4c2681e58186 | 193 | for(int j=1; j<y; j++){ |
| yanissk | 0:4c2681e58186 | 194 | if(!artToDraw[j][x-1]) continue; |
| yanissk | 0:4c2681e58186 | 195 | this->drawPoint(x-1, j, artToDraw[j][x-1]); |
| yanissk | 0:4c2681e58186 | 196 | this->swap(); |
| yanissk | 0:4c2681e58186 | 197 | wait_ms(5); |
| yanissk | 0:4c2681e58186 | 198 | } |
| yanissk | 0:4c2681e58186 | 199 | |
| yanissk | 0:4c2681e58186 | 200 | for(int j=1; j<y; j++){ |
| yanissk | 0:4c2681e58186 | 201 | if(!artToDraw[y-1][y-j-1]) continue; |
| yanissk | 0:4c2681e58186 | 202 | this->drawPoint((y-j-1), y-1, artToDraw[y-1][y-j-1]); |
| yanissk | 0:4c2681e58186 | 203 | this->swap(); |
| yanissk | 0:4c2681e58186 | 204 | wait_ms(5); |
| yanissk | 0:4c2681e58186 | 205 | } |
| yanissk | 0:4c2681e58186 | 206 | |
| yanissk | 0:4c2681e58186 | 207 | for(int j=1; j<y; j++){ |
| yanissk | 0:4c2681e58186 | 208 | if(!artToDraw[y-j-2][i]) continue; |
| yanissk | 0:4c2681e58186 | 209 | this->drawPoint(i, (y-j-2), artToDraw[y-j-2][i]); |
| yanissk | 0:4c2681e58186 | 210 | this->swap(); |
| yanissk | 0:4c2681e58186 | 211 | wait_ms(5); |
| yanissk | 0:4c2681e58186 | 212 | } |
| yanissk | 0:4c2681e58186 | 213 | |
| yanissk | 0:4c2681e58186 | 214 | x--; |
| yanissk | 0:4c2681e58186 | 215 | y--; |
| yanissk | 0:4c2681e58186 | 216 | |
| yanissk | 0:4c2681e58186 | 217 | } |
| yanissk | 0:4c2681e58186 | 218 | this->clear(); |
| yanissk | 0:4c2681e58186 | 219 | this->swap(); |
| yanissk | 0:4c2681e58186 | 220 | |
| yanissk | 0:4c2681e58186 | 221 | wait_ms(500); |
| yanissk | 0:4c2681e58186 | 222 | this->drawImage(0, 0, 32, 32, artToDraw[0]); |
| yanissk | 0:4c2681e58186 | 223 | this->swap(); |
| yanissk | 0:4c2681e58186 | 224 | |
| yanissk | 0:4c2681e58186 | 225 | wait_ms(500); |
| yanissk | 0:4c2681e58186 | 226 | this->clear(); |
| yanissk | 0:4c2681e58186 | 227 | this->swap(); |
| yanissk | 0:4c2681e58186 | 228 | |
| yanissk | 0:4c2681e58186 | 229 | wait_ms(500); |
| yanissk | 0:4c2681e58186 | 230 | this->drawImage(0, 0, 32, 32, artToDraw[0]); |
| yanissk | 0:4c2681e58186 | 231 | this->swap(); |
| yanissk | 0:4c2681e58186 | 232 | } |
| yanissk | 0:4c2681e58186 | 233 | |
| yanissk | 0:4c2681e58186 | 234 | |
| yanissk | 0:4c2681e58186 | 235 | void LEDMatrix::clear() |
| yanissk | 0:4c2681e58186 | 236 | { |
| yanissk | 0:4c2681e58186 | 237 | uint8_t *ptr = drawBuf; |
| yanissk | 0:4c2681e58186 | 238 | for (uint16_t i = 0; i < (width * height); i++) { |
| yanissk | 0:4c2681e58186 | 239 | *ptr = 0x00; |
| yanissk | 0:4c2681e58186 | 240 | ptr++; |
| yanissk | 0:4c2681e58186 | 241 | } |
| yanissk | 0:4c2681e58186 | 242 | } |
| yanissk | 0:4c2681e58186 | 243 | |
| yanissk | 0:4c2681e58186 | 244 | void LEDMatrix::reverse() |
| yanissk | 0:4c2681e58186 | 245 | { |
| yanissk | 0:4c2681e58186 | 246 | mask = ~mask; |
| yanissk | 0:4c2681e58186 | 247 | } |
| yanissk | 0:4c2681e58186 | 248 | |
| yanissk | 0:4c2681e58186 | 249 | uint8_t LEDMatrix::isReversed() |
| yanissk | 0:4c2681e58186 | 250 | { |
| yanissk | 0:4c2681e58186 | 251 | return mask; |
| yanissk | 0:4c2681e58186 | 252 | } |
| yanissk | 0:4c2681e58186 | 253 | |
| yanissk | 0:4c2681e58186 | 254 | void LEDMatrix::scan() |
| yanissk | 0:4c2681e58186 | 255 | { |
| yanissk | 0:4c2681e58186 | 256 | if (!state) { |
| yanissk | 0:4c2681e58186 | 257 | return; |
| yanissk | 0:4c2681e58186 | 258 | } |
| yanissk | 0:4c2681e58186 | 259 | |
| yanissk | 0:4c2681e58186 | 260 | static uint8_t row = 0; |
| yanissk | 0:4c2681e58186 | 261 | |
| yanissk | 0:4c2681e58186 | 262 | int debut1 = 256 + (row) * width; |
| yanissk | 0:4c2681e58186 | 263 | int debut2 = 768 + (row) * width; |
| yanissk | 0:4c2681e58186 | 264 | for (uint8_t i = 0; i <32 ; i++) |
| yanissk | 0:4c2681e58186 | 265 | { |
| yanissk | 0:4c2681e58186 | 266 | _rgb1 = displaybuf[debut1+i]; |
| yanissk | 0:4c2681e58186 | 267 | _rgb2 = displaybuf[debut2+i]; |
| yanissk | 0:4c2681e58186 | 268 | clk = 0; |
| yanissk | 0:4c2681e58186 | 269 | clk = 1; |
| yanissk | 0:4c2681e58186 | 270 | } |
| yanissk | 0:4c2681e58186 | 271 | /* debut1 = 0 + (row+8) * width; |
| yanissk | 0:4c2681e58186 | 272 | debut2 = 512 + (row+8) * width; |
| yanissk | 0:4c2681e58186 | 273 | |
| yanissk | 0:4c2681e58186 | 274 | for (uint8_t i = 0; i <32 ; i++) { |
| yanissk | 0:4c2681e58186 | 275 | _rgb1 = displaybuf[debut1+i]; |
| yanissk | 0:4c2681e58186 | 276 | _rgb2 = displaybuf[debut2+i]; |
| yanissk | 0:4c2681e58186 | 277 | clk = 0; |
| yanissk | 0:4c2681e58186 | 278 | clk = 1; |
| yanissk | 0:4c2681e58186 | 279 | }*/ |
| yanissk | 0:4c2681e58186 | 280 | debut1 = 0 + row * width; |
| yanissk | 0:4c2681e58186 | 281 | debut2 = 512 + row * width; |
| yanissk | 0:4c2681e58186 | 282 | for (uint8_t i = 0; i <32 ; i++) { |
| yanissk | 0:4c2681e58186 | 283 | _rgb1 = displaybuf[debut1+i]; |
| yanissk | 0:4c2681e58186 | 284 | _rgb2 = displaybuf[debut2+i]; |
| yanissk | 0:4c2681e58186 | 285 | clk = 0; |
| yanissk | 0:4c2681e58186 | 286 | clk = 1; |
| yanissk | 0:4c2681e58186 | 287 | } |
| yanissk | 0:4c2681e58186 | 288 | |
| yanissk | 0:4c2681e58186 | 289 | oe = 1; |
| yanissk | 0:4c2681e58186 | 290 | stb = 1; |
| yanissk | 0:4c2681e58186 | 291 | |
| yanissk | 0:4c2681e58186 | 292 | _row = row; |
| yanissk | 0:4c2681e58186 | 293 | |
| yanissk | 0:4c2681e58186 | 294 | oe = 0; |
| yanissk | 0:4c2681e58186 | 295 | stb = 0; |
| yanissk | 0:4c2681e58186 | 296 | |
| yanissk | 0:4c2681e58186 | 297 | row=(row + 1) & 0x07; |
| yanissk | 0:4c2681e58186 | 298 | if (row==0) { |
| yanissk | 0:4c2681e58186 | 299 | nbImages++; |
| yanissk | 0:4c2681e58186 | 300 | if (flagSwap == 1) { |
| yanissk | 0:4c2681e58186 | 301 | if (bufferIndex==0) { |
| yanissk | 0:4c2681e58186 | 302 | bufferIndex = 1; |
| yanissk | 0:4c2681e58186 | 303 | displaybuf = memoBuf + width*height; |
| yanissk | 0:4c2681e58186 | 304 | drawBuf = memoBuf; |
| yanissk | 0:4c2681e58186 | 305 | } else { |
| yanissk | 0:4c2681e58186 | 306 | bufferIndex = 0; |
| yanissk | 0:4c2681e58186 | 307 | displaybuf = memoBuf; |
| yanissk | 0:4c2681e58186 | 308 | drawBuf = memoBuf + width*height; |
| yanissk | 0:4c2681e58186 | 309 | } |
| yanissk | 0:4c2681e58186 | 310 | flagSwap = 0; |
| yanissk | 0:4c2681e58186 | 311 | } |
| yanissk | 0:4c2681e58186 | 312 | } |
| yanissk | 0:4c2681e58186 | 313 | } |
| yanissk | 0:4c2681e58186 | 314 | |
| yanissk | 0:4c2681e58186 | 315 | void LEDMatrix::on() |
| yanissk | 0:4c2681e58186 | 316 | { |
| yanissk | 0:4c2681e58186 | 317 | state = 1; |
| yanissk | 0:4c2681e58186 | 318 | } |
| yanissk | 0:4c2681e58186 | 319 | |
| yanissk | 0:4c2681e58186 | 320 | void LEDMatrix::off() |
| yanissk | 0:4c2681e58186 | 321 | { |
| yanissk | 0:4c2681e58186 | 322 | state = 0; |
| yanissk | 0:4c2681e58186 | 323 | oe = 1; |
| yanissk | 0:4c2681e58186 | 324 | } |
| yanissk | 0:4c2681e58186 | 325 | |
| yanissk | 0:4c2681e58186 | 326 | void LEDMatrix::swap() |
| yanissk | 0:4c2681e58186 | 327 | { |
| yanissk | 0:4c2681e58186 | 328 | flagSwap = 1; |
| yanissk | 0:4c2681e58186 | 329 | } |
| yanissk | 0:4c2681e58186 | 330 | |
| yanissk | 0:4c2681e58186 | 331 | int LEDMatrix::synchro() |
| yanissk | 0:4c2681e58186 | 332 | { |
| yanissk | 0:4c2681e58186 | 333 | return !flagSwap; |
| yanissk | 0:4c2681e58186 | 334 | } |
| yanissk | 0:4c2681e58186 | 335 | |
| yanissk | 0:4c2681e58186 | 336 | void LEDMatrix::waitImages(int nb) |
| yanissk | 0:4c2681e58186 | 337 | { |
| yanissk | 0:4c2681e58186 | 338 | while (nbImages < nb) wait_us(100); |
| yanissk | 0:4c2681e58186 | 339 | nbImages = 0; |
| yanissk | 0:4c2681e58186 | 340 | } |
| yanissk | 0:4c2681e58186 | 341 |