Adafruit LED Matrix Display program

Dependencies:   mbed

Committer:
tamaki
Date:
Sat Jul 11 01:16:40 2015 +0000
Revision:
0:86b6f02fab12
adafruit LED matrix Display program(Test)

Who changed what in which revision?

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