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

相关文章

性能测试介绍

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

字节面试 | 如何测试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)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

Open3D 基于法线的双边滤波

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 输入参数: 输出参数: 参数影响: 2.2完整代码 三、实现效果 3.1原始点云 3.2滤波后点云 Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客 一、概述         基于法线的双边

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu