Routines to drive a chain of APA102 Leds.
Fork of APA102 by
APA102.cpp@3:a1d3dbde7004, 2018-05-14 (annotated)
- 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?
User | Revision | Line number | New 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 | } |