赞
踩
说明:这里采用使用IO模拟的方式来实现I2C
/*SGP30传感器初始化函数*/ void SGP30_Init(void) { Start_I2c(); //启动I2C总线 SendByte(SGP30WAddr); //发送SGP30传感器写地址 SendByte(0x20); //发送命令(0x2003|SGP30_IAQ_init) SendByte(0x03); Stop_I2c(); //停止I2C总线 } /*SGP30传感器读取数据函数*/ void SGP30_Data_Read(unsigned int *dat) { unsigned char Data01,Data02,Data03,Data04; //读取数据暂存变量 unsigned char CRC; //CRC校验值接收变量 Start_I2c(); SendByte(SGP30WAddr); SendByte(0x20); //发送命令(0x2008|SGP30_Measure_IAQ) SendByte(0x08); Stop_I2c(); DelayMs(10); //必须延时10ms以上,但不宜太长,否则读取不到数据!!! Start_I2c(); SendByte(SGP30RAddr); Data01 = RcvByte(); //CO2高位数据 Ack_I2c(); Data02 = RcvByte(); //CO2低位数据 Ack_I2c(); CRC = RcvByte(); //CRC校验值 Ack_I2c(); Data03 = RcvByte(); //TVOC高位数据 Ack_I2c(); Data04 = RcvByte(); //TVOC低位数据 Ack_I2c(); CRC = RcvByte(); NoAck_I2c(); Stop_I2c(); dat[0]=((Data01<<8)|Data02); //拼接CO2数据 dat[1]=((Data03<<8)|Data04); //拼接TVOC数据 }
直接将CO2数据转换为整型数据即可得到二氧化碳浓度数据
因本人水平有限,代码如有不足之处请指出!欢迎大家前来交流!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。