找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1703|回复: 2
打印 上一主题 下一主题
收起左侧

arduino实现语音播报当前oled上的光照强度

[复制链接]
跳转到指定楼层
楼主
ID:655886 发表于 2019-12-4 13:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include <Wire.h> //IIC
  2. #include <math.h>
  3. #include <U8glib.h>
  4. #include <SoftwareSerial.h>
  5. #include <JQ6500_Serial.h>
  6. JQ6500_Serial mp3(8, 9);
  7. U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);
  8. int BH1750address = 0x23;
  9. byte buff[2];
  10. char str[10];
  11. int led = 7;
  12. void setup()
  13. {
  14.   Wire.begin();
  15.   Serial.begin(9600);
  16.   pinMode(led, OUTPUT);
  17.   mp3.begin(9600);
  18.   mp3.reset();
  19.   mp3.setVolume(30);
  20.   mp3.setLoopMode(MP3_LOOP_NONE);
  21. }

  22. void loop()
  23. {
  24.   int i,vsl;
  25.   uint16_t val = 0;
  26.   BH1750_Init(BH1750address);
  27.   delay(200);
  28.   if (2 == BH1750_Read(BH1750address))
  29.   {
  30.     val = ((buff[0] << 8) | buff[1]) / 1.2;

  31.      vsl = 250 - val;

  32. //    Serial.println(vsl);
  33. //    Serial.println("[lx]");
  34.   }
  35.   int m = val;
  36.   float bw = m / 100;
  37.   float sw = m / 10 % 10;
  38.   float gw = m % 10;



  39.   u8g.setFont(u8g_font_ncenB18);
  40.   u8g.firstPage();  //OLED左上角为0,0 ;字符定位为 左下角  firstPage标志图像循环开始
  41.   do {


  42.     u8g.drawStr( 0, 50, dtostrf(val, 5, 2, str)); //左上角


  43.   }
  44.   while ( u8g.nextPage() ); //nextPage标志图像循环结束
  45.   delay(150);
  46.    mp3.playFileByIndexNumber(11);
  47.    delay(3000);
  48.   if ( bw != 0 )
  49.   {
  50.     mp3.playFileByIndexNumber(bw + 1);
  51.     delay(400);
  52.   }
  53.   int pp=!(bw == 0.0 && sw == 0.0);
  54.   Serial.println(pp);
  55.   if ( !(bw == 0 && sw == 0) )
  56.   {
  57.     mp3.playFileByIndexNumber(sw + 1);
  58.      delay(400);
  59.   }
  60.   //if (mp3.getStatus() != MP3_STATUS_PLAYING  )
  61.   //{
  62.   mp3.playFileByIndexNumber(gw + 1);
  63.    delay(400);
  64.   // }
  65.    if (vsl > 150)
  66.     {
  67.       mp3.playFileByIndexNumber(12);
  68.       delay(3000);
  69.       digitalWrite(led, 1);
  70.       delay(10);
  71.     }
  72.     else {
  73.       digitalWrite(led, 0);
  74.     }
  75.     delay(5000);
  76. }

  77. int BH1750_Read(int address) //
  78. {
  79.   int i = 0;
  80.   Wire.beginTransmission(address);
  81.   Wire.requestFrom(address, 2);
  82.   while (Wire.available()) //
  83.   {
  84.     buff[i] = Wire.read();  //接收字节
  85.     i++;
  86.   }
  87.   Wire.endTransmission();
  88.   return i;
  89. }

  90. void BH1750_Init(int address)
  91. {
  92.   Wire.beginTransmission(address);
  93.   Wire.write(0x10);//1lx reolution 120ms
  94.   Wire.endTransmission();
  95. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2019-12-4 15:11 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

板凳
ID:669196 发表于 2019-12-20 15:04 | 只看该作者
请问1lx reolution 120ms是什么意思呀
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表