Created
May 10, 2014 14:02
-
-
Save FredDrago/63527eeaa829397139dd to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Modified by Frederic Drago to display a panel using 24 bits hex colors and gamma correction | |
* Modified by Markus Lipp adding interleaved buffers, streaming, 32x32 & 24bit support | |
* Based on "_16x32_Matrix R3.0" by Creater Alex Medeiros, http://PenguinTech.tk | |
* Use code freely and distort its contents as much as you want, just remeber to thank the | |
* original creaters of the code by leaving their information in the header. :) | |
*/ | |
//PortA[4:5, 12:13] = {33, 24, 3, 4} | |
//PortB[0:3, 16:19] = {16, 17, 19, 18, 0, 1, 32, 25} | |
//PortC[0:11] = {15, 22, 23, 9, 10, 13, 11, 12, 28, 27, 29, 30} | |
//PortD[0:7] = {2, 14, 7, 8, 6, 20, 21, 5} | |
//PortE[0:1] = {31, 26} | |
// Define pins (if you cannot use portB, since pin 32 is not available by default on the Teensy, portC must be used, | |
// then change also GPIOB to GPIOC in the code. | |
const uint8_t | |
//PortC | |
//APIN = 15, BPIN = 22, CPIN = 23, DPIN = 9, CLOCKPIN = 10, LATCHPIN = 13, OEPIN = 11, | |
//PortB | |
APIN = 16, BPIN = 17, CPIN = 19, DPIN = 18, CLOCKPIN = 0, LATCHPIN = 1, OEPIN = 32, | |
//PortD | |
R1PIN = 2, R2PIN = 8, | |
G1PIN = 14, G2PIN = 6, | |
B1PIN = 7, B2PIN = 20; | |
uint8_t pinTable[13] = { | |
R1PIN,R2PIN,G1PIN,G2PIN,B1PIN,B2PIN, | |
APIN,BPIN,CPIN,DPIN,CLOCKPIN,LATCHPIN,OEPIN}; | |
//Addresses 1/8 rows Through a decoder | |
uint16_t const A = 1, B = 2,C = 4, D=8; | |
//Acts like a 16 bit shift register | |
uint32_t const SCLK = 65536;//16 if using portC | |
uint32_t const LATCH = 131072;//32 if using portC | |
uint32_t const OE = 262144;//64 if using portC | |
uint16_t const abcVar[16] = { //Decoder counter var | |
// 0,A,B,A+B,C,C+A,C+B,A+B+C,0+D,A+D,B+D,A+B+D,C+D,C+A+D,C+B+D,A+B+C+D}; | |
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; | |
//Data Lines for row 1 red and row 9 red, ect. | |
uint16_t const RED1 = 1, RED2 = 8; | |
uint16_t const GREEN1 = 2, GREEN2 = 16; | |
uint16_t const BLUE1 = 4, BLUE2 = 32; | |
const uint8_t SIZEX = 32; | |
const uint8_t SIZEY = 32; | |
//BAM and interrupt variables | |
uint8_t rowN = 0; | |
uint16_t BAM; | |
uint8_t BAMMAX = 7; //now 24bit color! (0-7) | |
IntervalTimer timer1; | |
uint8_t gImage[1024][3]; | |
uint8_t gr, gg, gb; | |
uint8_t r, g, b; | |
char buffer[120]; | |
int bufidx = 0; | |
char c; | |
int i = 0; | |
int color = 0; | |
// -------------------------------- sample image to display by default ----------------------------------------------------- | |
static int hello[1024] = { | |
0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF, | |
0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0xFFFFFF, | |
0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000, | |
0xFFFFFF,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000, | |
0xFFFFFF,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFFFFFF,0x000000, | |
0xFFFFFF,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0x00000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000, | |
0x000000,0x000000,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFBA904,0xFBA904,0x000000,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0xFBA904, | |
0xFBA904,0xFBA904,0xFBA904,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFBA904,0x000000,0xFFFFFF,0x000000,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0x000000,0xFFFFFF,0xFFFFFF,0x000000,0xFFFFFF,0xFFFFFF,0x000000,0x000000, | |
0xFBA904,0xFBA904,0xFBA904,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0x000000,0xFFFFFF,0xFFFFFF,0x000000,0xFFFFFF,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000, | |
0xFBA904,0xFBA904,0xFBA904,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFBA904,0xFFFFFF,0x000000,0x000000,0xFFFFFF,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000, | |
0xFBA904,0xFBA904,0xFBA904,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFBA904,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0x000000,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000, | |
0x000000,0xFBA904,0xFBA904,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFBA904,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0x000000,0x000000,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0x000000, | |
0xFBA904,0xFBA904,0xFBA904,0x000000,0x000000,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904, | |
0xFBA904,0xFBA904,0x000000,0x000000,0xFBA904,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFBA904,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904, | |
0xFBA904,0xFBA904,0x000000,0xFBA904,0xFBA904,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFBA904,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904, | |
0xFBA904,0x000000,0xFBA904,0xFBA904,0xFBA904,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0x000000,0x000000,0x000000,0x000000,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904, | |
0xFBA904,0x000000,0xFBA904,0xFBA904,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904, | |
0xFBA904,0xFBA904,0xFBA904,0x000000,0xFBA904,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904, | |
0xFBA904,0xFBA904,0x000000,0xFBA904,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904, | |
0xFBA904,0xFBA904,0x000000,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904, | |
0xFBA904,0xFBA904,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0x000000,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904, | |
0xFBA904,0x000000,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFBA904,0xFBA904,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904, | |
0xFBA904,0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0x000000, | |
0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0x000000,0x000000,0x000000, | |
0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0x000000,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0xFBA904,0x000000,0x000000,0xFFFFFF,0xFFFFFF, | |
0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0xFFFFFF,0xFFFFFF, | |
0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFC02B5,0xFC02B5,0xFC02B5,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFB0412,0xFB0412,0xFB0412,0xFFFFFF,0x000000,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0x000000, | |
0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFC02B5,0xF7FB04,0xF7FB04,0xF7FB04,0xFC02B5,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFB0412,0xF7FB04,0xF7FB04,0xF7FB04,0x000000,0x000000,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0x000000, | |
0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFC02B5,0xF7FB04,0xF7FB04,0xF7FB04,0xFC02B5,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFB0412,0xF7FB04,0xF7FB04,0xF7FB04,0x000000,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412, | |
0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFC02B5,0x2AF60A,0xFC02B5,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFB0412,0x2AF60A,0xFB0412,0x000000,0xFB0412,0x000000,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0x000000,0xFB0412, | |
0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x2AF60A,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x2AF60A,0xFFFFFF,0x000000,0xFB0412,0x000000,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0x000000,0xFB0412, | |
0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x2AF60A,0xFFFFFF,0x2AF60A,0xFFFFFF,0x2AF60A,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x2AF60A,0x2AF60A,0x2AF60A,0x000000,0xFB0412,0x000000,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0xFB0412,0x000000,0xFB0412, | |
0x000000,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x2AF60A,0x2AF60A,0x2AF60A,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF | |
}; | |
// ---------------------------------------------------------------------------------------------------------------------------------- | |
void setup() { | |
for(uint8_t i = 0; i < 13; i++){ | |
pinMode(pinTable[i], OUTPUT); | |
} | |
// Prepare a default image | |
for (int i = 0; i < 1024; i++) { | |
gammaCorrect(hello[i]); | |
gImage[i][0] = gr; | |
gImage[i][1] = gg; | |
gImage[i][2] = gb; | |
} | |
Serial.begin(250000); | |
timerInit(); | |
} | |
// ---------------------------------------------------------------------------------------------------------------------------------- | |
void loop() { | |
// Normal serial from USB | |
// format to change a led is c,led number, color in hexadecimal ex: c,0,FF00FF (will change the first led to magenta) | |
Serial.flush(); | |
if (Serial.available() > 0) { | |
c = (char)Serial.read(); | |
buffer[bufidx++] = c; | |
if (c == '\n') { | |
buffer[bufidx++] = '\n'; | |
bufidx = 0; | |
parseBuffer(); | |
//gammaCorrectRGB(r, g, b); // works but takes too much time (could use a table), implemented in processing anyway | |
gImage[i][0] = r; | |
gImage[i][1] = g; | |
gImage[i][2] = b; | |
} | |
} | |
} | |
// ---------------------------------------------------END LOOP---------------------------------------------------------------- | |
void timerInit() { | |
BAM = 0; | |
attackMatrix(); | |
} | |
//The updating matrix stuff happens here | |
//each pair of rows is taken through its BAM cycle | |
//then the rowNumber is increased and is done again | |
void attackMatrix() { | |
timer1.end(); | |
uint16_t portData; | |
portData = 0; // Clear data to enter | |
portData |= (abcVar[rowN])|OE; // abc, OE | |
portData &=~ LATCH; //LATCH LOW | |
GPIOB_PDOR = portData; // Write to Port | |
for(uint8_t i = 0; i < 32; i++){ | |
uint16_t row = (rowN<<5)+i; | |
uint16_t row16 = ((rowN+16)<<5)+i; | |
uint16_t tempC[6] = { //Prepare data in correct place | |
((gImage[row][0])<<1) , ((gImage[row16][0])<<4), //3 | |
((gImage[row][1])<<1), ((gImage[row16][1])<<4), //4 | |
(gImage[row][2]<<1), (gImage[row16][2])<<4 }; //6 | |
uint16_t allC =//Put OUTPUT data into temp variable | |
((tempC[0]>>BAM)&RED1)|((tempC[1]>>BAM)&RED2)| | |
((tempC[2]>>BAM)&GREEN1)|((tempC[3]>>BAM)&GREEN2)| | |
((tempC[4]>>BAM)&BLUE1)|((tempC[5]>>BAM)&BLUE2); | |
GPIOD_PDOR = (allC); // Transfer data | |
GPIOB_PDOR |= SCLK;// Clock HIGH | |
GPIOB_PDOR &=~ SCLK;// Clock LOW | |
} | |
GPIOB_PDOR |= LATCH;// Latch HIGH | |
GPIOB_PDOR &=~ OE;// OE LOW, Displays line | |
#define LOOPTIME 1 //trial&error to get both smooth gradients & little flicker | |
#define CALLOVERHEAD 1 | |
timer1.begin(attackMatrix,((LOOPTIME+CALLOVERHEAD)<<BAM)-CALLOVERHEAD); | |
if(BAM >= BAMMAX) { //Checks the BAM cycle for next time. | |
if(rowN == 15){ | |
rowN = 0; | |
} | |
else { | |
rowN ++; | |
} | |
BAM = 0; | |
} | |
else { | |
BAM ++; | |
} | |
} | |
// Choose appropriate gamma value by comparison with computer monitor | |
void gammaCorrect(int pixel) | |
{ | |
float gammaCorrect = 1.0 /0.28; | |
gr = uint8_t((255.0 * (pow(((pixel >> 16) & 0xFF) / 255.0, gammaCorrect)))); | |
gg = uint8_t((255.0 * (pow(((pixel >> 8) & 0xFF) / 255.0, gammaCorrect)))); | |
gb = uint8_t((255.0 * (pow((pixel & 0xFF) / 255.0, gammaCorrect)))); | |
// following gives the best color reproduction, however brightness is lost | |
// float gammaCorrect = 1.0 /0.45; | |
// gr = uint8_t((255.0 * (pow(((pixel >> 16) & 0xFF) / 255.0, gammaCorrect)))*0.33); | |
// gg = uint8_t((255.0 * (pow(((pixel >> 8) & 0xFF) / 255.0, gammaCorrect))))*0.33; | |
// gb = uint8_t((255.0 * (pow((pixel & 0xFF) / 255.0, gammaCorrect)))*0.15); | |
} | |
void gammaCorrectRGB(uint8_t r, uint8_t g, uint8_t b) | |
{ | |
float gammaCorrect = 1.0 /0.28; | |
gr = uint8_t((255.0 * (pow(r / 255.0, gammaCorrect)))); | |
gg = uint8_t((255.0 * (pow(g / 255.0, gammaCorrect)))); | |
gb = uint8_t((255.0 * (pow(b / 255.0, gammaCorrect)))); | |
} | |
void hexToColor(int pixel) | |
{ | |
gr = uint8_t((pixel >> 16) & 0xFF); | |
gg = uint8_t((pixel >> 8) & 0xFF); | |
gb = uint8_t(pixel & 0xFF); | |
} | |
void parseBuffer(void) | |
{ | |
char *parseptr; | |
if (strncmp(buffer,"C",1) == 0 || strncmp(buffer,"c",1) == 0){ | |
parseptr = strchr(buffer, ',')+1; | |
i = parsenumber(parseptr,0); | |
parseptr = strchr(parseptr, ',')+1; | |
r = parseHex(parseptr[0])* 16 + parseHex(parseptr[1]) ; | |
g = parseHex(parseptr[2])* 16 + parseHex(parseptr[3]) ; | |
b = parseHex(parseptr[4])* 16 + parseHex(parseptr[5]) ; | |
} | |
} | |
// Function to parse fixed point numbers (numdec=number of decimals) | |
long parsenumber(char *str,byte numdec) { | |
long d = 0; | |
byte ndec = 0; | |
while (str[0] != 0) { | |
if (str[0] == '.'){ | |
ndec = 1; | |
} | |
else { | |
if ((str[0] > '9') || (str[0] < '0')) | |
return d; | |
d *= 10; | |
d += str[0] - '0'; | |
if (ndec > 0) | |
ndec++; | |
if (ndec > numdec) // we reach the number of decimals... | |
return d; | |
} | |
str++; | |
} | |
return d; | |
} | |
byte parseHex(char c) { | |
if (c < '0') | |
return (0); | |
if (c <= '9') | |
return (c - '0'); | |
if (c < 'A') | |
return (0); | |
if (c <= 'F') | |
return ((c - 'A')+10); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment