Adafruit-RGB_matrix_Panel(32*16)

Dependencies:   Adafruit-GFX

Dependents:   Ardoise_magique

Committer:
juliento
Date:
Tue Jun 04 15:17:11 2019 +0000
Revision:
14:cfc715e8e387
Parent:
13:0ceb1b8893e9
Ardoise magique

Who changed what in which revision?

UserRevisionLine numberNew 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):
juliento 14:cfc715e8e387 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 };