gabeNC
Member
I've got a 8x8 RGB led array with transistors driving the columns. Looking for a good way to control each "pixel".
Is this an efficient way to pull this off? thanks.
Is this an efficient way to pull this off? thanks.
Code:
void columnDriver(char columnLocation)
{
if (columnLocation == 0){PORTD=0b00000000;}
if (columnLocation == 1){LATDbits.LATD0=1;}
if (columnLocation == 2){LATDbits.LATD1=1;}
if (columnLocation == 3){LATDbits.LATD2=1;}
if (columnLocation == 4){LATDbits.LATD3=1;}
if (columnLocation == 5){LATDbits.LATD4=1;}
if (columnLocation == 6){LATDbits.LATD5=1;}
if (columnLocation == 7){LATDbits.LATD6=1;}
if (columnLocation == 8){LATDbits.LATD7=1;}
}
void RowA(char led1,char led2,char led3,char columnLocation,char delay)
{
// led1 = green led2 = blue led3 = red
columnDriver(columnLocation);
if (led1 == 0){LATAbits.LATA0=0;}
if (led1 == 1){LATAbits.LATA0=1;}
if (led2 == 0){LATAbits.LATA1=0;}
if (led2 == 1){LATAbits.LATA1=1;}
if (led3 == 0){LATAbits.LATA2=0;}
if (led3 == 1){LATAbits.LATA2=1;}
Delay1KTCYx(delay);
} // end RowA
void knight (int led1,int led2, int led3,char columnLocation,char delay,char direction,char fullbar)
{
unsigned char i;
if (direction == 0)
{
for(i=1;i<9;i++)
{
columnA(led1,led2,led3,i,delay);
if (fullbar == 0) { columnA(0,0,0,0,0);}
}
}
if (direction == 1)
{
for(i=8;i>0;i--)
{
columnA(led1,led2,led3,i,delay);
if (fullbar == 0) { columnA(0,0,0,0,0);}
}
}
} // end knight rider type pattern
while (1)
{
// parameters
// knight (led1,led2,led3,columnLocation,delay,direction,fullbar)
knight(1,0,0,1,48,0,1);
RowA(0,0,0,0,32); // turn off
knight(1,0,0,1,48,1,1);
RowA(0,0,0,0,32); // turn off
}