Adafruit-RGB_matrix_Panel(32*16)
RGBmatrixPanel.h@13:0ceb1b8893e9, 2014-05-26 (annotated)
- Committer:
- lelect
- Date:
- Mon May 26 09:14:54 2014 +0000
- Revision:
- 13:0ceb1b8893e9
- Parent:
- 12:e632883f319f
- Child:
- 14:cfc715e8e387
update doxygen
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lelect | 0:06d9443a018f | 1 | #include "mbed.h" |
lelect | 0:06d9443a018f | 2 | #include "Adafruit_GFX.h" |
lelect | 0:06d9443a018f | 3 | |
lelect | 2:6136465ffd3a | 4 | #ifndef _BV |
lelect | 2:6136465ffd3a | 5 | #define _BV(bit) (1<<(bit)) |
lelect | 2:6136465ffd3a | 6 | #endif |
lelect | 2:6136465ffd3a | 7 | |
lelect | 2:6136465ffd3a | 8 | #ifdef DEBUG |
lelect | 3:aa3762e0dfee | 9 | #define log_debug(format,...) std::printf(format,##__VA_ARGS__) |
lelect | 2:6136465ffd3a | 10 | #else |
lelect | 2:6136465ffd3a | 11 | #define log_debug(...) |
lelect | 2:6136465ffd3a | 12 | #endif |
lelect | 2:6136465ffd3a | 13 | |
lelect | 12:e632883f319f | 14 | /** RGBmatrixPanel is class for full color LED matrix |
lelect | 13:0ceb1b8893e9 | 15 | * @code |
lelect | 13:0ceb1b8893e9 | 16 | #include "mbed.h" |
lelect | 13:0ceb1b8893e9 | 17 | #include "RGBmatrixPanel.h" // Hardware-specific library |
lelect | 13:0ceb1b8893e9 | 18 | |
lelect | 13:0ceb1b8893e9 | 19 | PinName ub1=p6; |
lelect | 13:0ceb1b8893e9 | 20 | PinName ug1=p7; |
lelect | 13:0ceb1b8893e9 | 21 | PinName ur1=p8; |
lelect | 13:0ceb1b8893e9 | 22 | PinName lb2=p9; |
lelect | 13:0ceb1b8893e9 | 23 | PinName lg2=p10; |
lelect | 13:0ceb1b8893e9 | 24 | PinName lr2=p11; |
lelect | 13:0ceb1b8893e9 | 25 | RGBmatrixPanel matrix(ur1,ug1,ub1,lr2,lg2,lb2,p12,p13,p14,p15,p16,p17,false); |
lelect | 13:0ceb1b8893e9 | 26 | //RGBmatrixPanel(r1, g1, b1, r2, g2, b2, a, b, c, sclk, latch, oe, enable double_buffer); |
lelect | 13:0ceb1b8893e9 | 27 | |
lelect | 13:0ceb1b8893e9 | 28 | int main() |
lelect | 13:0ceb1b8893e9 | 29 | { |
lelect | 13:0ceb1b8893e9 | 30 | matrix.begin(); |
lelect | 13:0ceb1b8893e9 | 31 | while(1) { |
lelect | 13:0ceb1b8893e9 | 32 | // fill the screen with 'black' |
lelect | 13:0ceb1b8893e9 | 33 | matrix.fillScreen(matrix.Color333(0, 0, 0)); |
lelect | 13:0ceb1b8893e9 | 34 | // draw a pixel in solid white |
lelect | 13:0ceb1b8893e9 | 35 | matrix.drawPixel(0, 0, matrix.Color333(7, 7, 7)); |
lelect | 13:0ceb1b8893e9 | 36 | wait_ms(500); |
lelect | 13:0ceb1b8893e9 | 37 | |
lelect | 13:0ceb1b8893e9 | 38 | // fix the screen with green |
lelect | 13:0ceb1b8893e9 | 39 | matrix.fillRect(0, 0, 32, 16, matrix.Color333(0, 7, 0)); |
lelect | 13:0ceb1b8893e9 | 40 | wait_ms(500); |
lelect | 13:0ceb1b8893e9 | 41 | |
lelect | 13:0ceb1b8893e9 | 42 | // draw a box in yellow |
lelect | 13:0ceb1b8893e9 | 43 | matrix.drawRect(0, 0, 32, 16, matrix.Color333(7, 7, 0)); |
lelect | 13:0ceb1b8893e9 | 44 | wait_ms(500); |
lelect | 13:0ceb1b8893e9 | 45 | |
lelect | 13:0ceb1b8893e9 | 46 | // draw an 'X' in red |
lelect | 13:0ceb1b8893e9 | 47 | matrix.drawLine(0, 0, 31, 15, matrix.Color333(7, 0, 0)); |
lelect | 13:0ceb1b8893e9 | 48 | matrix.drawLine(31, 0, 0, 15, matrix.Color333(7, 0, 0)); |
lelect | 13:0ceb1b8893e9 | 49 | wait_ms(500); |
lelect | 13:0ceb1b8893e9 | 50 | |
lelect | 13:0ceb1b8893e9 | 51 | // draw a blue circle |
lelect | 13:0ceb1b8893e9 | 52 | matrix.drawCircle(7, 7, 7, matrix.Color333(0, 0, 7)); |
lelect | 13:0ceb1b8893e9 | 53 | wait_ms(500); |
lelect | 13:0ceb1b8893e9 | 54 | |
lelect | 13:0ceb1b8893e9 | 55 | // fill a violet circle |
lelect | 13:0ceb1b8893e9 | 56 | matrix.fillCircle(23, 7, 7, matrix.Color333(7, 0, 7)); |
lelect | 13:0ceb1b8893e9 | 57 | wait_ms(500); |
lelect | 13:0ceb1b8893e9 | 58 | |
lelect | 13:0ceb1b8893e9 | 59 | // fill the screen with 'black' |
lelect | 13:0ceb1b8893e9 | 60 | matrix.fillScreen(matrix.Color333(0, 0, 0)); |
lelect | 13:0ceb1b8893e9 | 61 | |
lelect | 13:0ceb1b8893e9 | 62 | // draw some text! |
lelect | 13:0ceb1b8893e9 | 63 | matrix.setCursor(1, 0); // start at top left, with one pixel of spacing |
lelect | 13:0ceb1b8893e9 | 64 | matrix.setTextSize(1); // size 1 == 8 pixels high |
lelect | 13:0ceb1b8893e9 | 65 | |
lelect | 13:0ceb1b8893e9 | 66 | // printff each letter with a rainbow color |
lelect | 13:0ceb1b8893e9 | 67 | matrix.setTextColor(matrix.Color333(7,0,0)); |
lelect | 13:0ceb1b8893e9 | 68 | matrix.putc('1'); |
lelect | 13:0ceb1b8893e9 | 69 | matrix.setTextColor(matrix.Color333(7,4,0)); |
lelect | 13:0ceb1b8893e9 | 70 | matrix.putc('6'); |
lelect | 13:0ceb1b8893e9 | 71 | matrix.setTextColor(matrix.Color333(7,7,0)); |
lelect | 13:0ceb1b8893e9 | 72 | matrix.putc('x'); |
lelect | 13:0ceb1b8893e9 | 73 | matrix.setTextColor(matrix.Color333(4,7,0)); |
lelect | 13:0ceb1b8893e9 | 74 | matrix.putc('3'); |
lelect | 13:0ceb1b8893e9 | 75 | matrix.setTextColor(matrix.Color333(0,7,0)); |
lelect | 13:0ceb1b8893e9 | 76 | matrix.putc('2'); |
lelect | 13:0ceb1b8893e9 | 77 | |
lelect | 13:0ceb1b8893e9 | 78 | matrix.setCursor(1, 9); // next line |
lelect | 13:0ceb1b8893e9 | 79 | matrix.setTextColor(matrix.Color333(0,7,7)); |
lelect | 13:0ceb1b8893e9 | 80 | matrix.putc('*'); |
lelect | 13:0ceb1b8893e9 | 81 | matrix.setTextColor(matrix.Color333(0,4,7)); |
lelect | 13:0ceb1b8893e9 | 82 | matrix.putc('R'); |
lelect | 13:0ceb1b8893e9 | 83 | matrix.setTextColor(matrix.Color333(0,0,7)); |
lelect | 13:0ceb1b8893e9 | 84 | matrix.putc('G'); |
lelect | 13:0ceb1b8893e9 | 85 | matrix.setTextColor(matrix.Color333(4,0,7)); |
lelect | 13:0ceb1b8893e9 | 86 | matrix.putc('B'); |
lelect | 13:0ceb1b8893e9 | 87 | matrix.setTextColor(matrix.Color333(7,0,4)); |
lelect | 13:0ceb1b8893e9 | 88 | matrix.putc('*'); |
lelect | 13:0ceb1b8893e9 | 89 | wait_ms(500); |
lelect | 13:0ceb1b8893e9 | 90 | } |
lelect | 13:0ceb1b8893e9 | 91 | } |
lelect | 13:0ceb1b8893e9 | 92 | |
lelect | 13:0ceb1b8893e9 | 93 | * @endcode |
lelect | 13:0ceb1b8893e9 | 94 | |
lelect | 12:e632883f319f | 95 | */ |
lelect | 0:06d9443a018f | 96 | class RGBmatrixPanel : public Adafruit_GFX |
lelect | 0:06d9443a018f | 97 | { |
lelect | 0:06d9443a018f | 98 | |
lelect | 0:06d9443a018f | 99 | public: |
lelect | 0:06d9443a018f | 100 | // Constructor for 16x32 panel: |
lelect | 9:349baf041171 | 101 | RGBmatrixPanel(PinName r1,PinName g1,PinName b1,PinName r2,PinName g2,PinName b2,PinName a,PinName b,PinName c,PinName sclk,PinName latch,PinName oe, bool dbuf); |
lelect | 0:06d9443a018f | 102 | |
lelect | 0:06d9443a018f | 103 | // Constructor for 32x32 panel (adds 'd' pin): |
lelect | 12:e632883f319f | 104 | RGBmatrixPanel(PinName r1,PinName r2,PinName g1,PinName g2,PinName b1,PinName b2,PinName a,PinName b,PinName c,PinName d,PinName sclk, PinName latch,PinName oe,bool dbuf); |
lelect | 0:06d9443a018f | 105 | |
lelect | 13:0ceb1b8893e9 | 106 | /** @fn void RGBmatrixPanel::begin(void) |
lelect | 13:0ceb1b8893e9 | 107 | * @bref Attach a updateDisplay() to be called by the Ticker(every 100us) |
lelect | 13:0ceb1b8893e9 | 108 | */ |
lelect | 0:06d9443a018f | 109 | void begin(void); |
lelect | 12:e632883f319f | 110 | /** @fn void RGBmatrixPanel::drawPixel(int16_t x, int16_t y, uint16_t c) |
lelect | 12:e632883f319f | 111 | * @bref drawPixel |
lelect | 12:e632883f319f | 112 | */ |
lelect | 12:e632883f319f | 113 | virtual void drawPixel(int16_t x,int16_t y,uint16_t c); |
lelect | 12:e632883f319f | 114 | /** @fn void RGBmatrixPanel::fillScreen(uint16_t c) |
lelect | 12:e632883f319f | 115 | * @bref fillScreen |
lelect | 12:e632883f319f | 116 | * @param c fill screen 16bit color 0x0000 ~ 0xFFFF |
lelect | 12:e632883f319f | 117 | */ |
lelect | 0:06d9443a018f | 118 | virtual void fillScreen(uint16_t c); |
lelect | 12:e632883f319f | 119 | /** @fn void RGBmatrixPanel::updateDisplay(void) |
lelect | 13:0ceb1b8893e9 | 120 | * @param c updateDisplay\n |
lelect | 12:e632883f319f | 121 | * This method is called by the interrupt start at begin(). |
lelect | 12:e632883f319f | 122 | */ |
lelect | 0:06d9443a018f | 123 | void updateDisplay(void); |
lelect | 12:e632883f319f | 124 | /** @fn void RGBmatrixPanel::swapBuffers(bool copy) |
lelect | 12:e632883f319f | 125 | * @param copy swap buffer (if you use double-buffer) |
lelect | 12:e632883f319f | 126 | */ |
lelect | 12:e632883f319f | 127 | void swapBuffers(bool copy); |
lelect | 12:e632883f319f | 128 | /** @fn void RGBmatrixPanel::dumpMatrix(void) |
lelect | 13:0ceb1b8893e9 | 129 | * @bref dump to default USB Serial\n |
lelect | 12:e632883f319f | 130 | * Declaration is required to use.(#define DEBUG) |
lelect | 12:e632883f319f | 131 | */ |
lelect | 0:06d9443a018f | 132 | void dumpMatrix(void); |
lelect | 0:06d9443a018f | 133 | |
lelect | 0:06d9443a018f | 134 | uint8_t *backBuffer(void); |
lelect | 0:06d9443a018f | 135 | |
lelect | 13:0ceb1b8893e9 | 136 | /** @fn uint16_t RGBmatrixPanel::Color333(uint8_t r, uint8_t g, uint8_t b) |
lelect | 12:e632883f319f | 137 | * @bref up convert to 16bit color from 9bit color. |
lelect | 12:e632883f319f | 138 | * @return 16bit(uint16_t) color value |
lelect | 12:e632883f319f | 139 | */ |
lelect | 0:06d9443a018f | 140 | uint16_t Color333(uint8_t r, uint8_t g, uint8_t b); |
lelect | 13:0ceb1b8893e9 | 141 | /** @fn uint16_t RGBmatrixPanel::Color444(uint8_t r, uint8_t g, uint8_t b) |
lelect | 12:e632883f319f | 142 | * @bref up convert to 16bit color from 12bit color. |
lelect | 13:0ceb1b8893e9 | 143 | * @param r 0~7 |
lelect | 13:0ceb1b8893e9 | 144 | * @param g 0~7 |
lelect | 13:0ceb1b8893e9 | 145 | * @param b 0~7 |
lelect | 12:e632883f319f | 146 | * @return 16bit(uint16_t) color value |
lelect | 12:e632883f319f | 147 | */ |
lelect | 0:06d9443a018f | 148 | uint16_t Color444(uint8_t r, uint8_t g, uint8_t b); |
lelect | 13:0ceb1b8893e9 | 149 | /** @fn uint16_t RGBmatrixPanel::Color888(uint8_t r, uint8_t g, uint8_t b) |
lelect | 12:e632883f319f | 150 | * @bref down convert to 16bit color from 24bit color. |
lelect | 12:e632883f319f | 151 | * @return 16bit(uint16_t) color value |
lelect | 12:e632883f319f | 152 | */ |
lelect | 0:06d9443a018f | 153 | uint16_t Color888(uint8_t r, uint8_t g, uint8_t b); |
lelect | 13:0ceb1b8893e9 | 154 | /** @fn uint16_t RGBmatrixPanel::Color888(uint8_t r, uint8_t g, uint8_t b, bool gflag) |
lelect | 12:e632883f319f | 155 | * @bref down convert to 16bit color from 24bit color using the gamma value table. |
lelect | 12:e632883f319f | 156 | * @return 16bit(uint16_t) color value |
lelect | 12:e632883f319f | 157 | */ |
lelect | 0:06d9443a018f | 158 | uint16_t Color888(uint8_t r, uint8_t g, uint8_t b, bool gflag); |
lelect | 13:0ceb1b8893e9 | 159 | /** @fn uint16_t RGBmatrixPanel::ColorHSV(long hue, uint8_t sat, uint8_t val, bool gflag) |
lelect | 12:e632883f319f | 160 | * @bref convert to 16bit color from (unsigned integer)HSV color using the gamma value table. |
lelect | 12:e632883f319f | 161 | * @param hue 0~1536(decimal value) |
lelect | 12:e632883f319f | 162 | * @param sat 0~255(decimal value) Does not make sense that it is not a multiple of 32. |
lelect | 12:e632883f319f | 163 | * @param val 0~255(decimal value) Does not make sense that it is not a multiple of 32. |
lelect | 12:e632883f319f | 164 | * @return 16bit(uint16_t) color value |
lelect | 12:e632883f319f | 165 | */ |
lelect | 12:e632883f319f | 166 | uint16_t ColorHSV(long hue, uint8_t sat, uint8_t val, bool gflag) |
lelect | 12:e632883f319f | 167 | ; |
lelect | 13:0ceb1b8893e9 | 168 | /** @fn uint16_t RGBmatrixPanel::ColorHSV(float hue, float sat, float val, bool gflag) |
lelect | 12:e632883f319f | 169 | * @bref convert to 16bit color from (float)HSV color using the gamma value table. |
lelect | 12:e632883f319f | 170 | * @param hue Normalized value from 0.0 to 1.0 |
lelect | 12:e632883f319f | 171 | * @param sat Normalized value from 0.0 to 1.0 |
lelect | 12:e632883f319f | 172 | * @param val Normalized value from 0.0 to 1.0 |
lelect | 12:e632883f319f | 173 | * @return 16bit(uint16_t) color value |
lelect | 12:e632883f319f | 174 | */ |
lelect | 12:e632883f319f | 175 | uint16_t ColorHSV(float hue, float sat, float val, bool gflag); |
lelect | 0:06d9443a018f | 176 | private: |
lelect | 4:0ff6053c4bb2 | 177 | uint8_t *matrixbuff[2]; |
lelect | 4:0ff6053c4bb2 | 178 | uint8_t nRows; |
lelect | 4:0ff6053c4bb2 | 179 | uint8_t backindex; |
lelect | 4:0ff6053c4bb2 | 180 | bool swapflag; |
lelect | 0:06d9443a018f | 181 | |
lelect | 0:06d9443a018f | 182 | // Init/alloc code common to both constructors: |
lelect | 2:6136465ffd3a | 183 | void init(uint8_t rows, bool dbuf); |
lelect | 0:06d9443a018f | 184 | |
lelect | 5:1f8409ee8850 | 185 | BusOut _dataBus; |
lelect | 5:1f8409ee8850 | 186 | BusOut _rowBus; |
lelect | 5:1f8409ee8850 | 187 | DigitalOut _d,_sclk, _latch, _oe; |
lelect | 3:aa3762e0dfee | 188 | Ticker _refresh; |
lelect | 0:06d9443a018f | 189 | // Counters/pointers for interrupt handler: |
lelect | 10:db4941188812 | 190 | uint8_t row, plane; |
lelect | 10:db4941188812 | 191 | uint8_t *buffptr; |
lelect | 0:06d9443a018f | 192 | }; |