昨晚调好了OLED显示,今天继续操作I2C总线,把BH1705光照度传感器和BMP180气压传感器的数据采集完成。
BH1705的操作很简单,在mbed上有很多库,但是依然还是需要自己修改,主要还是管脚和地址。完成这两步,实际操作就是两条命令,一条初始化,一条读取信息。BH1705的数据从1-65535,其中可以有几位小数,128*64的oled按我的界面显示刚好可以显示一位小数。
BMP180和BMP085完全兼容,因而可以直接使用bmp085的驱动程序进行驱动。BMP180的数据读取很简单,但是计算部分很繁琐,当然这些计算公式在datasheet中都能找到。但是还是不建议自己写,因为各个数据的类型都有区别,自己写免不了不小心出错。BMP180还能输出温度数据,可以根据温度数据对气压数据进行修正,但是对比了我手机的气压计和传感器的值,相差很小,就没再进行修正。
数据采集到的都是数值,如果只是串口发送,可以不进行处理,但是如果是要进行显示,就必须进行处理,分解出每一位,基本方法就是取余。数值的显示还涉及到高位消0,正常显示中高位的0都是不应该显示的。我采用了比较笨的办法,一位位比较修改。程序如下,如果谁有更好的高位消0程序,希望能够分享一下。
DIS[0]=temp_data/100000+0x30 ; temp_data=temp_data%100000; //取余运算
if(DIS[0]==0x30) DIS[0]=32;
DIS[1]=temp_data/10000+0x30 ;
temp_data=temp_data%10000; //取余运算
if(DIS[0]==32&&DIS[1]==0x30) DIS[1]=32;
DIS[2]=temp_data/1000+0x30 ;
temp_data=temp_data%1000; //取余运算
if(DIS[1]==32&&DIS[2]==0x30) DIS[2]=32;
DIS[3]=temp_data/100+0x30 ;
temp_data=temp_data%100; //取余运算
if(DIS[2]==32&&DIS[3]==0x30) DIS[3]=32;
DIS[4]=temp_data/10+0x30 ;
temp_data=temp_data%10; //取余运算
DIS[6]=temp_data+0x30;
完成这些之后的显示如下图:
照例,分享mbed的源程序
Nucleo_MONITOR.zip
(9.95 KB)
|