BH1750环境光传感器的基于Arduino测试例程及简单滤波

2024-04-02 09:48

本文主要是介绍BH1750环境光传感器的基于Arduino测试例程及简单滤波,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

BH1750环境光传感器的基于Arduino测试例程及简单滤波

  • 运行的硬件环境
  • 变量声明和参数设置部分
  • I^2^C读写函数封装
  • 程序初始化部分
  • 程序循环执行部分
    • 简单的求平均数滤波
    • 简单的限幅滤波
    • 2次滤波后的效果
  • 备注

运行的硬件环境

刷过特定BOOTLOADER的[1]STM32F103CBT6, 除了对应链接VCC和GND外,
SCL连接PB6
SDA连接PB7.

变量声明和参数设置部分

变量声明部分有2个设置是可调的,
第1个是PIN_ADDR_STATUS宏定义,主要是设置IC的I2C地址,如果addr的pin脚拉低就设置为0,拉高就设置为1;
第2个是 resolution_mode变量,主要是把手册的6种工作(分辨率)模式做成选单样式,直接切换;
不怎么会写东西,直接上代码:

#include <Wire.h> //Arduino提供的硬件I2C的库函数/* --------opecode------------------ */
#define POWER_DOWN      0x00
#define POWER_ON        0x01
#define RESET           0x07#define CONTINUOUSLY_H_MODE1    0x10  //resolution_mode 0
#define CONTINUOUSLY_H_MODE2    0x11  //resolution_mode 1
#define CONTINUOUSLY_L_MODE1    0x13  //resolution_mode 2#define ONE_TIME_H_MODE1    0x20  //resolution_mode 3
#define ONE_TIME_H_MODE2    0x21  //resolution_mode 4
#define ONE_TIME_L_MODE1    0x23  //resolution_mode 5
/* -------------------------------- */#define READ_DATA_LEN    1
#define SIMPLE_AVG_NUM   10#define PIN_ADDR_STATUS   0 //0-> pull down; 1->pull upint resolution_mode = 5;  // select running modebyte i2c_addr = 0; //7-bit addr
float lux_data = 0.0f;float sum_lux_data = 0.0f;
float avg_lux_data = 0.0f;
int avg_count = 0;
byte first_data = 0;
float compare_lux_data = 0.0f;

I2C读写函数封装

这部分主要是依照Arduino提供的硬件I2C库函数,和datasheet上的读写示例,另外结合工作精度模式做切换:

uint8_t i2c_bh1750_write(uint8 reg)
{Wire.beginTransmission(i2c_addr);Wire.write(reg);Wire.endTransmission();delayMicroseconds(50);
}uint8_t i2c_bh1750_read(uint8 *get_data)
{uint8 reg = 0;int i;int len = 2;//工作精度模式切换部分switch (resolution_mode) {case 0:reg = CONTINUOUSLY_H_MODE1;break;case 1:reg = CONTINUOUSLY_H_MODE2;break;case 2:reg = CONTINUOUSLY_L_MODE1;break;case 3:reg =

这篇关于BH1750环境光传感器的基于Arduino测试例程及简单滤波的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/869647

相关文章

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

使用PyQt5编写一个简单的取色器

《使用PyQt5编写一个简单的取色器》:本文主要介绍PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16进制颜色编码,一款跟随鼠标刷新图像的RGB和16... 目录取色器1取色器2PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个