#include "tsl2561.h"
#include "delay.h"
#include "myiic.h"
#include <stdio.h>
#include <math.h>
uint16_t commad,Channel0,Channel1,temp;
uint16_t DataLow0,DataHigh0,DataLow1,DataHigh1;
double Q,E;
void tsl2561_Init(void)
{
IIC_Init();
TSL2561_Write(0x80,0x03); //设置TSL2561未开启状态
delay_ms(10);
}
void respons()
{
unsigned long i;
IIC_SCL=1;
delay_us(4);
while((IIC_SDA==1)&&(i<1000))
i++;
IIC_SCL=0;
delay_us(4);
}
void TSL2561_Write(uchar command,uchar date)
{
IIC_Start();
IIC_Send_Byte(0x72); //
respons();
IIC_Send_Byte(command);
respons();
IIC_Send_Byte(date);
respons();
IIC_Stop();
}
uchar TSL2561_Read(uchar command)
{
uchar date;
IIC_Start();
IIC_Send_Byte(0x72);
respons();
IIC_Send_Byte(command);
respons();
IIC_Start();
IIC_Send_Byte(0x73);
respons();
date = IIC_Read_Byte(0);
IIC_Stop();
return date;
}
/********************************************************/
//这里非常关键 是官方提供的运算公式,根据这个公式得到我们需要的光强数据,并不是只需要读取传感器中的寄存器数据就足够了,要注意
double Read_Light()
{
DataLow0 = TSL2561_Read(DATA0LOW);
DataHigh0 = TSL2561_Read(DATA0HIGH);
Channel0 = 256*DataHigh0 + DataLow0;
DataLow1 = TSL2561_Read(DATA1LOW);
DataHigh1 = TSL2561_Read(DATA1HIGH);
Channel1 = 256*DataHigh1 + DataLow1;
delay_ms(10);
Q=((double)Channel1/(double)Channel0);
if(0<Q<=0.50) E=0.0304*Channel0-0.062*Channel1/4;
else if(0.50<Q<=0.61)E=0.0224*Channel0-0.031*Channel1;
else if(0.61<Q<=0.80)E=0.0128*Channel0-0.0153*Channel1;
else if(0.80<Q<=1.30)E=0.00146*Channel0-0.00112*Channel1;
else if(Q>1.30) E=0;
return E;
}
/********************************************************/