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:
2:b8dc9a84801c
Changes for Book And Plug Proto

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rosienej 0:2fd584b4a9b8 1 #ifndef MBED_APA102_H
rosienej 0:2fd584b4a9b8 2
rosienej 0:2fd584b4a9b8 3 #define MBED_PING_H
rosienej 0:2fd584b4a9b8 4
rosienej 0:2fd584b4a9b8 5 #include "mbed.h"
rosienej 0:2fd584b4a9b8 6
rosienej 2:b8dc9a84801c 7
rosienej 2:b8dc9a84801c 8
rosienej 2:b8dc9a84801c 9 /** Create an APA102 Object
rosienej 2:b8dc9a84801c 10 */
rosienej 0:2fd584b4a9b8 11 class APA102{
rosienej 0:2fd584b4a9b8 12 public:
rosienej 1:ce2f23241f88 13 /** Create an APA102 object connected to the specified mosi,miso,sclk pins
rosienej 0:2fd584b4a9b8 14 *
rosienej 0:2fd584b4a9b8 15 * @param mosi : SPI Master Out Slave In pin
rosienej 0:2fd584b4a9b8 16 * @param miso : SPI Master In Slave Out pin (ignored)
rosienej 0:2fd584b4a9b8 17 * @param sclk : SPI Clock
rosienej 0:2fd584b4a9b8 18 * @param rate : SPI Rate
rosienej 0:2fd584b4a9b8 19 */
rosienej 0:2fd584b4a9b8 20 APA102(PinName mosi,PinName miso,PinName sclk,int rate);
rosienej 0:2fd584b4a9b8 21
rosienej 1:ce2f23241f88 22 /** Set the Buffer
rosienej 0:2fd584b4a9b8 23 *
rosienej 0:2fd584b4a9b8 24 * @param buffer[] : a buffer of unsigned integers (4 bytes) *Rows*Stride in size
rosienej 0:2fd584b4a9b8 25 * @param Rows : Number of Rows
rosienej 0:2fd584b4a9b8 26 * @param Cols : Number of Columns
rosienej 0:2fd584b4a9b8 27 * @param Stride : The actual number of columns (useful for data alignment)
rosienej 0:2fd584b4a9b8 28 * @param Offset : The offset into a row
rosienej 0:2fd584b4a9b8 29 * @param ZigZag : A boolean, do we alternate count up/ count down per row?
rosienej 0:2fd584b4a9b8 30 * @param Wrap : A boolean, do we wrap if (Offset+Cols) > Stride? (handy for scrolling messages)
rosienej 0:2fd584b4a9b8 31 */
rosienej 0:2fd584b4a9b8 32 void SetBuffer(unsigned int Buffer[],int Rows,int Cols, int Stride,int Offset, bool ZigZag,bool Wrap);
rosienej 0:2fd584b4a9b8 33
rosienej 1:ce2f23241f88 34 /** Repaint the Strip
rosienej 0:2fd584b4a9b8 35 *
rosienej 0:2fd584b4a9b8 36 * @param none
rosienej 0:2fd584b4a9b8 37 */
rosienej 0:2fd584b4a9b8 38 void Repaint();
rosienej 0:2fd584b4a9b8 39
rosienej 2:b8dc9a84801c 40 /** Create an IRGB helper function to construct a 4 byte LED Frame
rosienej 2:b8dc9a84801c 41 *
rosienej 2:b8dc9a84801c 42 * @param I : 5 bits of intensity (0,1,2,...,31)
rosienej 2:b8dc9a84801c 43 * @param R : 8 bits of Red (0,1,...,255)
rosienej 2:b8dc9a84801c 44 * @param G : 8 bits of Green (0,1,...,255)
rosienej 2:b8dc9a84801c 45 * @param B : 8 bits of Blue (0,1,...,255)
rosienej 2:b8dc9a84801c 46 */
rosienej 2:b8dc9a84801c 47
rosienej 2:b8dc9a84801c 48 int IRGB(unsigned char I,unsigned char R,unsigned char G,unsigned char B) {
rosienej 2:b8dc9a84801c 49 return ((0xE0 + 0x1F&I)<<24)|((0xFF&R)<<16)|((0xFF&G)<<8)|(0xFF&B);}
rosienej 2:b8dc9a84801c 50
rosienej 0:2fd584b4a9b8 51 protected:
rosienej 2:b8dc9a84801c 52
rosienej 0:2fd584b4a9b8 53 SPI _spi;
rosienej 0:2fd584b4a9b8 54 private:
rosienej 0:2fd584b4a9b8 55 int NR;
rosienej 0:2fd584b4a9b8 56 int NC;
rosienej 0:2fd584b4a9b8 57 int NS;
rosienej 0:2fd584b4a9b8 58 int off;
rosienej 0:2fd584b4a9b8 59 bool ZF;
rosienej 0:2fd584b4a9b8 60 bool WF;
rosienej 0:2fd584b4a9b8 61 unsigned int * Buf;
rosienej 0:2fd584b4a9b8 62 };
rosienej 0:2fd584b4a9b8 63
rosienej 0:2fd584b4a9b8 64 #endif