更多信息请访问:与华为官方共建的鸿蒙技术社区https://harmonyos.51cto.com/#zz这是一篇迟来的文章。代码写了好几天了,因为太忙一直没来得及上传。开发板套件中有一块OLED屏扩展板和一块温湿度传感器扩展板。这次我们就用这两块扩展板来实现一个简单的数字温度计。最初的计划是做一个仪表盘,用指针指示温度和湿度,但由于OLED只有128*64,仪表盘不会很清晰,我们就直接在旁边用数字显示。虽然有点粗糙,但是只要学会了原理,我们也可以做出其他复杂的仪表盘。OLED屏是128*64的点阵,通讯接口是I2C0,从机地址是0x3C温湿度传感器AHT20,通讯接口也是I2C0,从机地址是0x38。熟悉I2C的朋友都知道I2C是多从模式。从机地址不同,我们可以挂在同一条总线上进行复用。这样的话,我们就可以同时使用这两块扩展板了。1、OLED驱动OLED驱动开发方法,参考徐思伟老师的代码https://gitee.com/hihopeorg/harmonyos-ssd1306此处不再赘述2、温湿度传感器AHT20的驱动,参考徐思维老师的代码https://gitee.com/hihopeorg/harmonyos-aht20此处不再赘述。3、画出刻度盘由于刻度盘是半圈,一般从9点开始,顺时针旋转,对应实际温度值,9点对应最小值,3点对应最大值,所以我们在画表盘的时候,最好把9点钟对应的角度设置为0,12点钟对应90度,3点钟对应180度。画一个刻度盘就是设置圆心(x,y)和半径r,然后计算圆周上的两点,调用画直线的函数连接两个相邻的点。/*绘制弧线。画半圆*start_anglegindegree*sweepindegree*x,y为圆心位置*radius为半径*start_angle起始角度9点为0角度*sweep扫描角度*从9点开始为0angle,along时针旋转*/voidssd1306_DrawArc_from9(uint8_tx,uint8_ty,uint8_tradius,uint16_tstart_angle,uint16_tsweep,SSD1306_COLORcolor){floatapprox_degree;uint32_tapprox_segments;uint8_txp1,xp2;uint8_typ1,yp2;uint32_tcount=0;uint32_tloc_sweep=0;floatrad;loc_sweep=ssd1306_NormalizeTo0_360(扫描);count=(ssd1306_NormalizeTo0_360(start_angle));approx_segments=loc_sweep;approx_degree=1;while(count
