这是一份迟来的文章,代码写好几天了,由于太忙,一直没来得及上传。
在开发板套件中,有一个 OLED 屏幕扩展板,温湿度传感器扩展板,本次我们就用这两个扩展板来实现一个简易数字温度计。
初步的打算是做一个仪表盘,用指针指示温度和湿度,但是由于 OLED 只有 128*64,因此仪表盘不会很清晰,我们在旁边再用数字直接显示一下。
虽然简陋一点,但是只要原理学会了,其他复杂的仪表盘我们同样可以做出来。![2e1bb3726f5de547763cd458c2a81d78.png](https://img-blog.csdnimg.cn/img_convert/2e1bb3726f5de547763cd458c2a81d78.png)
OLED 屏幕为 128*64 的点阵,通信接口为 I2C0,从机地址为 0x3C。
温湿度传感器 AHT20,通信接口也是 I2C0,从机地址为 0x38。
熟悉 I2C 的朋友都知道,I2C 是多从机模式,只要从机地址不同,我们可以挂在同一个总线下,进行复用。
既然如此,那我们就可以同时使用这两个扩展板。
01
OLED 驱动
OLED 驱动开发方法,参考许思维老师的代码:(此处不再赘述)https://gitee.com/hihopeorg/harmonyos-ssd1306
02
温湿度传感器 AHT20 驱动
参考许思维老师的代码:https://gitee.com/hihopeorg/harmonyos-aht20
03
画表盘
由于表盘是半个圆,而且一般是从 9 点钟方向开始,顺指针旋转,与实际的温度值相对应,9 点钟对应最小值,3 点钟对应最大值。
因此我们画表盘的时候最好从 9 点钟对应的角度为 0, 12 点钟对应的角度 90 度,3 点钟对应的角度为 180 度。
画表盘就是设置好圆心(x,y)和半径 r,然后计算圆周上的两个点,将相邻的两个点调用画直线函数连接起来。/*DrawArc.画一个半圆
* start_angle in degree
* sweep in degree
* x,y是圆心的位置
* radius是半径
* start_angle 起始角度,9点钟作为0角度
* sweep 扫描角度
* 从9点钟开始作为0角度,顺时针旋转
*/
void ssd1306_DrawArc_from9(uint8_t x, uint8