I have a Raspberry Pi 2 and I am trying to create an led display for it from scratch. It works.. but the refresh is far to slow.
My project is running very very slow averaging around 21 ms per refresh on only a 5x10 led display. I am using the development branch of pi4j which is supposed to be much faster. What is it im doing incorrectly, as my project stands the display in not usable.
private static void displayBitmap(int[][] bmp){
for (int rws = 0; rws < 5; rws++){
//even
for (int cls = 0; cls<10;cls=cls+2){
if (bmp[rws][cls]==1){
if (states[cls/2] != 1){
Gpio.digitalWrite(fCols[cls],1);
states[cls/2] =1;
}
}else{
if (states[cls/2] != -1){
Gpio.digitalWrite(fCols[cls],0);
states[cls/2] =-1;
}
}
}
turnPinOn(rows[rws], 0);
//odd
rows[rws].high();
for (int cls = 1; cls<10;cls=cls+2){
if (bmp[rws][cls]==1){
if (states[cls/2]!=-1){
Gpio.digitalWrite(fCols[cls],0);
states[cls/2] = -1;
}
}else{
if (states[cls/2]!= 1){
Gpio.digitalWrite(fCols[cls],1);
states[cls/2] = 1;
}
}
}
turnPinOff(rows[rws]);
}
}
public static void main(String[] args) throws InterruptedException {
final FastRaspiGpioProvider provider = new FastRaspiGpioProvider();
GpioFactory.setDefaultProvider(provider);
final GpioController gpio = GpioFactory.getInstance();
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
bmp[0] = new int[] {0,1,0,1,0,1,1,1,0,1};
bmp[1] = new int[] {0,1,0,1,0,0,1,0,0,1};
bmp[2] = new int[] {0,1,1,1,0,0,1,0,0,1};
bmp[3] = new int[] {0,1,0,1,0,0,1,0,0,0};
bmp[4] = new int[] {0,1,0,1,0,1,1,1,0,1};
rows[0]= gpio.provisionDigitalOutputPin(RaspiPin.GPIO_15, "15", PinState.LOW);fRows[0]=15;
rows[1]= gpio.provisionDigitalOutputPin(RaspiPin.GPIO_16, "16", PinState.LOW);fRows[1]=16;
rows[2]= gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01, "1", PinState.LOW) ;fRows[2]=1;
rows[3]= gpio.provisionDigitalOutputPin(RaspiPin.GPIO_04, "4", PinState.LOW) ;fRows[3]=4;
rows[4]= gpio.provisionDigitalOutputPin(RaspiPin.GPIO_05, "5", PinState.LOW) ;fRows[4]=5;
cols[9]= gpio.provisionDigitalOutputPin(RaspiPin.GPIO_06, "6", PinState.LOW) ;fCols[9]=6;
cols[8]= cols[9] ;fCols[8]=6;
cols[7]= gpio.provisionDigitalOutputPin(RaspiPin.GPIO_10, "10", PinState.LOW);fCols[7]=10;
cols[6]= cols[7] ;fCols[6]=10;
cols[5]= gpio.provisionDigitalOutputPin(RaspiPin.GPIO_11, "11", PinState.LOW);fCols[5]=11;
cols[4]= cols[5] ;fCols[4]=11;
cols[3]= gpio.provisionDigitalOutputPin(RaspiPin.GPIO_26, "26", PinState.LOW);fCols[3]=26;
cols[2]= cols[3] ;fCols[2]=26;
cols[1]= gpio.provisionDigitalOutputPin(RaspiPin.GPIO_27, "27", PinState.LOW);fCols[1]=27;
cols[0]= cols[1] ;fCols[0]=27;
System.out.println("<--Pi4J--> GPIO Control Example ... started.");
long t,tt,ta = 0;
for (int ii =1;ii<100;ii++){
for (int i =0;i<20;i++){
t = System.currentTimeMillis();
displayBitmap(bmp);
t= (System.currentTimeMillis()-t);
System.out.println("<--Pi4J--> time =" + t);
ta =ta +t;
}
System.out.println("<--Pi4J--> time avg =" + ta/(ii*20));
//bmp = scrollBmp(bmp);
}
gpio.shutdown();
}