lm75a已经裸机驱动起来,下一步准备添加在zstack中zigbee网关 cc2530裸机驱动温度传感器LM75A
把iic.c, iic.h, lm75a.c, lm75a.h拷贝到zigbeeGateWay工程中的source目录下
右击app选择添加source把iic.c和lm75a.c添加进来
在协调器的workspace中分别选中iic.c和lm75a.c右击选择option把exclude from build勾上,这样协调器就不会把这两个文件编译进来
把lm75a中main函数等函数删掉仅留下
float ReadTemp(void)
函数
把iic.c中iic初始化函数改成
void iic_init()
{P0DIR |= 1<<6 | 1<<7; //数据线时钟线设置输出模式P0INP &= ~(1<<6);//数据线输入上拉或者下拉P2INP &= ~(1<<5);//数据线输入上拉set_sda_out();SCL = 1;delay();SDA = 1;delay();
}
至此,lm75a的驱动函数完成
参考Zigbee网关 cc2530 zstack添加1602驱动的做法,因为这是一个单向控制的,简单的把之前周期报告led状态的函数改成报告温度的函数即可
添加头文件,为了协调器工程不报错,使用的宏if
#ifndef APP_UIP
#include "iic.h"
#include "lm75a.h"
#endif
在初始化函数中添加iic初始化
#ifndef APP_UIP
iic_init();
#endif
将函数
void ZigbeeGateWay_SendPeriodicMessage( void )
中的前3行改成如下:
uint8 led_string[20];//int led_State = P0;sprintf((char*)led_string, "Temperature:%2.1f",ReadTemp());
ok,完成,上电测试,
收到的消息
{"From":"Endian","Addr":"3E92","Type":"Message","Content":"Temperature:2.1f"}
好像不太对,%2.1f没给翻译
原因是printf formatter太低了,选Auto,让编译器自己选合适的formatter
上电测试
成功了,温度升高是因为我用手按了一会儿。
更多精彩案例请参考 web.nenewind.com