function LedMatrix(){ var me = this; var gr,buf; //graphics object and buffer in graphics object var Penable; var ctrlPort,dataPort; var sfnc,dfnc; var ledBuf = new Uint8Array(64 * 32 / 2);//converted graphics.buffer to data for LED var ledLines = new Array(16); var adrLines = new Array(16); me.init = function(R1,R2,B1,B2,G1,G2,A,B,C,D,Latch,Clock,Enable){ //sfnc = shiftOut.bind(null,[R1,G1,B1,R2,G2,B2],{clk:Clock}); //dfnc = digitalWrite.bind(null,[Enable,Latch,Latch,D,C,B,A,Enable]); ctrlPort = new BytePort([Enable,Latch,Latch,A,B,C,D,Enable],2); dfnc = ctrlPort.sendBits.bind(ctrlPort); dataPort = new BytePort([R2,G2,B2,R1,G1,B1],1); dataPort.setClock(Clock,true); sfnc = dataPort.sendBytes.bind(dataPort); gr = Graphics.createArrayBuffer(64,32,4); buf = gr.buffer; return gr; }; me.convertArray = function(){ var bufpnt1,bufpnt2,ledpnt; bufpnt1 = 0; bufpnt2 = 512; ledpnt = 0; var pane = false,i,j; for(i = 0; i < 16; i++){ for(j = 0; j < 64;j +=2){ ledBuf[ledpnt] = (buf[bufpnt2] & 7) + ((buf[bufpnt1] & 7)<<3); ledpnt++; ledBuf[ledpnt] = ((buf[bufpnt2] & 0xf0) >>4) + ((buf[bufpnt1] & 0xf0)>>1); ledpnt++; bufpnt1++; bufpnt2++; } } for(i = 0; i < 16; i++){ adrLines[i] = 5|i<<3; ledLines[i] = new Uint8Array(ledBuf.buffer,i*64,64); } }; me.scan = function(){ var y = 16; while(y--){ sfnc(ledLines[y]); dfnc(adrLines[y]); } }; } var gr,led = new LedMatrix(); function test(){ gr = led.init(D2,D16,D4,D17,D15,D27, D5,D18,D19,D21, D26,D22,D25); gr.setBgColor(1); gr.clear(); gr.setColor(2); gr.fillRect(5,12,50,25); gr.setColor(4); gr.fillRect(10,14,40,20); gr.fillRect(10,0,40,0); led.convertArray(); var d = new Date(); led.scan(); d = new Date() -d; console.log(d); }