Routines to drive a chain of APA102 Leds.

Fork of APA102 by Joel Rosiene

Committer:
vrou44
Date:
Mon May 14 12:33:19 2018 +0000
Revision:
3:a1d3dbde7004
Parent:
0:2fd584b4a9b8
Changes for Book And Plug Proto

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rosienej 0:2fd584b4a9b8 1 #include "APA102.h"
rosienej 0:2fd584b4a9b8 2 #include "mbed.h"
rosienej 0:2fd584b4a9b8 3
rosienej 0:2fd584b4a9b8 4 APA102::APA102(PinName mosi,PinName miso,PinName sclk,int rate)
rosienej 0:2fd584b4a9b8 5 : _spi(mosi, miso, sclk)
rosienej 0:2fd584b4a9b8 6
rosienej 0:2fd584b4a9b8 7 {
rosienej 0:2fd584b4a9b8 8 // Setup the spi for 8 bit data, high steady state clock,
rosienej 0:2fd584b4a9b8 9 // second edge capture, with a 1MHz clock rate
rosienej 0:2fd584b4a9b8 10 _spi.format(8,3);
rosienej 0:2fd584b4a9b8 11 _spi.frequency(rate);
rosienej 0:2fd584b4a9b8 12 }
rosienej 0:2fd584b4a9b8 13
rosienej 0:2fd584b4a9b8 14 void APA102::SetBuffer(unsigned int Buffer[],int Rows,int Cols, int Stride,int Offset, bool ZigZag,bool Wrap)
rosienej 0:2fd584b4a9b8 15 {
rosienej 0:2fd584b4a9b8 16 Buf = Buffer;
rosienej 0:2fd584b4a9b8 17 NR = Rows;
rosienej 0:2fd584b4a9b8 18 NC = Cols;
rosienej 0:2fd584b4a9b8 19 NS = Stride;
rosienej 0:2fd584b4a9b8 20 off = Offset;
rosienej 0:2fd584b4a9b8 21 ZF = ZigZag;
rosienej 0:2fd584b4a9b8 22 WF = Wrap;
rosienej 0:2fd584b4a9b8 23 }
rosienej 0:2fd584b4a9b8 24
rosienej 0:2fd584b4a9b8 25 void APA102::Repaint()
rosienej 0:2fd584b4a9b8 26 {
vrou44 3:a1d3dbde7004 27 // int index;
rosienej 0:2fd584b4a9b8 28 unsigned int val;
rosienej 0:2fd584b4a9b8 29
rosienej 0:2fd584b4a9b8 30 _spi.write(0X00); // Start
rosienej 0:2fd584b4a9b8 31 _spi.write(0X00);
rosienej 0:2fd584b4a9b8 32 _spi.write(0X00);
rosienej 0:2fd584b4a9b8 33 _spi.write(0X00);
vrou44 3:a1d3dbde7004 34
vrou44 3:a1d3dbde7004 35 #if 0
rosienej 0:2fd584b4a9b8 36 for(int r = 0;r<NR;r++)
rosienej 0:2fd584b4a9b8 37 {
rosienej 0:2fd584b4a9b8 38 for(int c = off;c<(NC+off);c++)
rosienej 0:2fd584b4a9b8 39 {
rosienej 0:2fd584b4a9b8 40 int cc = (WF)?(c%NS):((c<NS)?c:NS);
rosienej 0:2fd584b4a9b8 41 if (ZF)
rosienej 0:2fd584b4a9b8 42 if((r&0x01)>0)
rosienej 0:2fd584b4a9b8 43 index = r*NS + NC+off-cc;
rosienej 0:2fd584b4a9b8 44 else
rosienej 0:2fd584b4a9b8 45 index = r*NS + cc;
rosienej 0:2fd584b4a9b8 46 else
rosienej 0:2fd584b4a9b8 47 index = r*NS + cc;
rosienej 0:2fd584b4a9b8 48
rosienej 0:2fd584b4a9b8 49 val = Buf[index];
rosienej 0:2fd584b4a9b8 50 _spi.write((val>>24)&0xFF);
rosienej 0:2fd584b4a9b8 51 _spi.write((val>>16)&0xFF);
rosienej 0:2fd584b4a9b8 52 _spi.write((val>>8)&0xFF);
rosienej 0:2fd584b4a9b8 53 _spi.write(val&0xFF);
rosienej 0:2fd584b4a9b8 54 }
rosienej 0:2fd584b4a9b8 55 }
vrou44 3:a1d3dbde7004 56 #else
vrou44 3:a1d3dbde7004 57
vrou44 3:a1d3dbde7004 58 for (int i = 0 ; i < NC ; ++i) {
vrou44 3:a1d3dbde7004 59 val = Buf[i] ;
vrou44 3:a1d3dbde7004 60 _spi.write((val>>24)&0xFF);
vrou44 3:a1d3dbde7004 61 _spi.write((val>>16)&0xFF);
vrou44 3:a1d3dbde7004 62 _spi.write((val>>8)&0xFF);
vrou44 3:a1d3dbde7004 63 _spi.write(val&0xFF);
vrou44 3:a1d3dbde7004 64 }
vrou44 3:a1d3dbde7004 65
vrou44 3:a1d3dbde7004 66
vrou44 3:a1d3dbde7004 67 #endif
rosienej 0:2fd584b4a9b8 68 _spi.write(0XFF); // Stop
rosienej 0:2fd584b4a9b8 69 _spi.write(0XFF);
rosienej 0:2fd584b4a9b8 70 _spi.write(0XFF);
rosienej 0:2fd584b4a9b8 71 _spi.write(0XFF);
rosienej 0:2fd584b4a9b8 72
rosienej 0:2fd584b4a9b8 73 }