for led jacket

Dependents:   ws2812test

Fork of WS2812 by Rendy Devara

WS2812.cpp

Committer:
devararendy
Date:
2016-12-10
Revision:
1:8910a1fcbdb0
Parent:
0:f080cb888db6
Child:
2:645ab1279245

File content as of revision 1:8910a1fcbdb0:

#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;
    //asm("nop");
//    asm("nop");
//    asm("nop");

//--------------hitung manual
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
            asm("nop");
    dataOut = 0;
    //asm("nop");
//    asm("nop");
//    asm("nop");
//    asm("nop");
//    asm("nop");
//    asm("nop");
//    
//    asm("nop");
//    asm("nop");
//    asm("nop");

//-----------------hitung manual
            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;
    //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;
   // asm("nop");
//    asm("nop");
//    asm("nop");
//    
//    asm("nop");
//    asm("nop");
//    asm("nop");
//-----------------hitung manual
            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::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();
}