mlx90614红外测温驱动

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);

猜你喜欢

转载自blog.csdn.net/u010835747/article/details/120711233
今日推荐