找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2987|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

使用單片機+bh1750FVI光強傳感控制燈的開關(guān)程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:523178 發(fā)表于 2020-5-4 18:03 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
給GY-30數(shù)字光強測量傳感器寫了一個驅(qū)動,根據(jù)IIC通信協(xié)議和GY-30的數(shù)據(jù)手冊編寫,期間一個問題纏繞我許久:每次接收完數(shù)據(jù)時,主機向從機發(fā)送一個ACK,很必要,要不然測出的數(shù)據(jù)不準(zhǔn)確。我把測出的數(shù)據(jù)顯示在了LCD1602上,并且可以根據(jù)光強值來控制燈的開關(guān)。后續(xù)我會推出控制燈的亮度的設(shè)計。數(shù)據(jù)手冊和代碼獻上。


單片機源程序如下:
  1. #include "lcd.h"
  2. #include "BH1750FVI.h"

  3. uchar brach[] = {"Lighty Intensity"};
  4. uchar str[] = {"Lx"};
  5. uint dat;
  6. float Light_intensity = 0.0f;
  7. uchar Wr, Qr, Br, Sr, Gr;       //光強值的萬位,千位,百位,十位,個位
  8. //uchar respond =0;                                //IIC調(diào)試用

  9. sbit Light = P2^2;

  10. void delay_ms(unsigned int k)
  11. {
  12.         unsigned int i, j;
  13.         for(i = 0; i < k; i++)
  14.         {
  15.                  for(j = 0; j < 121; j++);
  16.         }
  17. }

  18. void Sys_Init(void)
  19. {
  20.         Light = 1;
  21.         LcdInit();
  22.         BH1750_Init();
  23. }

  24. void Set_BH1750(void)
  25. {
  26.         WriteData_to_BH1750(0x01);
  27. //        respond = c;
  28.         WriteData_to_BH1750(0x10);  //設(shè)置為高分辨率模式
  29. //        respond        += 0x30;
  30.         delay_ms(180);
  31. }
  32. void datapros(uint Light_intensity)
  33. {
  34.         Wr = Light_intensity / 10000;
  35.         Wr = Wr + 0x30;
  36.         Qr = Light_intensity % 10000 / 1000;
  37.         Qr = Qr + 0x30;
  38.         Br = Light_intensity % 1000 / 100;
  39.         Br = Br + 0x30;
  40.         Sr = Light_intensity % 100 / 10;
  41.         Sr = Sr + 0x30;
  42.         Gr = Light_intensity % 10;
  43.         Gr = Gr + 0x30;       
  44. }
  45. void main(void)
  46. {
  47.         Sys_Init();
  48.         while(1)
  49.         {
  50.                  LcdShowStr(0,0,brach);
  51.                 Set_BH1750();
  52. //                DisplayOneChar(12,1,respond);   IIC調(diào)試用
  53.                 RecvData_f_BH1750();          //連續(xù)讀數(shù)據(jù)
  54.                 dat = buff[0];
  55.                 dat = (dat << 8) | buff[1];

  56.                 Light_intensity = (float)dat / 1.2;
  57.                 datapros(Light_intensity);    //數(shù)據(jù)處理
  58.                 DisplayOneChar(3,1,Wr);
  59.                 DisplayOneChar(4,1,Qr);
  60.                 DisplayOneChar(5,1,Br);
  61.                 DisplayOneChar(6,1,Sr);
  62.                 DisplayOneChar(7,1,Gr);

  63.                 LcdShowStr(9,1,str);

  64.                 if(Light_intensity <= 20)
  65.                         Light = 0;
  66.                 else
  67.                         Light = 1;
  68.         }
  69. }
復(fù)制代碼

所有資料51hei提供下載:
數(shù)字光強測量計.rar (40.75 KB, 下載次數(shù): 28)
bh1750FVI-中文數(shù)據(jù)手冊.pdf (1.5 MB, 下載次數(shù): 14)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:523178 發(fā)表于 2020-5-10 20:24 | 只看該作者
實際測試中出現(xiàn)了失誤,最大值只測到54612lx,究其原因是換算公式中:Lighty_intensity = (float)dat / 1.2;
回復(fù)

使用道具 舉報

板凳
ID:523178 發(fā)表于 2020-5-10 20:25 | 只看該作者
將1.2 改為1.0即可
回復(fù)

使用道具 舉報

地板
ID:523178 發(fā)表于 2020-5-10 20:26 | 只看該作者
實際測試中出現(xiàn)了錯誤,最大值為65535,但只能測到54612lx,究其原因是換算公式有問題:Lighty_intensity = (float)dat / 1.2; 將1.2改為1.0或者刪除即可。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表