打印
[PIC®/AVR®/dsPIC®产品]

【CuriosityNano测评报告】光照强度检测与显示

[复制链接]
12377|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
BH1750是一种数字式光照强度传感器,其特点是采用I2C接口工作,故占用的引脚少。此外,由于是数字式传感器故无需对检测值进行标定。
尽管以前曾在其它开发板上进行过测试,但在PIC18F57Q43上还是首次。
为进行检测和显示,其引脚配置如图1所示,相应的引脚命名如图2所示。
1  引脚配置
2  引脚命名
其中,BH1750所连接的引脚如下:
CLK---RC0
DIN ---RC1
OLED屏所连接的引脚为:
SCL ---RB1
SDA ---RB2
为此,对BH1750所做的语句定义为:
#define SCL_Clr()    CLK_SetLow()
#define SCL_Set()    CLK_SetHigh()
#define SDA_Clr()    DIN_SetLow()
#define SDA_Set()    DIN_SetHigh()
unsigned char    BUF[8];
#define IIC_WRITE    0
#define IIC_READ     1
#define SlaveAddress   0x46
#define IIC_SDA_IN  DIN_GetValue()
OLED屏的驱动不同,OLED屏只是使用输出模式,而BH1750的数据引脚既使用输出模式也使用输入模式。
为便于引脚工作模式的切换,使用配置了2个函数来进行切换,其内容如下:
void IIC_INPUT_MODE_SET()
{
  DIN_SetDigitalInput();
}

void IIC_OUTPUT_MODE_SET()
{
  DIN_SetDigitalOutput();
}

BH1750的初始化函数为:
void BH1750_Init(void)
{
    DIN_SetDigitalOutput();
}

GPIO口模拟I2C方式字节数据的函数为:
void BH1750_SendByte(char data)
{
    char i;
    IIC_OUTPUT_MODE_SET();
    SCL_Clr();
    Delay_Us(2);
    for (i=0;i<8;i++)
    {
        if(data&0x80) SDA_Set();
        else SDA_Clr();
        data <<= 1;
        SCL_Set();
        Delay_Us(2);
        SCL_Clr();
        Delay_Us(2);
    }
}

获取光照强度值的函数为:
void Get_Sunlight_Value()
{
    int dis_data=0;
    float temp;
    char  i=0;
    unsigned int sd;
    Single_Write_BH1750(0x01);
    Single_Write_BH1750(0x10);
    __delay_ms(180);
    Multiple_Read_BH1750();
    dis_data=BUF[0];
    dis_data=(dis_data<<8)+BUF[1];
    temp=(float)dis_data/1.2;
    sd=temp;
OLED_ShowNum(0,6,sd,5,16);
}

实现图3所示检测效果的主程序为:
int main(void)
{
    SYSTEM_Initialize();
    KEY_SetDigitalOutput();
    KEY_SetHigh();
    LED_SetHigh();
    BH1750_Init();
    OLED_Init();
    OLED_Clear();
    OLED_ShowString(0,0,"PIC18F57Q43 TEST",16);
    OLED_ShowString(0,2,"OLED & BH1750",16);
    OLED_ShowString(0,4,"Sunlight=",16);
    OLED_ShowString(48,6,"lx",16);
    while(1)
    {
        Get_Sunlight_Value();
        LED0_Toggle();
        __delay_ms(500);
    }
}

3 检测效果
需指出的是:无不影响程序的下载,这里是以RA4RA5输出高电平来为OLED屏和BH1750通过电源支持。

使用特权

评论回复
沙发
wziyi| | 2022-7-16 20:45 | 只看该作者
不错

使用特权

评论回复
板凳
jinglixixi|  楼主 | 2022-7-17 07:54 | 只看该作者

感谢支持!!!

使用特权

评论回复
地板
王小双| | 2022-8-30 16:51 | 只看该作者
不错

使用特权

评论回复
5
jinglixixi|  楼主 | 2022-8-31 09:28 | 只看该作者

感谢支持!!!

使用特权

评论回复
6
benjaminka| | 2022-9-3 17:26 | 只看该作者
BH1750是需要校验吗   

使用特权

评论回复
7
jinglixixi|  楼主 | 2022-9-3 20:43 | 只看该作者
benjaminka 发表于 2022-9-3 17:26
BH1750是需要校验吗

是数字化传感器,无需校验。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

453

主题

2752

帖子

38

粉丝