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);
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值