Microduino

Dependencies:   mbed

Fork of LED_DZ by Li Weiyi

Committer:
lixianyu
Date:
Tue May 31 15:32:03 2016 +0000
Revision:
0:5ca227682ee7
Child:
1:14b7c3a3ec60
???????(Pass compile!)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lixianyu 0:5ca227682ee7 1 // 本作品采用知识共享 署名-非商业性使用-相同方式共享 3.0 未本地化版本 许可协议进行许可
lixianyu 0:5ca227682ee7 2 // 访问 http://creativecommons.org/licenses/by-nc-sa/3.0/ 查看该许可协议
lixianyu 0:5ca227682ee7 3 // ==============
lixianyu 0:5ca227682ee7 4
lixianyu 0:5ca227682ee7 5 // 版权所有:
lixianyu 0:5ca227682ee7 6 // @老潘orz wasdpkj@hotmail.com
lixianyu 0:5ca227682ee7 7 // ==============
lixianyu 0:5ca227682ee7 8
lixianyu 0:5ca227682ee7 9 // Microduino-IDE
lixianyu 0:5ca227682ee7 10 // ==============
lixianyu 0:5ca227682ee7 11 // Microduino Getting start:
lixianyu 0:5ca227682ee7 12 // http://www.microduino.cc/download/
lixianyu 0:5ca227682ee7 13
lixianyu 0:5ca227682ee7 14 // Microduino IDE Support:
lixianyu 0:5ca227682ee7 15 // https://github.com/wasdpkj/Microduino-IDE-Support/
lixianyu 0:5ca227682ee7 16
lixianyu 0:5ca227682ee7 17 // ==============
lixianyu 0:5ca227682ee7 18 // Microduino wiki:
lixianyu 0:5ca227682ee7 19 // http://wiki.microduino.cc
lixianyu 0:5ca227682ee7 20
lixianyu 0:5ca227682ee7 21 // ==============
lixianyu 0:5ca227682ee7 22 // E-mail:
lixianyu 0:5ca227682ee7 23 // Kejia Pan
lixianyu 0:5ca227682ee7 24 // pankejia@microduino.cc
lixianyu 0:5ca227682ee7 25
lixianyu 0:5ca227682ee7 26 // ==============
lixianyu 0:5ca227682ee7 27 // Weibo:
lixianyu 0:5ca227682ee7 28 // @老潘orz
lixianyu 0:5ca227682ee7 29
lixianyu 0:5ca227682ee7 30 #include "Microduino_Matrix.h"
lixianyu 0:5ca227682ee7 31 #include "Fonts.h"
lixianyu 0:5ca227682ee7 32
lixianyu 0:5ca227682ee7 33 #define read16(Y,Z) (uint16_t)((uint8_t)pgm_read_byte((Y) + (Z++)) | ((uint8_t)pgm_read_byte((Y) + (Z++)) << 8))
lixianyu 0:5ca227682ee7 34 #define read32(Y,Z) (uint32_t)((uint8_t)pgm_read_byte((Y) + (Z++)) | ((uint8_t)pgm_read_byte((Y) + (Z++)) << 8) | ((uint8_t)pgm_read_byte((Y) + (Z++)) << 16) | ((uint8_t)pgm_read_byte((Y) + (Z++)) << 24))
lixianyu 0:5ca227682ee7 35 #define BUFFPIXEL (MatrixPix_X * 8 * 3)
lixianyu 0:5ca227682ee7 36
lixianyu 0:5ca227682ee7 37 Matrix::Matrix(uint8_t (*_addr)[8])
lixianyu 0:5ca227682ee7 38 {
lixianyu 0:5ca227682ee7 39 // uint8_t (*p)[10]=_addr;
lixianyu 0:5ca227682ee7 40 uint8_t _x = 0, _y = 0;
lixianyu 0:5ca227682ee7 41 for (uint8_t a = 0; a < 8; a++) { //判断第一层
lixianyu 0:5ca227682ee7 42 if (_addr[0][a] == 0) {
lixianyu 0:5ca227682ee7 43
lixianyu 0:5ca227682ee7 44 break; //NULL,结束当前层判断
lixianyu 0:5ca227682ee7 45 } else {
lixianyu 0:5ca227682ee7 46 _x = a + 1;
lixianyu 0:5ca227682ee7 47 for (uint8_t b = 0; b < 8; b++) { //判断第二层
lixianyu 0:5ca227682ee7 48 if (_addr[b][a] == 0) {
lixianyu 0:5ca227682ee7 49 break; //NULL,结束当前层判断
lixianyu 0:5ca227682ee7 50 } else {
lixianyu 0:5ca227682ee7 51 _y = b + 1;
lixianyu 0:5ca227682ee7 52 }
lixianyu 0:5ca227682ee7 53 }
lixianyu 0:5ca227682ee7 54 }
lixianyu 0:5ca227682ee7 55 }
lixianyu 0:5ca227682ee7 56
lixianyu 0:5ca227682ee7 57 this->_numX = _x;
lixianyu 0:5ca227682ee7 58 this->_numY = _y;
lixianyu 0:5ca227682ee7 59
lixianyu 0:5ca227682ee7 60 this->_matrixNum = this->_numX * this->_numY;
lixianyu 0:5ca227682ee7 61 led = new LedControl[this->_matrixNum];
lixianyu 0:5ca227682ee7 62
lixianyu 0:5ca227682ee7 63 this->cursor_y = 0;
lixianyu 0:5ca227682ee7 64 this->cursor_x = 0;
lixianyu 0:5ca227682ee7 65
lixianyu 0:5ca227682ee7 66 uint8_t _p[64];
lixianyu 0:5ca227682ee7 67 for (int a = 0; a < this->_numY; a++) {
lixianyu 0:5ca227682ee7 68 for (int b = 0; b < this->_numX ; b++) {
lixianyu 0:5ca227682ee7 69 uint8_t _s = b + a * this->_numX ;
lixianyu 0:5ca227682ee7 70 _p[_s] = _addr[a][b];
lixianyu 0:5ca227682ee7 71 }
lixianyu 0:5ca227682ee7 72 }
lixianyu 0:5ca227682ee7 73 setDeviceAddr(_p);
lixianyu 0:5ca227682ee7 74
lixianyu 0:5ca227682ee7 75 clearFastMode();
lixianyu 0:5ca227682ee7 76 clearColor();
lixianyu 0:5ca227682ee7 77 setFontMode(true);
lixianyu 0:5ca227682ee7 78 }
lixianyu 0:5ca227682ee7 79
lixianyu 0:5ca227682ee7 80 uint8_t Matrix::getDeviceAddr(uint8_t _a)
lixianyu 0:5ca227682ee7 81 {
lixianyu 0:5ca227682ee7 82 return led[_a].getDeviceAddr();
lixianyu 0:5ca227682ee7 83 }
lixianyu 0:5ca227682ee7 84
lixianyu 0:5ca227682ee7 85
lixianyu 0:5ca227682ee7 86 void Matrix::setDeviceAddr(uint8_t* _addr)
lixianyu 0:5ca227682ee7 87 {
lixianyu 0:5ca227682ee7 88 for (int a = 0; a < getMatrixNum(); a++)
lixianyu 0:5ca227682ee7 89 led[a].setDeviceAddr(_addr[a]);
lixianyu 0:5ca227682ee7 90 }
lixianyu 0:5ca227682ee7 91
lixianyu 0:5ca227682ee7 92
lixianyu 0:5ca227682ee7 93 void Matrix::clearDisplay()
lixianyu 0:5ca227682ee7 94 {
lixianyu 0:5ca227682ee7 95 for (int a = 0; a < getMatrixNum(); a++)
lixianyu 0:5ca227682ee7 96 led[a].clearDisplay();
lixianyu 0:5ca227682ee7 97 }
lixianyu 0:5ca227682ee7 98
lixianyu 0:5ca227682ee7 99
lixianyu 0:5ca227682ee7 100 void Matrix::setLedColor(uint8_t _row, uint8_t _col, uint8_t _value_r, uint8_t _value_g, uint8_t _value_b)
lixianyu 0:5ca227682ee7 101 {
lixianyu 0:5ca227682ee7 102 if((_col > (getHeight() * 8 - 1)) || (_row > (getWidth() * 8 - 1)))
lixianyu 0:5ca227682ee7 103 return;
lixianyu 0:5ca227682ee7 104 int16_t _s = (_row / 8) + (_col / 8) * getWidth();
lixianyu 0:5ca227682ee7 105 led[_s].setLedColor(_row % 8, _col % 8, _value_r, _value_g, _value_b);
lixianyu 0:5ca227682ee7 106 }
lixianyu 0:5ca227682ee7 107
lixianyu 0:5ca227682ee7 108
lixianyu 0:5ca227682ee7 109 void Matrix::setLedColorFast(uint8_t _row, uint8_t _col, uint8_t _value_r, uint8_t _value_g, uint8_t _value_b)
lixianyu 0:5ca227682ee7 110 {
lixianyu 0:5ca227682ee7 111 if((_col > (getHeight() * 8 - 1)) || (_row > (getWidth() * 8 - 1)))
lixianyu 0:5ca227682ee7 112 return;
lixianyu 0:5ca227682ee7 113 int16_t _s = (_row / 8) + (_col / 8) * getWidth();
lixianyu 0:5ca227682ee7 114 led[_s].setLedColorFast(_row % 8, _col % 8, _value_r, _value_g, _value_b);
lixianyu 0:5ca227682ee7 115 }
lixianyu 0:5ca227682ee7 116
lixianyu 0:5ca227682ee7 117 void Matrix::setLed(uint8_t _row, uint8_t _col, bool _state)
lixianyu 0:5ca227682ee7 118 {
lixianyu 0:5ca227682ee7 119 if((_col > (getHeight() * 8 - 1)) || (_row > (getWidth() * 8 - 1)))
lixianyu 0:5ca227682ee7 120 return;
lixianyu 0:5ca227682ee7 121 int16_t _s = (_row / 8) + (_col / 8) * getWidth();
lixianyu 0:5ca227682ee7 122 led[_s].setLed(_row % 8, _col % 8, _state);
lixianyu 0:5ca227682ee7 123 }
lixianyu 0:5ca227682ee7 124
lixianyu 0:5ca227682ee7 125
lixianyu 0:5ca227682ee7 126 void Matrix::setCursor(int16_t _x, int16_t _y)
lixianyu 0:5ca227682ee7 127 {
lixianyu 0:5ca227682ee7 128 this->cursor_x = _x;
lixianyu 0:5ca227682ee7 129 this->cursor_y = _y;
lixianyu 0:5ca227682ee7 130
lixianyu 0:5ca227682ee7 131 for (int _y = 0; _y < getHeight(); _y++) {
lixianyu 0:5ca227682ee7 132 for (int _x = 0; _x < getWidth(); _x++) {
lixianyu 0:5ca227682ee7 133 uint8_t _s = _x + _y * getWidth();
lixianyu 0:5ca227682ee7 134 led[_s].setCursor(-(8 * _x) + this->cursor_x, -(8 * _y) + this->cursor_y);
lixianyu 0:5ca227682ee7 135 }
lixianyu 0:5ca227682ee7 136 }
lixianyu 0:5ca227682ee7 137 }
lixianyu 0:5ca227682ee7 138
lixianyu 0:5ca227682ee7 139
lixianyu 0:5ca227682ee7 140 void Matrix::setFastMode()
lixianyu 0:5ca227682ee7 141 {
lixianyu 0:5ca227682ee7 142 // runFun(&setFastMode);
lixianyu 0:5ca227682ee7 143 // this->Fast_mode = true;
lixianyu 0:5ca227682ee7 144 for (int a = 0; a < getMatrixNum(); a++)
lixianyu 0:5ca227682ee7 145 led[a].setFastMode();
lixianyu 0:5ca227682ee7 146 }
lixianyu 0:5ca227682ee7 147
lixianyu 0:5ca227682ee7 148
lixianyu 0:5ca227682ee7 149 void Matrix::clearFastMode()
lixianyu 0:5ca227682ee7 150 {
lixianyu 0:5ca227682ee7 151 // this->Fast_mode = false;
lixianyu 0:5ca227682ee7 152 for (int a = 0; a < getMatrixNum(); a++)
lixianyu 0:5ca227682ee7 153 led[a].clearFastMode();
lixianyu 0:5ca227682ee7 154 }
lixianyu 0:5ca227682ee7 155
lixianyu 0:5ca227682ee7 156
lixianyu 0:5ca227682ee7 157 void Matrix::setFontMode(bool _Mode)
lixianyu 0:5ca227682ee7 158 {
lixianyu 0:5ca227682ee7 159 for (int a = 0; a < getMatrixNum(); a++)
lixianyu 0:5ca227682ee7 160 led[a].setFontMode(_Mode);
lixianyu 0:5ca227682ee7 161 }
lixianyu 0:5ca227682ee7 162
lixianyu 0:5ca227682ee7 163
lixianyu 0:5ca227682ee7 164 void Matrix::setColor(uint8_t value_r, uint8_t value_g, uint8_t value_b)
lixianyu 0:5ca227682ee7 165 {
lixianyu 0:5ca227682ee7 166 for (int a = 0; a < getMatrixNum(); a++)
lixianyu 0:5ca227682ee7 167 led[a].setColor(value_r, value_g, value_b);
lixianyu 0:5ca227682ee7 168 }
lixianyu 0:5ca227682ee7 169
lixianyu 0:5ca227682ee7 170
lixianyu 0:5ca227682ee7 171 void Matrix::clearColor()
lixianyu 0:5ca227682ee7 172 {
lixianyu 0:5ca227682ee7 173 for (int a = 0; a < getMatrixNum(); a++)
lixianyu 0:5ca227682ee7 174 led[a].clearColor();
lixianyu 0:5ca227682ee7 175 }
lixianyu 0:5ca227682ee7 176
lixianyu 0:5ca227682ee7 177
lixianyu 0:5ca227682ee7 178 void Matrix::drawLine(int8_t x1, int8_t y1, int8_t x2, int8_t y2)
lixianyu 0:5ca227682ee7 179 {
lixianyu 0:5ca227682ee7 180 uint8_t tmp;
lixianyu 0:5ca227682ee7 181 uint8_t x, y;
lixianyu 0:5ca227682ee7 182 uint8_t dx, dy;
lixianyu 0:5ca227682ee7 183 int8_t err;
lixianyu 0:5ca227682ee7 184 int8_t ystep;
lixianyu 0:5ca227682ee7 185
lixianyu 0:5ca227682ee7 186 uint8_t swapxy = 0;
lixianyu 0:5ca227682ee7 187
lixianyu 0:5ca227682ee7 188 /* no BBX intersection check at the moment, should be added... */
lixianyu 0:5ca227682ee7 189
lixianyu 0:5ca227682ee7 190 if ( x1 > x2 ) dx = x1 - x2;
lixianyu 0:5ca227682ee7 191 else dx = x2 - x1;
lixianyu 0:5ca227682ee7 192 if ( y1 > y2 ) dy = y1 - y2;
lixianyu 0:5ca227682ee7 193 else dy = y2 - y1;
lixianyu 0:5ca227682ee7 194
lixianyu 0:5ca227682ee7 195 if ( dy > dx ) {
lixianyu 0:5ca227682ee7 196 swapxy = 1;
lixianyu 0:5ca227682ee7 197 tmp = dx;
lixianyu 0:5ca227682ee7 198 dx = dy;
lixianyu 0:5ca227682ee7 199 dy = tmp;
lixianyu 0:5ca227682ee7 200 tmp = x1;
lixianyu 0:5ca227682ee7 201 x1 = y1;
lixianyu 0:5ca227682ee7 202 y1 = tmp;
lixianyu 0:5ca227682ee7 203 tmp = x2;
lixianyu 0:5ca227682ee7 204 x2 = y2;
lixianyu 0:5ca227682ee7 205 y2 = tmp;
lixianyu 0:5ca227682ee7 206 }
lixianyu 0:5ca227682ee7 207 if ( x1 > x2 ) {
lixianyu 0:5ca227682ee7 208 tmp = x1;
lixianyu 0:5ca227682ee7 209 x1 = x2;
lixianyu 0:5ca227682ee7 210 x2 = tmp;
lixianyu 0:5ca227682ee7 211 tmp = y1;
lixianyu 0:5ca227682ee7 212 y1 = y2;
lixianyu 0:5ca227682ee7 213 y2 = tmp;
lixianyu 0:5ca227682ee7 214 }
lixianyu 0:5ca227682ee7 215 err = dx >> 1;
lixianyu 0:5ca227682ee7 216 if ( y2 > y1 ) ystep = 1;
lixianyu 0:5ca227682ee7 217 else ystep = -1;
lixianyu 0:5ca227682ee7 218 y = y1;
lixianyu 0:5ca227682ee7 219 for ( x = x1; x <= x2; x++ ) {
lixianyu 0:5ca227682ee7 220 if ( swapxy == 0 )
lixianyu 0:5ca227682ee7 221 setLed(x, y, 1);
lixianyu 0:5ca227682ee7 222 else
lixianyu 0:5ca227682ee7 223 setLed(y, x, 1);
lixianyu 0:5ca227682ee7 224 err -= (uint8_t)dy;
lixianyu 0:5ca227682ee7 225 if ( err < 0 ) {
lixianyu 0:5ca227682ee7 226 y += (uint8_t)ystep;
lixianyu 0:5ca227682ee7 227 err += (uint8_t)dx;
lixianyu 0:5ca227682ee7 228 }
lixianyu 0:5ca227682ee7 229 }
lixianyu 0:5ca227682ee7 230 }
lixianyu 0:5ca227682ee7 231
lixianyu 0:5ca227682ee7 232
lixianyu 0:5ca227682ee7 233 void Matrix::drawCircle_section(int8_t x, int8_t y, int8_t x0, int8_t y0, uint8_t option)
lixianyu 0:5ca227682ee7 234 {
lixianyu 0:5ca227682ee7 235 /* upper right */
lixianyu 0:5ca227682ee7 236 if ( option & U8G_DRAW_UPPER_RIGHT ) {
lixianyu 0:5ca227682ee7 237 setLed(x0 + x, y0 - y, 1);
lixianyu 0:5ca227682ee7 238 setLed(x0 + y, y0 - x, 1);
lixianyu 0:5ca227682ee7 239 }
lixianyu 0:5ca227682ee7 240
lixianyu 0:5ca227682ee7 241 /* upper left */
lixianyu 0:5ca227682ee7 242 if ( option & U8G_DRAW_UPPER_LEFT ) {
lixianyu 0:5ca227682ee7 243 setLed(x0 - x, y0 - y, 1);
lixianyu 0:5ca227682ee7 244 setLed(x0 - y, y0 - x, 1);
lixianyu 0:5ca227682ee7 245 }
lixianyu 0:5ca227682ee7 246
lixianyu 0:5ca227682ee7 247 /* lower right */
lixianyu 0:5ca227682ee7 248 if ( option & U8G_DRAW_LOWER_RIGHT ) {
lixianyu 0:5ca227682ee7 249 setLed(x0 + x, y0 + y, 1);
lixianyu 0:5ca227682ee7 250 setLed(x0 + y, y0 + x, 1);
lixianyu 0:5ca227682ee7 251 }
lixianyu 0:5ca227682ee7 252
lixianyu 0:5ca227682ee7 253 /* lower left */
lixianyu 0:5ca227682ee7 254 if ( option & U8G_DRAW_LOWER_LEFT ) {
lixianyu 0:5ca227682ee7 255 setLed(x0 - x, y0 + y, 1);
lixianyu 0:5ca227682ee7 256 setLed(x0 - y, y0 + x, 1);
lixianyu 0:5ca227682ee7 257 }
lixianyu 0:5ca227682ee7 258 }
lixianyu 0:5ca227682ee7 259
lixianyu 0:5ca227682ee7 260
lixianyu 0:5ca227682ee7 261 void Matrix::drawVLine(int8_t x, int8_t y, int8_t w)
lixianyu 0:5ca227682ee7 262 {
lixianyu 0:5ca227682ee7 263 if(w<=0)
lixianyu 0:5ca227682ee7 264 return;
lixianyu 0:5ca227682ee7 265
lixianyu 0:5ca227682ee7 266 while (w--) {
lixianyu 0:5ca227682ee7 267 setLed(x, y + w, 1);
lixianyu 0:5ca227682ee7 268 }
lixianyu 0:5ca227682ee7 269 }
lixianyu 0:5ca227682ee7 270
lixianyu 0:5ca227682ee7 271
lixianyu 0:5ca227682ee7 272 void Matrix::drawHLine(int8_t x, int8_t y, int8_t h)
lixianyu 0:5ca227682ee7 273 {
lixianyu 0:5ca227682ee7 274 if(h<=0)
lixianyu 0:5ca227682ee7 275 return;
lixianyu 0:5ca227682ee7 276
lixianyu 0:5ca227682ee7 277 while (h--) {
lixianyu 0:5ca227682ee7 278 setLed(x + h, y, 1);
lixianyu 0:5ca227682ee7 279 }
lixianyu 0:5ca227682ee7 280 }
lixianyu 0:5ca227682ee7 281
lixianyu 0:5ca227682ee7 282
lixianyu 0:5ca227682ee7 283 void Matrix::drawDisc_section(int8_t x, int8_t y, int8_t x0, int8_t y0, uint8_t option)
lixianyu 0:5ca227682ee7 284 {
lixianyu 0:5ca227682ee7 285 /* upper right */
lixianyu 0:5ca227682ee7 286 if ( option & U8G_DRAW_UPPER_RIGHT ) {
lixianyu 0:5ca227682ee7 287 drawVLine(x0 + x, y0 - y, y + 1);
lixianyu 0:5ca227682ee7 288 drawVLine(x0 + y, y0 - x, x + 1);
lixianyu 0:5ca227682ee7 289 }
lixianyu 0:5ca227682ee7 290
lixianyu 0:5ca227682ee7 291 /* upper left */
lixianyu 0:5ca227682ee7 292 if ( option & U8G_DRAW_UPPER_LEFT ) {
lixianyu 0:5ca227682ee7 293 drawVLine(x0 - x, y0 - y, y + 1);
lixianyu 0:5ca227682ee7 294 drawVLine(x0 - y, y0 - x, x + 1);
lixianyu 0:5ca227682ee7 295 }
lixianyu 0:5ca227682ee7 296
lixianyu 0:5ca227682ee7 297 /* lower right */
lixianyu 0:5ca227682ee7 298 if ( option & U8G_DRAW_LOWER_RIGHT ) {
lixianyu 0:5ca227682ee7 299 drawVLine(x0 + x, y0, y + 1);
lixianyu 0:5ca227682ee7 300 drawVLine(x0 + y, y0, x + 1);
lixianyu 0:5ca227682ee7 301 }
lixianyu 0:5ca227682ee7 302
lixianyu 0:5ca227682ee7 303 /* lower left */
lixianyu 0:5ca227682ee7 304 if ( option & U8G_DRAW_LOWER_LEFT ) {
lixianyu 0:5ca227682ee7 305 drawVLine(x0 - x, y0, y + 1);
lixianyu 0:5ca227682ee7 306 drawVLine(x0 - y, y0, x + 1);
lixianyu 0:5ca227682ee7 307 }
lixianyu 0:5ca227682ee7 308 }
lixianyu 0:5ca227682ee7 309
lixianyu 0:5ca227682ee7 310
lixianyu 0:5ca227682ee7 311 void Matrix::drawCircle(int8_t x0, int8_t y0, int8_t rad, int8_t option)
lixianyu 0:5ca227682ee7 312 {
lixianyu 0:5ca227682ee7 313 if(rad<=0)
lixianyu 0:5ca227682ee7 314 return;
lixianyu 0:5ca227682ee7 315
lixianyu 0:5ca227682ee7 316 int8_t f;
lixianyu 0:5ca227682ee7 317 int8_t ddF_x;
lixianyu 0:5ca227682ee7 318 int8_t ddF_y;
lixianyu 0:5ca227682ee7 319 uint8_t x;
lixianyu 0:5ca227682ee7 320 uint8_t y;
lixianyu 0:5ca227682ee7 321
lixianyu 0:5ca227682ee7 322 f = 1;
lixianyu 0:5ca227682ee7 323 f -= rad;
lixianyu 0:5ca227682ee7 324 ddF_x = 1;
lixianyu 0:5ca227682ee7 325 ddF_y = 0;
lixianyu 0:5ca227682ee7 326 ddF_y -= rad;
lixianyu 0:5ca227682ee7 327 ddF_y *= 2;
lixianyu 0:5ca227682ee7 328 x = 0;
lixianyu 0:5ca227682ee7 329 y = rad;
lixianyu 0:5ca227682ee7 330
lixianyu 0:5ca227682ee7 331 drawCircle_section(x, y, x0, y0, option);
lixianyu 0:5ca227682ee7 332
lixianyu 0:5ca227682ee7 333 while ( x < y ) {
lixianyu 0:5ca227682ee7 334 if (f >= 0) {
lixianyu 0:5ca227682ee7 335 y--;
lixianyu 0:5ca227682ee7 336 ddF_y += 2;
lixianyu 0:5ca227682ee7 337 f += ddF_y;
lixianyu 0:5ca227682ee7 338 }
lixianyu 0:5ca227682ee7 339 x++;
lixianyu 0:5ca227682ee7 340 ddF_x += 2;
lixianyu 0:5ca227682ee7 341 f += ddF_x;
lixianyu 0:5ca227682ee7 342
lixianyu 0:5ca227682ee7 343 drawCircle_section(x, y, x0, y0, option);
lixianyu 0:5ca227682ee7 344 }
lixianyu 0:5ca227682ee7 345 }
lixianyu 0:5ca227682ee7 346
lixianyu 0:5ca227682ee7 347
lixianyu 0:5ca227682ee7 348 void Matrix::drawDisc(int8_t x0, int8_t y0, int8_t rad, int8_t option)
lixianyu 0:5ca227682ee7 349 {
lixianyu 0:5ca227682ee7 350 if(rad<=0)
lixianyu 0:5ca227682ee7 351 return;
lixianyu 0:5ca227682ee7 352
lixianyu 0:5ca227682ee7 353 int8_t f;
lixianyu 0:5ca227682ee7 354 int8_t ddF_x;
lixianyu 0:5ca227682ee7 355 int8_t ddF_y;
lixianyu 0:5ca227682ee7 356 uint8_t x;
lixianyu 0:5ca227682ee7 357 uint8_t y;
lixianyu 0:5ca227682ee7 358
lixianyu 0:5ca227682ee7 359 f = 1;
lixianyu 0:5ca227682ee7 360 f -= rad;
lixianyu 0:5ca227682ee7 361 ddF_x = 1;
lixianyu 0:5ca227682ee7 362 ddF_y = 0;
lixianyu 0:5ca227682ee7 363 ddF_y -= rad;
lixianyu 0:5ca227682ee7 364 ddF_y *= 2;
lixianyu 0:5ca227682ee7 365 x = 0;
lixianyu 0:5ca227682ee7 366 y = rad;
lixianyu 0:5ca227682ee7 367
lixianyu 0:5ca227682ee7 368 drawDisc_section(x, y, x0, y0, option);
lixianyu 0:5ca227682ee7 369
lixianyu 0:5ca227682ee7 370 while ( x < y ) {
lixianyu 0:5ca227682ee7 371 if (f >= 0) {
lixianyu 0:5ca227682ee7 372 y--;
lixianyu 0:5ca227682ee7 373 ddF_y += 2;
lixianyu 0:5ca227682ee7 374 f += ddF_y;
lixianyu 0:5ca227682ee7 375 }
lixianyu 0:5ca227682ee7 376 x++;
lixianyu 0:5ca227682ee7 377 ddF_x += 2;
lixianyu 0:5ca227682ee7 378 f += ddF_x;
lixianyu 0:5ca227682ee7 379
lixianyu 0:5ca227682ee7 380 drawDisc_section(x, y, x0, y0, option);
lixianyu 0:5ca227682ee7 381 }
lixianyu 0:5ca227682ee7 382 }
lixianyu 0:5ca227682ee7 383
lixianyu 0:5ca227682ee7 384
lixianyu 0:5ca227682ee7 385 void Matrix::drawFrame(int8_t x, int8_t y, int8_t w, int8_t h)
lixianyu 0:5ca227682ee7 386 {
lixianyu 0:5ca227682ee7 387 if(h<=0 || w<=0)
lixianyu 0:5ca227682ee7 388 return;
lixianyu 0:5ca227682ee7 389
lixianyu 0:5ca227682ee7 390 int8_t xtmp = x;
lixianyu 0:5ca227682ee7 391
lixianyu 0:5ca227682ee7 392 drawHLine(x, y, w);
lixianyu 0:5ca227682ee7 393 drawVLine(x, y, h);
lixianyu 0:5ca227682ee7 394 x+=w;
lixianyu 0:5ca227682ee7 395 x--;
lixianyu 0:5ca227682ee7 396 drawVLine(x, y, h);
lixianyu 0:5ca227682ee7 397 y+=h;
lixianyu 0:5ca227682ee7 398 y--;
lixianyu 0:5ca227682ee7 399 drawHLine(xtmp, y, w);
lixianyu 0:5ca227682ee7 400 }
lixianyu 0:5ca227682ee7 401
lixianyu 0:5ca227682ee7 402
lixianyu 0:5ca227682ee7 403 void Matrix::drawRFrame(int8_t x, int8_t y, int8_t w, int8_t h, uint8_t r)
lixianyu 0:5ca227682ee7 404 {
lixianyu 0:5ca227682ee7 405 if(h<3 || w<3)
lixianyu 0:5ca227682ee7 406 return;
lixianyu 0:5ca227682ee7 407
lixianyu 0:5ca227682ee7 408 if(r>(w-2)/2 || r>(h-2)/2)
lixianyu 0:5ca227682ee7 409 r = min((h-2)/2,(w-2)/2);
lixianyu 0:5ca227682ee7 410
lixianyu 0:5ca227682ee7 411 int8_t xl, yu;
lixianyu 0:5ca227682ee7 412 xl = x;
lixianyu 0:5ca227682ee7 413 xl += r;
lixianyu 0:5ca227682ee7 414 yu = y;
lixianyu 0:5ca227682ee7 415 yu += r;
lixianyu 0:5ca227682ee7 416
lixianyu 0:5ca227682ee7 417 {
lixianyu 0:5ca227682ee7 418 int8_t yl, xr;
lixianyu 0:5ca227682ee7 419
lixianyu 0:5ca227682ee7 420 xr = x;
lixianyu 0:5ca227682ee7 421 xr += w;
lixianyu 0:5ca227682ee7 422 xr -= r;
lixianyu 0:5ca227682ee7 423 xr -= 1;
lixianyu 0:5ca227682ee7 424
lixianyu 0:5ca227682ee7 425 yl = y;
lixianyu 0:5ca227682ee7 426 yl += h;
lixianyu 0:5ca227682ee7 427 yl -= r;
lixianyu 0:5ca227682ee7 428 yl -= 1;
lixianyu 0:5ca227682ee7 429
lixianyu 0:5ca227682ee7 430 drawCircle(xl, yu, r, U8G_DRAW_UPPER_LEFT);
lixianyu 0:5ca227682ee7 431 drawCircle(xr, yu, r, U8G_DRAW_UPPER_RIGHT);
lixianyu 0:5ca227682ee7 432 drawCircle(xl, yl, r, U8G_DRAW_LOWER_LEFT);
lixianyu 0:5ca227682ee7 433 drawCircle(xr, yl, r, U8G_DRAW_LOWER_RIGHT);
lixianyu 0:5ca227682ee7 434 }
lixianyu 0:5ca227682ee7 435
lixianyu 0:5ca227682ee7 436 {
lixianyu 0:5ca227682ee7 437 int8_t ww, hh;
lixianyu 0:5ca227682ee7 438
lixianyu 0:5ca227682ee7 439 ww = w;
lixianyu 0:5ca227682ee7 440 ww -= r;
lixianyu 0:5ca227682ee7 441 ww -= r;
lixianyu 0:5ca227682ee7 442 ww -= 2;
lixianyu 0:5ca227682ee7 443 hh = h;
lixianyu 0:5ca227682ee7 444 hh -= r;
lixianyu 0:5ca227682ee7 445 hh -= r;
lixianyu 0:5ca227682ee7 446 hh -= 2;
lixianyu 0:5ca227682ee7 447
lixianyu 0:5ca227682ee7 448 xl++;
lixianyu 0:5ca227682ee7 449 yu++;
lixianyu 0:5ca227682ee7 450 h--;
lixianyu 0:5ca227682ee7 451 w--;
lixianyu 0:5ca227682ee7 452 drawHLine(xl, y, ww);
lixianyu 0:5ca227682ee7 453 drawHLine(xl, y+h, ww);
lixianyu 0:5ca227682ee7 454 drawVLine(x, yu, hh);
lixianyu 0:5ca227682ee7 455 drawVLine(x+w, yu, hh);
lixianyu 0:5ca227682ee7 456 }
lixianyu 0:5ca227682ee7 457 }
lixianyu 0:5ca227682ee7 458
lixianyu 0:5ca227682ee7 459
lixianyu 0:5ca227682ee7 460 void Matrix::drawBox(int8_t x, int8_t y, int8_t w, int8_t h)
lixianyu 0:5ca227682ee7 461 {
lixianyu 0:5ca227682ee7 462 if(h<=0 || w<=0)
lixianyu 0:5ca227682ee7 463 return;
lixianyu 0:5ca227682ee7 464
lixianyu 0:5ca227682ee7 465 do {
lixianyu 0:5ca227682ee7 466 drawHLine(x, y, w);
lixianyu 0:5ca227682ee7 467 y++;
lixianyu 0:5ca227682ee7 468 h--;
lixianyu 0:5ca227682ee7 469 } while( h != 0 );
lixianyu 0:5ca227682ee7 470 }
lixianyu 0:5ca227682ee7 471
lixianyu 0:5ca227682ee7 472
lixianyu 0:5ca227682ee7 473 void Matrix::drawRBox(int8_t x, int8_t y, int8_t w, int8_t h, uint8_t r)
lixianyu 0:5ca227682ee7 474 {
lixianyu 0:5ca227682ee7 475 if(h<3 || w<3)
lixianyu 0:5ca227682ee7 476 return;
lixianyu 0:5ca227682ee7 477
lixianyu 0:5ca227682ee7 478 if(r>(w-2)/2 || r>(h-2)/2)
lixianyu 0:5ca227682ee7 479 r=min((h-2)/2,(w-2)/2);
lixianyu 0:5ca227682ee7 480
lixianyu 0:5ca227682ee7 481 int8_t xl, yu;
lixianyu 0:5ca227682ee7 482 int8_t yl, xr;
lixianyu 0:5ca227682ee7 483
lixianyu 0:5ca227682ee7 484
lixianyu 0:5ca227682ee7 485 xl = x;
lixianyu 0:5ca227682ee7 486 xl += r;
lixianyu 0:5ca227682ee7 487 yu = y;
lixianyu 0:5ca227682ee7 488 yu += r;
lixianyu 0:5ca227682ee7 489
lixianyu 0:5ca227682ee7 490 xr = x;
lixianyu 0:5ca227682ee7 491 xr += w;
lixianyu 0:5ca227682ee7 492 xr -= r;
lixianyu 0:5ca227682ee7 493 xr -= 1;
lixianyu 0:5ca227682ee7 494
lixianyu 0:5ca227682ee7 495 yl = y;
lixianyu 0:5ca227682ee7 496 yl += h;
lixianyu 0:5ca227682ee7 497 yl -= r;
lixianyu 0:5ca227682ee7 498 yl -= 1;
lixianyu 0:5ca227682ee7 499
lixianyu 0:5ca227682ee7 500 drawDisc(xl, yu, r, U8G_DRAW_UPPER_LEFT);
lixianyu 0:5ca227682ee7 501 drawDisc(xr, yu, r, U8G_DRAW_UPPER_RIGHT);
lixianyu 0:5ca227682ee7 502 drawDisc(xl, yl, r, U8G_DRAW_LOWER_LEFT);
lixianyu 0:5ca227682ee7 503 drawDisc(xr, yl, r, U8G_DRAW_LOWER_RIGHT);
lixianyu 0:5ca227682ee7 504
lixianyu 0:5ca227682ee7 505 {
lixianyu 0:5ca227682ee7 506 int8_t ww, hh;
lixianyu 0:5ca227682ee7 507
lixianyu 0:5ca227682ee7 508 ww = w;
lixianyu 0:5ca227682ee7 509 ww -= r;
lixianyu 0:5ca227682ee7 510 ww -= r;
lixianyu 0:5ca227682ee7 511 ww -= 2;
lixianyu 0:5ca227682ee7 512 hh = h;
lixianyu 0:5ca227682ee7 513 hh -= r;
lixianyu 0:5ca227682ee7 514 hh -= r;
lixianyu 0:5ca227682ee7 515 hh -= 2;
lixianyu 0:5ca227682ee7 516
lixianyu 0:5ca227682ee7 517 xl++;
lixianyu 0:5ca227682ee7 518 yu++;
lixianyu 0:5ca227682ee7 519 h--;
lixianyu 0:5ca227682ee7 520 drawBox(xl, y, ww, r+1);
lixianyu 0:5ca227682ee7 521 drawBox(xl, yl, ww, r+1);
lixianyu 0:5ca227682ee7 522 // drawHLine(xl, y+h, ww);
lixianyu 0:5ca227682ee7 523 drawBox(x, yu, w, hh);
lixianyu 0:5ca227682ee7 524 // drawVLine(x+w, yu, hh);
lixianyu 0:5ca227682ee7 525 }
lixianyu 0:5ca227682ee7 526 }
lixianyu 0:5ca227682ee7 527
lixianyu 0:5ca227682ee7 528
lixianyu 0:5ca227682ee7 529 void Matrix::drawBMP(int16_t x, int16_t y, int16_t w, int16_t h,const uint8_t *bitmap)
lixianyu 0:5ca227682ee7 530 {
lixianyu 0:5ca227682ee7 531 int16_t i, j, byteWidth = (w + 7) / 8;
lixianyu 0:5ca227682ee7 532
lixianyu 0:5ca227682ee7 533 for(j=0; j<h; j++) {
lixianyu 0:5ca227682ee7 534 for(i=0; i<w; i++ ) {
lixianyu 0:5ca227682ee7 535 #if 0
lixianyu 0:5ca227682ee7 536 if(pgm_read_byte(bitmap + j * byteWidth + i / 8) & (128 >> ((h-i-1) & 7))) {
lixianyu 0:5ca227682ee7 537 setLed(x+i, y+j, 1);
lixianyu 0:5ca227682ee7 538 }
lixianyu 0:5ca227682ee7 539 #else
lixianyu 0:5ca227682ee7 540 if (bitmap[j * byteWidth + i / 8] & (128 >> ((h-i-1) & 7))) {
lixianyu 0:5ca227682ee7 541 setLed(x+i, y+j, 1);
lixianyu 0:5ca227682ee7 542 }
lixianyu 0:5ca227682ee7 543 #endif
lixianyu 0:5ca227682ee7 544 }
lixianyu 0:5ca227682ee7 545 }
lixianyu 0:5ca227682ee7 546 }
lixianyu 0:5ca227682ee7 547
lixianyu 0:5ca227682ee7 548
lixianyu 0:5ca227682ee7 549 bool Matrix::drawBMP(int16_t x, int16_t y, const uint8_t *bitmap)
lixianyu 0:5ca227682ee7 550 {
lixianyu 0:5ca227682ee7 551 uint32_t _dataNum = 0;
lixianyu 0:5ca227682ee7 552 uint8_t _dataBuffer[BUFFPIXEL]; //pixel buffer (R+G+B per pixel)
lixianyu 0:5ca227682ee7 553
lixianyu 0:5ca227682ee7 554 //Parse BMP header
lixianyu 0:5ca227682ee7 555 if (read16((uint8_t*)bitmap, _dataNum) == 0x4D42) { //BMP signature
lixianyu 0:5ca227682ee7 556 (void)read32((uint8_t*)bitmap, _dataNum); //File size
lixianyu 0:5ca227682ee7 557 (void)read32((uint8_t*)bitmap, _dataNum); //Read & ignore creator bytes
lixianyu 0:5ca227682ee7 558 uint32_t bmpImageoffset = read32((uint8_t*)bitmap, _dataNum); //Start of image data in file
lixianyu 0:5ca227682ee7 559 //Read DIB header
lixianyu 0:5ca227682ee7 560 (void)read32((uint8_t*)bitmap, _dataNum); //Header size
lixianyu 0:5ca227682ee7 561 int bmpWidth = read32((uint8_t*)bitmap, _dataNum),
lixianyu 0:5ca227682ee7 562 bmpHeight = read32((uint8_t*)bitmap, _dataNum);
lixianyu 0:5ca227682ee7 563
lixianyu 0:5ca227682ee7 564 bool flip = true; //BMP is stored bottom-to-top
lixianyu 0:5ca227682ee7 565 //If bmpHeight is negative, image is in top-down order.
lixianyu 0:5ca227682ee7 566 if (bmpHeight < 0) {
lixianyu 0:5ca227682ee7 567 bmpHeight = -bmpHeight;
lixianyu 0:5ca227682ee7 568 flip = false;
lixianyu 0:5ca227682ee7 569 }
lixianyu 0:5ca227682ee7 570
lixianyu 0:5ca227682ee7 571 if (read16((uint8_t*)bitmap, _dataNum) == 1) { //# planes -- must be '1'
lixianyu 0:5ca227682ee7 572 uint8_t bmpDepth = read16((uint8_t*)bitmap, _dataNum); //Bit depth (currently must be 24)
lixianyu 0:5ca227682ee7 573 if ((bmpDepth == 24) && (read32((uint8_t*)bitmap, _dataNum) == 0)) { //0 = uncompressed
lixianyu 0:5ca227682ee7 574 //BMP rows are padded (if needed) to 4-byte boundary
lixianyu 0:5ca227682ee7 575 uint32_t rowSize = (bmpWidth * 3 + 3) & ~3; //Not always = bmpWidth; may have padding
lixianyu 0:5ca227682ee7 576
lixianyu 0:5ca227682ee7 577 //Crop area to be loaded
lixianyu 0:5ca227682ee7 578 int w = bmpWidth,
lixianyu 0:5ca227682ee7 579 h = bmpHeight;
lixianyu 0:5ca227682ee7 580
lixianyu 0:5ca227682ee7 581 if ((x + w - 1) >= (getWidth() * 8)) w = (getWidth() * 8) - x;
lixianyu 0:5ca227682ee7 582 if ((y + h - 1) >= (getHeight() * 8)) h = (getHeight() * 8) - y;
lixianyu 0:5ca227682ee7 583
lixianyu 0:5ca227682ee7 584 for (int row = 0; row < h; row++) { //For each scanline...
lixianyu 0:5ca227682ee7 585 uint32_t pos = bmpImageoffset + (flip ? (bmpHeight - 1 - row) : row) * rowSize ;
lixianyu 0:5ca227682ee7 586 uint8_t buffidx = sizeof(_dataBuffer); //Current position in _dataBuffer
lixianyu 0:5ca227682ee7 587 for (int col = 0; col < w; col++) { //For each pixel...
lixianyu 0:5ca227682ee7 588 //Time to read more pixel data?
lixianyu 0:5ca227682ee7 589 if (buffidx >= sizeof(_dataBuffer)) { //Indeed
lixianyu 0:5ca227682ee7 590 buffidx = 0; //Set index to beginning
lixianyu 0:5ca227682ee7 591 for (int a = 0; a < BUFFPIXEL; a++) {
lixianyu 0:5ca227682ee7 592 _dataBuffer[a] = pgm_read_byte((uint8_t*)bitmap + (pos + a));
lixianyu 0:5ca227682ee7 593 }
lixianyu 0:5ca227682ee7 594 }
lixianyu 0:5ca227682ee7 595
lixianyu 0:5ca227682ee7 596 uint8_t _b = _dataBuffer[buffidx++],
lixianyu 0:5ca227682ee7 597 _g = _dataBuffer[buffidx++],
lixianyu 0:5ca227682ee7 598 _r = _dataBuffer[buffidx++];
lixianyu 0:5ca227682ee7 599 setLedColor(col + x, row + y, _r, _g, _b);
lixianyu 0:5ca227682ee7 600 } //end pixel
lixianyu 0:5ca227682ee7 601 } //end scanline
lixianyu 0:5ca227682ee7 602 } //end goodBmp
lixianyu 0:5ca227682ee7 603 else {
lixianyu 0:5ca227682ee7 604 return false;
lixianyu 0:5ca227682ee7 605 }
lixianyu 0:5ca227682ee7 606 }//end planes
lixianyu 0:5ca227682ee7 607 else {
lixianyu 0:5ca227682ee7 608 return false;
lixianyu 0:5ca227682ee7 609 }
lixianyu 0:5ca227682ee7 610 }//end sianatrue
lixianyu 0:5ca227682ee7 611 else {
lixianyu 0:5ca227682ee7 612 return false;
lixianyu 0:5ca227682ee7 613 }
lixianyu 0:5ca227682ee7 614 return true;
lixianyu 0:5ca227682ee7 615 }
lixianyu 0:5ca227682ee7 616
lixianyu 0:5ca227682ee7 617 void Matrix::writeString(char* _c, bool _m, uint16_t _t, int16_t _xy)
lixianyu 0:5ca227682ee7 618 {
lixianyu 0:5ca227682ee7 619 setFontMode(_m);
lixianyu 0:5ca227682ee7 620 int c1 = (_m ? getWidth() : getHeight()) * 8;
lixianyu 0:5ca227682ee7 621 int c2 = -(_m ? getStringWidth(_c) : getStringHeight(_c)) - c1;
lixianyu 0:5ca227682ee7 622 for (int a = c1; a > c2; a--) {
lixianyu 0:5ca227682ee7 623 setCursor((_m ? a : _xy), (_m ? _xy : a));
lixianyu 0:5ca227682ee7 624 print(_c);
lixianyu 0:5ca227682ee7 625 wait_ms(_t);
lixianyu 0:5ca227682ee7 626 #ifdef WDT
lixianyu 0:5ca227682ee7 627 //wdt_reset();
lixianyu 0:5ca227682ee7 628 #endif
lixianyu 0:5ca227682ee7 629 }
lixianyu 0:5ca227682ee7 630 }
lixianyu 0:5ca227682ee7 631
lixianyu 0:5ca227682ee7 632 size_t Matrix::write(uint8_t c)
lixianyu 0:5ca227682ee7 633 {
lixianyu 0:5ca227682ee7 634 if (CharToInt(c) > 94 || CharToInt(c) < 0)
lixianyu 0:5ca227682ee7 635 return 0;
lixianyu 0:5ca227682ee7 636
lixianyu 0:5ca227682ee7 637 for (int a = 0; a < getMatrixNum(); a++)
lixianyu 0:5ca227682ee7 638 led[a].write(c);
lixianyu 0:5ca227682ee7 639
lixianyu 0:5ca227682ee7 640 return 1;
lixianyu 0:5ca227682ee7 641 /* void Matrix::print(char* _c) {
lixianyu 0:5ca227682ee7 642 for (int a = 0; a < this->_matrixNum; a++)
lixianyu 0:5ca227682ee7 643 led[a].print(_c);
lixianyu 0:5ca227682ee7 644 } */
lixianyu 0:5ca227682ee7 645 }
lixianyu 0:5ca227682ee7 646
lixianyu 0:5ca227682ee7 647 int16_t Matrix::getStringWidth(char * _String)
lixianyu 0:5ca227682ee7 648 {
lixianyu 0:5ca227682ee7 649 // return (uint32_t)(offset + millis() / 1000);
lixianyu 0:5ca227682ee7 650 int _leng = 0;
lixianyu 0:5ca227682ee7 651 int _Width = 0;
lixianyu 0:5ca227682ee7 652 while (_String[_leng] != NULL) {
lixianyu 0:5ca227682ee7 653 #if 0
lixianyu 0:5ca227682ee7 654 _Width += 1 + pgm_read_byte(alphabetBitmap[((int)_String[_leng] - 32)] + FONE_SIZE_X);
lixianyu 0:5ca227682ee7 655 #else
lixianyu 0:5ca227682ee7 656 //_Width += (1 + alphabetBitmap[((int)_String[_leng] - 32)] + FONE_SIZE_X);
lixianyu 0:5ca227682ee7 657 _Width += 1 + FONE_SIZE_X;
lixianyu 0:5ca227682ee7 658 #endif
lixianyu 0:5ca227682ee7 659 _leng++;
lixianyu 0:5ca227682ee7 660 }
lixianyu 0:5ca227682ee7 661 return _Width;
lixianyu 0:5ca227682ee7 662 }
lixianyu 0:5ca227682ee7 663
lixianyu 0:5ca227682ee7 664 int16_t Matrix::getStringHeight(char* _String)
lixianyu 0:5ca227682ee7 665 {
lixianyu 0:5ca227682ee7 666 // return (uint32_t)(offset + millis() / 1000);
lixianyu 0:5ca227682ee7 667 int _leng = 0;
lixianyu 0:5ca227682ee7 668 int _Height = 0;
lixianyu 0:5ca227682ee7 669 while (_String[_leng] != NULL) {
lixianyu 0:5ca227682ee7 670 _Height += 1 + FONE_SIZE_Y;
lixianyu 0:5ca227682ee7 671 _leng++;
lixianyu 0:5ca227682ee7 672 }
lixianyu 0:5ca227682ee7 673 return _Height;
lixianyu 0:5ca227682ee7 674 }
lixianyu 0:5ca227682ee7 675
lixianyu 0:5ca227682ee7 676 int16_t Matrix::getMatrixNum()
lixianyu 0:5ca227682ee7 677 {
lixianyu 0:5ca227682ee7 678 return this->_matrixNum;
lixianyu 0:5ca227682ee7 679 }
lixianyu 0:5ca227682ee7 680
lixianyu 0:5ca227682ee7 681 int16_t Matrix::getWidth()
lixianyu 0:5ca227682ee7 682 {
lixianyu 0:5ca227682ee7 683 return this->_numX;
lixianyu 0:5ca227682ee7 684 }
lixianyu 0:5ca227682ee7 685
lixianyu 0:5ca227682ee7 686 int16_t Matrix::getHeight()
lixianyu 0:5ca227682ee7 687 {
lixianyu 0:5ca227682ee7 688 return this->_numY;
lixianyu 0:5ca227682ee7 689 }