摘要:光照传感器在生活中应用很广泛,比如根据光线自动控制路灯的开关、自动窗帘根据光线进行调整、根据光线调节屏幕背光等等;光照强度的测量我们可以选用光敏电阻、光敏二极管或者类似本文这样的数字光照传感器。
GY-302 数字光照传感器光照模块驱动
光照传感器在生活中应用很广泛,比如根据光线自动控制路灯的开关、自动窗帘根据光线进行调整、根据光线调节屏幕背光等等;光照强度的测量我们可以选用光敏电阻、光敏二极管或者类似本文这样的数字光照传感器。
下图中所示即为GY-302(BH1750FVI )光照传感器,他们除了封装不一样以外,驱动方法是一样的。
采用ROHM原装BH1750FVI芯片
供电电源:3-5V
传感器内置16bitAD转换器,光照度范围:0-65535 Lx
结果直接数字输出,省略繁杂的计算,省略标定
标准NXP IIC通信协议
模块内部包含通信电平转换,与5V单片机IO直接连接
不区分环境光源,接近于视觉灵敏度的分光特性,可对广泛的亮度进行1勒克斯的高精度测定
光源在单位时间、向周围空间辐射并引起视觉的能量,称为光通量。用Φ表示,单位为流明(Lm)。单位面积上接受的光通量称为照度,用E表示,单位勒克司(Lx) 。E=Φ/S ,其中Φ-光通量(Lm), S-受照面积(㎡) 。1勒克司=1流明的光通量均匀分布在1平方米面积上的照度。
因为我们选用的是模拟IIC的方式与GY-302模块通信,所以我们随意选择两个GPIO即可。
ADDR引脚为地址选择引脚,当ADDR引脚接地时,即R35电阻未焊接、R36选择10K电阻,此时地址为0x46(0b0100 0110);当ADDR引脚通过R35的10K电阻上拉至3.3V,R36未焊接时,地址为0xB8(0b1011 1000)。
本文实例中,我们选择ADDR接地。
对于I2C总线驱动的模块,都要实现I2C的起始信号、停止信号、发送应答三个函数。
起始信号
停止信号
发送应答……
查看原文:
前言
在C语言编程中,函数返回值为0表示成功,这是一种约定,但背后却有着令人好奇的原因。本文将揭示这个神秘约定背后的故事,让你了解为何“零”成为成功的魔数。
C语言的奇妙约定
C语言中,函数返回值为0表示成功,而非零值表示失败。这一约定似乎已经深入人心,但却鲜有人去探究其背后的原因。
简化编程,提高可读性
这种约定并非偶然,而是源自对编程的简化和可读性的追求。通过统一的返回值约定,可以使程序员更容易地理解代码的含义,快速判断函数调用的结果。
这种约定的初衷是为了简化程序员的编程,使得代码更易于理解和维护。通过统一的返回值约定,可以让程序员更容易地判断函数调用的结果,并采取相应的处理措施。
Unix操作系统的设计哲学
Unix操作系统强调简洁、灵活和可组合的设计理念。在Unix中,系统调用通常会返回0表示成功,而其他非零值则用来表示不同的错误码。这种设计也影响了C语言中函数返回值的约定。
奇妙背后的哲学
将函数返回值为0表示成功的约定,不仅提高了代码的可读性,还使得代码更易于维护和调试。这种约定已经成为了C语言编程的传统,得到了广泛的应用和认可。
为何选择“零”作为成功的标志?它代表着一种完整、顺利的状态,与程序中的成功操作相得益彰。这一约定已经成为了C语言编程的一部分,深受程序员的喜爱和认可。
总结
解密C语言编程中的奇妙约定,我们发现其背后蕴含着简化编程、提高可读性的哲学。这一约定在C语言编程中扮演着重要的角色,成为了程序员共同的语言。希望本文能够引发你对C语言编程约定的思考,并帮助你更好地理解其背后的原因。
查看原文:
大家好,我是程序小羊。好久不见呀,近段时间在忙于工作的事情很久没更新了。最近我在学习TI的芯片,使用TI的芯片搭建一个电机控制平台,由于使用的驱动是DRV8323,这个驱动芯片需要用到SPI进行放大倍数等的配置,所以我觉得还是有必要进行记录一波的。
首先是SPI的原理:由于SPI有四种模式(如下文字所示,这里图片就放一种进行说明)
SPI其实很简单,百度一下随随便便就有很多讲解这里就不过多进行解释了。我们来看看我们的这篇文章的主角——DRV8323。
DRV8323分两种。一种通过硬件电阻电容配置放大倍数等(DRV8323RH)。一种通过软件SPI通信配置放大倍数等((DRV8323RS)内部带SPI模块)。
硬件放大配置如下所示:
软件所示:
根据数据手册我们可以知道:
Fault Status Register 1故障状态寄存器1 (address = 0x00):
Fault Status Register 2 故障状态寄存器2 (address =0x01)
Driver Control Register 驱动控制寄存器(地址=0x02)……
查看原文:
实现功能
模块0x0002通过PC端的串口助手发送数据包“FE 06 A0 A1 01 00 01 00 FF”,点亮最小系统板上的LED指示灯;
01 01 FF”,熄灭最小系统板上的LED指示灯;
按最小系统板上的白色按键,实现通过0x0001模块点亮0x0002模块上的红灯亮5S。
原理图
最小系统板底板与ZigBee模块连接原理图
ZigBee模块底板连接原理图
此底板与ZigBee模块连接之后,只需要一根Micro USB线即可实现对ZigBee模块的各种功能调试,此底板相当于一个USB转TTL线的作用,底板上的主芯片为CH340C。
测试网络是否正常
通过与地址0x0002模块相连的COM14发送测试数据,
例如发送:
FE 05 91 20 00 00 32 FF
或者:
FE 05 91 20 02 00 32 FF
让自己模块上的红色LED点亮5秒。
==>证明硬件连接没有问题。
然后测试网络是否正常,发送测试数据:
FE 05 91 20 01 00 32 FF
此指令将使地址0x0001的模块亮5S。
==>证明网络是正常的。
PC 串口助手发送数据
如下图所示,发送如下数据包:
FE 06 A0 A1 01 00 01 00 FF
地址0x0002的模块收到数据包之后,会将数据发送至目标地址0x0001模块,STM32最小系统板接收地址0x0001模块收到的数据,进而对收到的数据进行解析,然后点亮最小系统板上的绿色LED。
要想实现对数据包的解析,要完成如下几部分工作:
正确接收完整数据包
可以采用空闲中断接收
采用定时器的方式,保证接收数据的完整
对数据包进行解析
根据DL-LN33模块协议及自定义协议,综合解析数据包内容。
此Demo可用于模拟根据需要自动触发某个动作或者自动上传传感器数据至其他模块。
自定义通讯协议说明
数据位中第一位01代表绿色指示灯:
数据位中第二位代表输出电平:
0x00代表输出低电平
0x01代表输出高电平
通讯协议自己可以根据需要随意定义,只要能保证数据传输的准确性、解析数据包后的结果唯一性即可,因为本例只是实现点灯功能,所以通讯协议设定的比较简单。
按键触发数据传输
按键按下将发送如下数据包:
FE 05 91 20 02 00 32 FF
点击核心板上的按键,上面数据将通过地址0x0001的模块传输出去,地址0x0002的模块收到数据之后,模块上的红灯亮5S。
这里注意封装的函数……
查看原文:
来源:我就是科技家