v1.0

Dependencies:   Fonts TTF_fonts

Fork of RGB_Matrix by Jack Berkhout

Committer:
perlatecnica
Date:
Tue Jun 20 17:53:58 2017 +0000
Revision:
1:0a1a89c55c7c
Parent:
0:04691de55153
v1.0;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JackB 0:04691de55153 1 /* mbed RGB Matrix Library
JackB 0:04691de55153 2 * Written for Nucleo-F446RE, v1.0, 03-10-2015
JackB 0:04691de55153 3 *
JackB 0:04691de55153 4 * Copyright (c) 2013-2015 JackB, cstyles
JackB 0:04691de55153 5 *
JackB 0:04691de55153 6 * Permission is hereby granted, free of charge, to any person obtaining a copy
JackB 0:04691de55153 7 * of this software and associated documentation files (the "Software"), to deal
JackB 0:04691de55153 8 * in the Software without restriction, including without limitation the rights
JackB 0:04691de55153 9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
JackB 0:04691de55153 10 * copies of the Software, and to permit persons to whom the Software is
JackB 0:04691de55153 11 * furnished to do so, subject to the following conditions:
JackB 0:04691de55153 12 *
JackB 0:04691de55153 13 * The above copyright notice and this permission notice shall be included in
JackB 0:04691de55153 14 * all copies or substantial portions of the Software.
JackB 0:04691de55153 15 *
JackB 0:04691de55153 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
JackB 0:04691de55153 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
JackB 0:04691de55153 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
JackB 0:04691de55153 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
JackB 0:04691de55153 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
JackB 0:04691de55153 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
JackB 0:04691de55153 22 * THE SOFTWARE.
JackB 0:04691de55153 23 */
JackB 0:04691de55153 24
JackB 0:04691de55153 25 #ifndef MBED_RGB_MATRIX_H
JackB 0:04691de55153 26 #define MBED_RGB_MATRIX_H
JackB 0:04691de55153 27
JackB 0:04691de55153 28 #include "mbed.h"
JackB 0:04691de55153 29 #include "math.h"
JackB 0:04691de55153 30 //#include "GraphicsDisplay.h"
JackB 0:04691de55153 31
JackB 0:04691de55153 32 /** RGB_Matrix calculation class
JackB 0:04691de55153 33 *
JackB 0:04691de55153 34 * Example:
JackB 0:04691de55153 35 * @code
JackB 0:04691de55153 36 * // Continuously sweep the RGB_Matrix through it's full range
JackB 0:04691de55153 37 * #include "mbed.h"
JackB 0:04691de55153 38 * #include "RGB_Matrix.h"
JackB 0:04691de55153 39 *
JackB 0:04691de55153 40 * RGB_Matrix myRGB_Matrix(LED1,LED2,LED3);
JackB 0:04691de55153 41 *
JackB 0:04691de55153 42 * int main() {
JackB 0:04691de55153 43 * myRGB_Matrix.SetS(1.0);
JackB 0:04691de55153 44 * myRGB_Matrix.SetV(1.0);
JackB 0:04691de55153 45 * while(1) {
JackB 0:04691de55153 46 * for(int i=0; i<100; i++) {
JackB 0:04691de55153 47 * myRGB_Matrix.SetH((float)i/100.0);
JackB 0:04691de55153 48 * myRGB_Matrix.RGB_Matrix_to_RGB();
JackB 0:04691de55153 49 * wait(0.01);
JackB 0:04691de55153 50 * }
JackB 0:04691de55153 51 * }
JackB 0:04691de55153 52 * }
JackB 0:04691de55153 53 * @endcode
JackB 0:04691de55153 54 */
JackB 0:04691de55153 55
JackB 0:04691de55153 56 #define ROWS 16
JackB 0:04691de55153 57 #define PLANES 7
JackB 0:04691de55153 58 #define WIDTH 64
JackB 0:04691de55153 59 #define HEIGHT 32
JackB 0:04691de55153 60 #define PIXELS 2048 // WIDTH * HEIGHT
JackB 0:04691de55153 61 #define DBUF true
JackB 0:04691de55153 62 #define LANDSCAPE_T 0
JackB 0:04691de55153 63 #define PORTRAIT_L 1
JackB 0:04691de55153 64 #define LANDSCAPE_B 2
JackB 0:04691de55153 65 #define PORTRAIT_R 3
JackB 0:04691de55153 66
JackB 0:04691de55153 67 #define BYTESPERCHAR 0
JackB 0:04691de55153 68 #define FONTWIDTH 1
JackB 0:04691de55153 69 #define FONTHEIGHT 2
JackB 0:04691de55153 70 #define BYTESPERLINE 3
JackB 0:04691de55153 71
JackB 0:04691de55153 72 #define INTTIME 0.00012 // 0.0003 is slowest, 0.00007 is fastest, Nr2 0.000001 is fastest
JackB 0:04691de55153 73
JackB 0:04691de55153 74 #define RGB(r,g,b) (((r&0xF8)<<8)|((g&0xFC)<<3)|((b&0xF8)>>3)) //5 red | 6 green | 5 blue
JackB 0:04691de55153 75
JackB 0:04691de55153 76
JackB 0:04691de55153 77 /* some RGB color definitions
JackB 0:04691de55153 78
JackB 0:04691de55153 79 RRRR RGGG GGGB BBBB
JackB 0:04691de55153 80 */
JackB 0:04691de55153 81 #define Black 0x0000 /* 0, 0, 0 */
JackB 0:04691de55153 82 #define Navy 0x000F /* 0, 0, 128 */
JackB 0:04691de55153 83 #define DarkBlue 0x000F /* 0, 0, 255 */
JackB 0:04691de55153 84 #define DarkGreen 0x03E0 /* 0, 128, 0 */
JackB 0:04691de55153 85 #define DarkCyan 0x03EF /* 0, 128, 128 */
JackB 0:04691de55153 86 #define Maroon 0x7800 /* 128, 0, 0 */
JackB 0:04691de55153 87 #define Purple 0x780F /* 128, 0, 128 */
JackB 0:04691de55153 88 #define Olive 0x7BE0 /* 128, 128, 0 */
JackB 0:04691de55153 89 #define LightGrey 0xC618 /* 192, 192, 192 */
JackB 0:04691de55153 90 #define Grey 0x7BEF /* 128, 128, 128 */
JackB 0:04691de55153 91 #define DarkGrey 0x4208 /* 64, 64, 64 01000 010000 01000 */
JackB 0:04691de55153 92 #define Blue 0x001F /* 0, 0, 255 */
JackB 0:04691de55153 93 #define Green 0x07E0 /* 0, 255, 0 */
JackB 0:04691de55153 94 #define Cyan 0x07FF /* 0, 255, 255 */
JackB 0:04691de55153 95 #define Red 0xF800 /* 255, 0, 0 */
JackB 0:04691de55153 96 #define Magenta 0xF81F /* 255, 0, 255 */
JackB 0:04691de55153 97 #define Yellow 0xFFE0 /* 255, 255, 0 */
JackB 0:04691de55153 98 #define White 0xFFFF /* 255, 255, 255 11111 111111 11111 */
JackB 0:04691de55153 99 #define Orange 0xFD20 /* 255, 165, 0 11111 101001 00000 */
JackB 0:04691de55153 100 #define GreenYellow 0xAFE5 /* 173, 255, 47 10101 111111 00101 */
JackB 0:04691de55153 101
JackB 0:04691de55153 102
JackB 0:04691de55153 103 class RGB_Matrix
JackB 0:04691de55153 104 //class RGB_Matrix : public GraphicsDisplay
JackB 0:04691de55153 105 {
JackB 0:04691de55153 106 public:
JackB 0:04691de55153 107
JackB 0:04691de55153 108 /** Create a RGB_Matrix object
JackB 0:04691de55153 109 *
JackB 0:04691de55153 110 * @param void
JackB 0:04691de55153 111 */
JackB 0:04691de55153 112 RGB_Matrix(PinName Pin_R1, PinName Pin_R2, PinName Pin_G1, PinName Pin_G2,
JackB 0:04691de55153 113 PinName Pin_B1, PinName Pin_B2,
JackB 0:04691de55153 114 PinName Pin_CLK, PinName Pin_LAT, PinName Pin_OE,
JackB 0:04691de55153 115 PinName Pin_A, PinName Pin_B, PinName Pin_C, PinName Pin_D);
JackB 0:04691de55153 116
JackB 0:04691de55153 117 void Init(void);
JackB 0:04691de55153 118
JackB 0:04691de55153 119 void swap(int16_t &x, int16_t &y);
JackB 0:04691de55153 120 uint16_t rgbToColor(uint8_t R, uint8_t G, uint8_t B);
JackB 0:04691de55153 121
JackB 0:04691de55153 122 void drawPixel2(int16_t x, int16_t y, uint16_t c);
JackB 0:04691de55153 123 void drawPixel(int16_t x, int16_t y, uint16_t c);
JackB 0:04691de55153 124
JackB 0:04691de55153 125 void set_font(unsigned char* f);
JackB 0:04691de55153 126
JackB 0:04691de55153 127 void character(int x, int y, int c);
JackB 0:04691de55153 128
JackB 0:04691de55153 129 int putc(int value);
JackB 0:04691de55153 130 void printString(char *string);
JackB 0:04691de55153 131 void printStringCenter(char *string);
JackB 0:04691de55153 132
JackB 0:04691de55153 133 void foreground(uint16_t colour);
JackB 0:04691de55153 134 void background(uint16_t colour);
JackB 0:04691de55153 135 int width();
JackB 0:04691de55153 136 int height();
JackB 0:04691de55153 137 void SetOrientation(uint8_t orientation);
JackB 0:04691de55153 138 void locate(uint8_t x, uint8_t y);
JackB 0:04691de55153 139 void locatePixelX(uint8_t x);
JackB 0:04691de55153 140 void locatePixelY(uint8_t y);
JackB 0:04691de55153 141
JackB 0:04691de55153 142 int columns();
JackB 0:04691de55153 143 int rows();
JackB 0:04691de55153 144
JackB 0:04691de55153 145 void setDisplayBuffer(uint8_t Buffer);
JackB 0:04691de55153 146 void setWriteBuffer(uint8_t Buffer);
JackB 0:04691de55153 147
JackB 0:04691de55153 148 void updateDisplay(void);
JackB 0:04691de55153 149 void updateDisplay2(void);
JackB 0:04691de55153 150
JackB 0:04691de55153 151 private:
JackB 0:04691de55153 152
JackB 0:04691de55153 153 DigitalOut _Pin_R1;
JackB 0:04691de55153 154 DigitalOut _Pin_R2;
JackB 0:04691de55153 155 DigitalOut _Pin_G1;
JackB 0:04691de55153 156 DigitalOut _Pin_G2;
JackB 0:04691de55153 157 DigitalOut _Pin_B1;
JackB 0:04691de55153 158 DigitalOut _Pin_B2;
JackB 0:04691de55153 159 DigitalOut _Pin_CLK;
JackB 0:04691de55153 160 DigitalOut _Pin_LAT;
JackB 0:04691de55153 161 DigitalOut _Pin_OE;
JackB 0:04691de55153 162 DigitalOut _Pin_A;
JackB 0:04691de55153 163 DigitalOut _Pin_B;
JackB 0:04691de55153 164 DigitalOut _Pin_C;
JackB 0:04691de55153 165 DigitalOut _Pin_D;
JackB 0:04691de55153 166
JackB 0:04691de55153 167 Ticker Update;
JackB 0:04691de55153 168
JackB 0:04691de55153 169 // Counters/pointers for interrupt handler:
JackB 0:04691de55153 170 uint8_t row, plane, bufferDisplay, bufferWrite;
JackB 0:04691de55153 171 // uint8_t PixelValueR1, PixelValueG1, PixelValueB1;
JackB 0:04691de55153 172 // uint8_t PixelValueR2, PixelValueG2, PixelValueB2;
JackB 0:04691de55153 173 uint8_t *buffptr;
JackB 0:04691de55153 174 // volatile uint8_t backindex;
JackB 0:04691de55153 175 // volatile bool swapflag;
JackB 0:04691de55153 176
JackB 0:04691de55153 177 uint8_t *matrixbuff[2];
JackB 0:04691de55153 178 // uint8_t pixelbuff0[WIDTH*HEIGHT*PLANES];
JackB 0:04691de55153 179 // uint8_t pixelbuff1[WIDTH*ROWS*PLANES];
JackB 0:04691de55153 180
JackB 0:04691de55153 181 unsigned char* font;
JackB 0:04691de55153 182 uint8_t char_x;
JackB 0:04691de55153 183 uint8_t char_y;
JackB 0:04691de55153 184 uint16_t _foreground, _background;
JackB 0:04691de55153 185 uint8_t _orientation;
JackB 0:04691de55153 186
JackB 0:04691de55153 187 // Code for matrix pixel pwm
JackB 0:04691de55153 188
JackB 0:04691de55153 189
JackB 0:04691de55153 190
JackB 0:04691de55153 191 };
JackB 0:04691de55153 192
JackB 0:04691de55153 193 #endif
JackB 0:04691de55153 194