chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32+BH1750光敏傳感器獲取光照強(qiáng)度

DS小龍哥-嵌入式技術(shù) ? 來(lái)源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2022-03-25 09:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

?

一、環(huán)境介紹

MCU:STM32F103ZET6

光敏傳感器:BH1750數(shù)字傳感器(IIC接口)

開(kāi)發(fā)軟件:Keil5

代碼說(shuō)明:使用IIC模擬時(shí)序驅(qū)動(dòng),方便移植到其他平臺(tái),采集的光照度比較靈敏. 合成的光照度返回值范圍是 0~255。 0表示全黑 255表示很亮。

實(shí)測(cè): 手機(jī)閃光燈照著的狀態(tài)返回值是245左右,手捂著的狀態(tài)返回值是10左右.

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

二、BH1750介紹

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

三、核心代碼

BH1750說(shuō)明: ADDR引腳接地,地址就是0x46

完整工程代碼下載:https://download.csdn.net/download/xiaolong1126626497/18500653

3.1 iic.c

#include "iic.h"

/*
函數(shù)功能:IIC接口初始化
硬件連接:
SDA:PB7
SCL:PB6
*/
void IIC_Init(void)
{
	RCC->APB2ENR|=1<<3;//PB
	GPIOB->CRL&=0x00FFFFFF;
	GPIOB->CRL|=0x33000000;
	GPIOB->ODR|=0x3<<6;
}

/*
函數(shù)功能:IIC總線(xiàn)起始信號(hào)
*/
void IIC_Start(void)
{
		IIC_SDA_OUTMODE(); //初始化SDA為輸出模式
		IIC_SDA_OUT=1; 		 //數(shù)據(jù)線(xiàn)拉高
		IIC_SCL=1;     		 //時(shí)鐘線(xiàn)拉高
		DelayUs(4);        //電平保持時(shí)間
		IIC_SDA_OUT=0; 		 //數(shù)據(jù)線(xiàn)拉低
		DelayUs(4);        //電平保持時(shí)間
		IIC_SCL=0;     		 //時(shí)鐘線(xiàn)拉低
}


/*
函數(shù)功能:IIC總線(xiàn)停止信號(hào)
*/
void IIC_Stop(void)
{
		IIC_SDA_OUTMODE(); //初始化SDA為輸出模式
		IIC_SDA_OUT=0; 		 //數(shù)據(jù)線(xiàn)拉低
		IIC_SCL=0;     		 //時(shí)鐘線(xiàn)拉低
		DelayUs(4);        //電平保持時(shí)間
		IIC_SCL=1;     		 //時(shí)鐘線(xiàn)拉高
		DelayUs(4);        //電平保持時(shí)間
		IIC_SDA_OUT=1; 		 //數(shù)據(jù)線(xiàn)拉高
}

/*
函數(shù)功能:獲取應(yīng)答信號(hào)
返 回 值:1表示失敗,0表示成功
*/
u8 IIC_GetACK(void)
{
		u8 cnt=0;
		IIC_SDA_INPUTMODE();//初始化SDA為輸入模式
		IIC_SDA_OUT=1; 		  //數(shù)據(jù)線(xiàn)上拉
	  DelayUs(2);         //電平保持時(shí)間
		IIC_SCL=0;     		  //時(shí)鐘線(xiàn)拉低,告訴從機(jī),主機(jī)需要數(shù)據(jù)
		DelayUs(2);         //電平保持時(shí)間,等待從機(jī)發(fā)送數(shù)據(jù)
	  IIC_SCL=1;     		  //時(shí)鐘線(xiàn)拉高,告訴從機(jī),主機(jī)現(xiàn)在開(kāi)始讀取數(shù)據(jù)
		while(IIC_SDA_IN)   //等待從機(jī)應(yīng)答信號(hào)
		{
				cnt++;
				if(cnt>250)return 1;
		}
		IIC_SCL=0;     		  //時(shí)鐘線(xiàn)拉低,告訴從機(jī),主機(jī)需要數(shù)據(jù)
		return 0;
}

/*
函數(shù)功能:主機(jī)向從機(jī)發(fā)送應(yīng)答信號(hào)
函數(shù)形參:0表示應(yīng)答,1表示非應(yīng)答
*/
void IIC_SendACK(u8 stat)
{
		IIC_SDA_OUTMODE(); //初始化SDA為輸出模式
		IIC_SCL=0;     		 //時(shí)鐘線(xiàn)拉低,告訴從機(jī),主機(jī)需要發(fā)送數(shù)據(jù)
		if(stat)IIC_SDA_OUT=1; //數(shù)據(jù)線(xiàn)拉高,發(fā)送非應(yīng)答信號(hào)
		else IIC_SDA_OUT=0; 	 //數(shù)據(jù)線(xiàn)拉低,發(fā)送應(yīng)答信號(hào)
		DelayUs(2);            //電平保持時(shí)間,等待時(shí)鐘線(xiàn)穩(wěn)定
		IIC_SCL=1;     		     //時(shí)鐘線(xiàn)拉高,告訴從機(jī),主機(jī)數(shù)據(jù)發(fā)送完畢
		DelayUs(2);            //電平保持時(shí)間,等待從機(jī)接收數(shù)據(jù)
		IIC_SCL=0;     		  	 //時(shí)鐘線(xiàn)拉低,告訴從機(jī),主機(jī)需要數(shù)據(jù)
}


/*
函數(shù)功能:IIC發(fā)送1個(gè)字節(jié)數(shù)據(jù)
函數(shù)形參:將要發(fā)送的數(shù)據(jù)
*/
void IIC_WriteOneByteData(u8 data)
{
		u8 i;
		IIC_SDA_OUTMODE(); //初始化SDA為輸出模式
		IIC_SCL=0;     		 //時(shí)鐘線(xiàn)拉低,告訴從機(jī),主機(jī)需要發(fā)送數(shù)據(jù)
		for(i=0;i<8;i++)
		{
				if(data&0x80)IIC_SDA_OUT=1; //數(shù)據(jù)線(xiàn)拉高,發(fā)送1
				else IIC_SDA_OUT=0; 	 //數(shù)據(jù)線(xiàn)拉低,發(fā)送0
				IIC_SCL=1;     		     //時(shí)鐘線(xiàn)拉高,告訴從機(jī),主機(jī)數(shù)據(jù)發(fā)送完畢
				DelayUs(2);            //電平保持時(shí)間,等待從機(jī)接收數(shù)據(jù)
				IIC_SCL=0;     		 		 //時(shí)鐘線(xiàn)拉低,告訴從機(jī),主機(jī)需要發(fā)送數(shù)據(jù)
				DelayUs(2);            //電平保持時(shí)間,等待時(shí)鐘線(xiàn)穩(wěn)定
				data<<=1;              //先發(fā)高位
		}
}


/*
函數(shù)功能:IIC接收1個(gè)字節(jié)數(shù)據(jù)
返 回 值:收到的數(shù)據(jù)
*/
u8 IIC_ReadOneByteData(void)
{
		u8 i,data;
		IIC_SDA_INPUTMODE();//初始化SDA為輸入模式
	  for(i=0;i<8;i++)
	  {
			 	IIC_SCL=0;     		  //時(shí)鐘線(xiàn)拉低,告訴從機(jī),主機(jī)需要數(shù)據(jù)
				DelayUs(2);         //電平保持時(shí)間,等待從機(jī)發(fā)送數(shù)據(jù)
				IIC_SCL=1;     		  //時(shí)鐘線(xiàn)拉高,告訴從機(jī),主機(jī)現(xiàn)在正在讀取數(shù)據(jù)
				data<<=1;           
				if(IIC_SDA_IN)data|=0x01;
				DelayUs(2);         //電平保持時(shí)間,等待時(shí)鐘線(xiàn)穩(wěn)定
	  }
		IIC_SCL=0;     		  		//時(shí)鐘線(xiàn)拉低,告訴從機(jī),主機(jī)需要數(shù)據(jù) (必須拉低,否則將會(huì)識(shí)別為停止信號(hào))
		return data;
}


poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

3.2 iic.h

#ifndef _IIC_H
#define _IIC_H
#include "stm32f10x.h"
#include "sys.h"
#include "delay.h"
#define IIC_SDA_OUTMODE() {GPIOB->CRL&=0x0FFFFFFF;GPIOB->CRL|=0x30000000;}
#define IIC_SDA_INPUTMODE() {GPIOB->CRL&=0x0FFFFFFF;GPIOB->CRL|=0x80000000;}
#define IIC_SDA_OUT PBout(7)  //數(shù)據(jù)線(xiàn)輸出
#define IIC_SDA_IN PBin(7)  //數(shù)據(jù)線(xiàn)輸入
#define IIC_SCL PBout(6)  //時(shí)鐘線(xiàn)

void IIC_Init(void);
void IIC_Start(void);
void IIC_Stop(void);
u8 IIC_GetACK(void);
void IIC_SendACK(u8 stat);
void IIC_WriteOneByteData(u8 data);
u8 IIC_ReadOneByteData(void);
#endif

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

3.3 BH1750.h

#ifndef _BH1750_H
#define _BH1750_H
#include "delay.h"
#include "iic.h"
#include "usart.h"
u8 Read_BH1750_Data(void);
#endif
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

3.4 BH1750.c

#include "bh1750.h"
u8 Read_BH1750_Data()
{
    unsigned char t0;
    unsigned char t1;
    unsigned char t;
    u8 r_s=0;
    IIC_Start(); //發(fā)送起始信號(hào)
    IIC_WriteOneByteData(0x46);
    r_s=IIC_GetACK();//獲取應(yīng)答
    if(r_s)printf("error:1\r\n");
    IIC_WriteOneByteData(0x01);
    r_s=IIC_GetACK();//獲取應(yīng)答
     if(r_s)printf("error:2\r\n");
    IIC_Stop(); //停止信號(hào) 
    
    IIC_Start(); //發(fā)送起始信號(hào)
    IIC_WriteOneByteData(0x46);
    r_s=IIC_GetACK();//獲取應(yīng)答
    if(r_s)printf("error:3\r\n");
    IIC_WriteOneByteData(0x01);
    r_s=IIC_GetACK();//獲取應(yīng)答
    if(r_s)printf("error:4\r\n");
    IIC_Stop(); //停止信號(hào) 
    
    IIC_Start(); //發(fā)送起始信號(hào)
    IIC_WriteOneByteData(0x46);
    r_s=IIC_GetACK();//獲取應(yīng)答
    if(r_s)printf("error:5\r\n");
    IIC_WriteOneByteData(0x10);
    r_s=IIC_GetACK();//獲取應(yīng)答
    if(r_s)printf("error:6\r\n");
    IIC_Stop(); //停止信號(hào) 
    
    DelayMs(300); //等待
    
    IIC_Start(); //發(fā)送起始信號(hào)
    IIC_WriteOneByteData(0x47);
    r_s=IIC_GetACK();//獲取應(yīng)答
    if(r_s)printf("error:7\r\n");
    
    t0=IIC_ReadOneByteData(); //接收數(shù)據(jù)
    IIC_SendACK(0); //發(fā)送應(yīng)答信號(hào)
    t1=IIC_ReadOneByteData(); //接收數(shù)據(jù)
    IIC_SendACK(1); //發(fā)送非應(yīng)答信號(hào)
    IIC_Stop(); //停止信號(hào)
    
     t=(((t0<<8)|t1)/1.2);
     return t;  
}

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

3.5 main.c

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "usart.h"
#include "at24c02.h"
#include "bh1750.h"

int main()
{
	u8 val;
	LED_Init();
	BEEP_Init();
	KeyInit();
  USARTx_Init(USART1,72,115200);
  IIC_Init();
  
	while(1)
	{
		val=KeyScan();
		if(val)
		{
            val=Read_BH1750_Data();
            printf("光照強(qiáng)度=%d\r\n",val);
//			 BEEP=!BEEP;
			 LED0=!LED0;
			 LED1=!LED1;
		}
	}
}

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

3.6 運(yùn)行效果圖

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png審核編輯:符乾江
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2573

    文章

    53900

    瀏覽量

    780922
  • STM32
    +關(guān)注

    關(guān)注

    2301

    文章

    11081

    瀏覽量

    369759
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    【RA-Eco-RA6M4開(kāi)發(fā)板評(píng)測(cè)】用I2C實(shí)現(xiàn)光照強(qiáng)度的檢測(cè)和顯示

    這個(gè)項(xiàng)目我們利用瑞薩的RA6M4的I2C控制功能實(shí)現(xiàn)光照傳感器BH1750光照測(cè)試,并進(jìn)行屏幕顯示。 為了方便進(jìn)行光照強(qiáng)度的檢測(cè),所有的引
    發(fā)表于 08-26 22:05

    數(shù)字16位串行輸出型環(huán)境光傳感器IC BH1750FVI數(shù)據(jù)手冊(cè)

    BH1750FVI數(shù)據(jù)手冊(cè)
    發(fā)表于 08-09 16:04 ?0次下載

    【沁恒CH585開(kāi)發(fā)板免費(fèi)試用體驗(yàn)】+光照傳感器及其檢測(cè)

    光照傳感器在對(duì)環(huán)境的光線(xiàn)情況的檢測(cè)中起著重要的作用,這里所采用的是數(shù)字式光照傳感器BH1750,它具有集成度高和檢測(cè)精度高的特點(diǎn)。 該
    發(fā)表于 07-06 00:08

    DLP NIRScan Nano光照強(qiáng)度如何計(jì)算?

    獲取到了Nano的掃描數(shù)據(jù),在對(duì)數(shù)據(jù)進(jìn)行解析的時(shí)候遇到了一個(gè)問(wèn)題,我搞不明白光照強(qiáng)度是如何得出來(lái)的,我在例程庫(kù)里邊找到了代碼,我沒(méi)看懂,還有就是按照代碼計(jì)算出來(lái)的光強(qiáng)是不正確的,請(qǐng)教各位工程師給予指點(diǎn)。
    發(fā)表于 02-28 07:30

    壁掛光照傳感器技術(shù)規(guī)格與安裝指南

    在智能家居和智能環(huán)境監(jiān)測(cè)系統(tǒng)中,壁掛光照傳感器扮演著重要的角色。它能夠?qū)崟r(shí)監(jiān)測(cè)環(huán)境中的光照強(qiáng)度,為智能照明系統(tǒng)、環(huán)境研究等提供關(guān)鍵數(shù)據(jù)支持。本文將詳細(xì)介紹壁掛光照
    的頭像 發(fā)表于 02-19 14:08 ?756次閱讀
    壁掛<b class='flag-5'>光照</b><b class='flag-5'>傳感器</b>技術(shù)規(guī)格與安裝指南

    光照傳感器的工作原理與應(yīng)用場(chǎng)景

    發(fā)展的重要力量。本文將深入探討光照傳感器的工作原理、作用以及其在多個(gè)領(lǐng)域的應(yīng)用。 光照傳感器的工作原理 光照
    的頭像 發(fā)表于 02-06 09:47 ?1301次閱讀

    基于物聯(lián)網(wǎng)技術(shù)設(shè)計(jì)的陳列館監(jiān)控系統(tǒng)

    該項(xiàng)目構(gòu)建一個(gè)功能全面、實(shí)時(shí)監(jiān)控的陳列館智能監(jiān)控系統(tǒng)。通過(guò)引入高精度的溫濕度傳感器(SHT30)、光照強(qiáng)度檢測(cè)模(BH1750)、煙霧和火焰傳感器(MQ2和火焰
    的頭像 發(fā)表于 01-15 09:29 ?1751次閱讀
    基于物聯(lián)網(wǎng)技術(shù)設(shè)計(jì)的陳列館監(jiān)控系統(tǒng)

    光敏電阻與其他傳感器的聯(lián)合應(yīng)用

    光敏電阻作為一種能夠根據(jù)光照強(qiáng)度變化而改變電阻值的傳感器,在與其他傳感器聯(lián)合應(yīng)用時(shí),能夠拓展出更多元化的應(yīng)用場(chǎng)景和功能。以下是對(duì)光敏電阻與其
    的頭像 發(fā)表于 01-13 09:39 ?1317次閱讀

    光敏電阻在環(huán)境監(jiān)測(cè)中的應(yīng)用

    阻值依賴(lài)于入射光強(qiáng)的變化。當(dāng)入射光強(qiáng)增加時(shí),光敏電阻的阻值減??;反之,入射光減弱時(shí),光敏電阻的阻值增大。這種變化使得光敏電阻能夠作為光照強(qiáng)度傳感器
    的頭像 發(fā)表于 01-13 09:31 ?1428次閱讀

    光敏電阻和電壓傳感器的區(qū)別

    1. 引言 在現(xiàn)代電子技術(shù)中,傳感器扮演著至關(guān)重要的角色。它們能夠?qū)⑽锢砹哭D(zhuǎn)換為電信號(hào),從而實(shí)現(xiàn)對(duì)環(huán)境的監(jiān)測(cè)和控制。光敏電阻和電壓傳感器是兩種常見(jiàn)的傳感器,它們各自在不同的應(yīng)用場(chǎng)景中發(fā)
    的頭像 發(fā)表于 01-13 09:19 ?1005次閱讀

    光敏電阻與光電傳感器的區(qū)別

    在現(xiàn)代電子技術(shù)中,光傳感器是一類(lèi)非常重要的傳感器,它們能夠?qū)⒐庑盘?hào)轉(zhuǎn)換為電信號(hào),從而實(shí)現(xiàn)對(duì)光強(qiáng)度的檢測(cè)和控制。光敏電阻和光電傳感器是兩種常見(jiàn)
    的頭像 發(fā)表于 01-13 09:11 ?1739次閱讀

    如何選擇合適的光敏電阻

    光敏電阻是一種光電傳感器,其電阻值會(huì)隨著光照強(qiáng)度的變化而變化。它們廣泛應(yīng)用于自動(dòng)控制、光強(qiáng)度測(cè)量、光通信等領(lǐng)域。選擇合適的光敏電阻對(duì)于確保系
    的頭像 發(fā)表于 01-10 18:11 ?1852次閱讀

    【CW32模塊使用】BH1750光照強(qiáng)度傳感器

    采用ROHM原裝BH1750FVI芯片供電電源:3-5V,光照度范圍:0-65535lx傳感器內(nèi)置16bitAD轉(zhuǎn)換,直接數(shù)字輸出,省略復(fù)雜的計(jì)算,省略標(biāo)定,不區(qū)分環(huán)境光源接近于視覺(jué)
    的頭像 發(fā)表于 12-30 11:17 ?1252次閱讀
    【CW32模塊使用】<b class='flag-5'>BH1750</b><b class='flag-5'>光照強(qiáng)度</b><b class='flag-5'>傳感器</b>

    【RA-Eco-RA4E2-64PIN-V1.0開(kāi)發(fā)板試用】04、I2C驅(qū)動(dòng)BH1750光照傳感器并在串口打印輸出

    0 前言 本次實(shí)驗(yàn)將使用板子上的I2C功能。瑞薩R7FA4E2B93CFM支持I3C和I2C,手頭沒(méi)有I3C的設(shè)備,但正好有一個(gè)I2C協(xié)議的光照傳感器模塊,型號(hào)為BH1750。 1 硬件部分 從
    發(fā)表于 12-16 16:17

    外設(shè)移植 Ai-WB2+BH1750 光照強(qiáng)度傳感器

    以下作品由安信可社區(qū)用戶(hù) WangChong制作 外設(shè)介紹 BH1750是一種基于光電二極管的數(shù)字光強(qiáng)傳感器,能夠測(cè)量環(huán)境中的光照強(qiáng)度,并將其轉(zhuǎn)換為數(shù)字信號(hào)。它采用 I2C 接口進(jìn)行通信,適合
    的頭像 發(fā)表于 12-05 14:32 ?1168次閱讀
    外設(shè)移植 Ai-WB2+<b class='flag-5'>BH1750</b> <b class='flag-5'>光照強(qiáng)度</b><b class='flag-5'>傳感器</b>