mlx9061为i2c接口,只需要将i2c速度设置低一点就行
//温度传感器函数
//参数 t温度
//返回 0
//定义硬件接口
#include "smbus.h"
#define GY906_I2C I2C0
#define GY906_SCL GPIO_10
#define GY906_SDA GPIO_11
int GY906_get(float *t)
{
union data{
unsigned char t_u8[3];
unsigned short int t_u16;
}my_t;
float t_tmp = 0;
static char state = 0;
if(state == 0)
{
i2c_Init( GY906_I2C, U32BIT( GY906_SCL), U32BIT(GY906_SDA)); // 初始化I2C 用于心率和OLED
state = 1;
return 0;
}
i2c_0_read(0x00, 1, 0x07, my_t.t_u8, 3);
t_tmp = (float)(my_t.t_u16)*0.02 - 273.15;
//校准温度
if(t_tmp >= 31.0 && t_tmp <= 32.0)
*t = t_tmp + 2.35;
else if(t_tmp >= 32.0 && t_tmp <= 34.0)
*t = t_tmp + 2.25;
else if(t_tmp >= 34.0 && t_tmp <= 35.0)
*t = t_tmp + 2.15;
else if(t_tmp >= 35.0 && t_tmp <= 36.0)
*t = t_tmp + 1.90;
else if(t_tmp >= 36.0 && t_tmp <= 37.0)
*t = t_tmp + 1.6;
else if(t_tmp >= 37.0 && t_tmp <= 38.0)
*t = t_tmp + 1.3;
else if(t_tmp >= 38.0 && t_tmp <= 39.0)
*t = t_tmp + 1.0;
else
*t = t_tmp;
return 0;
}
使用方法
需要用到i2c0,将速度设置到最低I2C_0_CTRL->SPEED = 249;
float t_tem;
GY906_get(&t_tem);