for led jacket

Dependents:   ws2812test

Fork of WS2812 by Rendy Devara

WS2812.cpp

Committer:
elmoow
Date:
2017-08-16
Revision:
2:645ab1279245
Parent:
1:8910a1fcbdb0

File content as of revision 2:645ab1279245:

#include "WS2812.h"


WS2812::WS2812(PinName pin, int qty):dataOut(pin)
{
    dataPin = pin;
    LED_Qty = qty;
}
WS2812::~WS2812()
{
       
}
void WS2812::sendReset()
{
    dataOut = 0;
    wait_us(60);
}
void WS2812::writeColor(uint32_t RGB)
{
     Red = ((RGB&0xFF0000)>>16);
     Green = ((RGB&0xFF00)>>8);
     Blue = (RGB&0xFF);
    
    writeByte(Green);
    writeByte(Red);
    writeByte(Blue);
    
}
void WS2812::send0()
{
    dataOut = 1;
//0.4uS  (28 nops)
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
    dataOut = 0;
//0.85uS (59 nops)
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");    
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");        
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");          
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");        
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");         
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");          
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");        
            asm("nop");
            asm("nop");
            asm("nop");        
            asm("nop");
            asm("nop");
}
void WS2812::send1()
{
    dataOut = 1;
//0.8uS (55nops)
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");        
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");          
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");          
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");            
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");            
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
    dataOut = 0;
//0.45uS (30 nops)
            asm("nop");
            asm("nop");     
            asm("nop");
            asm("nop");          
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");         
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");         
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");        
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");    
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
}
void WS2812::writeByte(uint8_t data)
{
    for(int x=7;x>=0;x--)
    {
        if(data&(1<<x))
        {
            //bit is high
            send1();
        }
        else
        {
            //bit is low
            send0();
        }
    }
}
void WS2812::send1Color(uint32_t RGB)
{
    writeColor(RGB);
    sendReset();
}
void WS2812::sendColors(uint32_t * ColorBuffer)
{
    for(int x=0;x<LED_Qty;x++)
    {
        writeColor(*(&ColorBuffer[x]));
    }
    sendReset();
}