GROVE LEDバーのライブラリ

LEDBar.cpp

Committer:
jksoft
Date:
2013-11-30
Revision:
0:a2b97475d3af

File content as of revision 0:a2b97475d3af:

#include "mbed.h"
#include "LEDBar.h"

LED_Bar::LED_Bar(PinName clk_pin, PinName data_pin) :_clk_pin(clk_pin), _data_pin(data_pin)
{
//  _clk=clk;
//  _dat=dat;
  //DDR_Data |= BIT_Data;
  //DDR_Clk |= BIT_Clk;
 // pinMode(_clk,OUTPUT);  //Data pin
//  pinMode(_dat,OUTPUT);  //CLK pin
}

void LED_Bar::set_LED_Index(unsigned int index)
//index: range 0b000000000000~0b001111111111, 1 stands light whlie 0 stands off;
{
  unsigned char i;
  send16bitData(CmdMode); 
  for (i=0;i<12;i++)
  {
    if (index&0x0001)
    send16bitData(ON);
    else
    send16bitData(SHUT);
    index= index>>1;
  }
  latchData();
}
void LED_Bar::set_LED_Index(unsigned int index1,unsigned int index2)
//index: range 0b000000000000~0b001111111111, 1 stands light whlie 0 stands off;
{
  unsigned char i;
  for (unsigned char j =0;j<2;j++)
  {
      send16bitData(CmdMode); 
      if (j==0)
      {
      for (i=0;i<12;i++)
        {
          if (index1&0x0001)
          send16bitData(ON);
          else
          send16bitData(SHUT);
         index1= index1>>1;
        }
      }
      if (j==1)
      {
      for (i=0;i<12;i++)
        {
          if (index2&0x0001)
          send16bitData(ON);
          else
          send16bitData(SHUT);
         index2= index2>>1;
        }
      }
  }
      latchData();
}
void LED_Bar::set_LED_Range(unsigned int indexTo)
//indexto : range 1~10.for example: 5, the 1~5 would be light 
{
  unsigned char i;
  
   send16bitData(CmdMode); 
  for(i=0;i<12;i++)
  {
    if(i<indexTo)
    {
      send16bitData(ON);
    }
    else 
    {
      send16bitData(SHUT);
    }
     // indexTo=indexTo>>1;
  }
   
  latchData();
}
void LED_Bar::set_LED_Range(unsigned int indexTo1,unsigned int indexTo2)
//indexto : range 1~10.for example: 5, the 1~5 would be light 
{
  unsigned char i;
  
  for (unsigned char j =0;j<2;j++)
  {
    send16bitData(CmdMode); 
   if (j==0)
    {
    for(i=0;i<12;i++)
        {
        if(i<indexTo1)
        {
          send16bitData(ON);
        }
        else 
        {
          send16bitData(SHUT);
         }
        }
    }
    if (j==1)
    {
       for(i=0;i<12;i++)
        {
        if(i<indexTo2)
        {
          send16bitData(ON);
        }
        else 
        {
          send16bitData(SHUT);
         }
        }
    }
   
  }
  latchData();
}
void LED_Bar::send16bitData(unsigned int data)
{
  for(unsigned char i=0;i<16;i++)
    {
        if(data&0x8000)
        {
            _data_pin = 1;
            //PORT_Data |= BIT_Data;
        }
        else
        {
            _data_pin = 0;
            //PORT_Data &=~ BIT_Data;
        }
        _clk_pin = !_clk_pin;
        //PORT_Clk ^= BIT_Clk;
        data <<= 1;
    }
}
void LED_Bar::latchData(void)
{
    _data_pin = 0;
    //PORT_Data &=~ BIT_Data;
    wait_us(10);
    //delayMicroseconds(10);
    for(unsigned char i=0;i<8;i++)
    {
        _data_pin = !_data_pin;
        //PORT_Data ^= BIT_Data;
    }
}