天然气报警之上位机的建立
这两天才匆匆忙忙把上位机调试完,有很多不完善的地方,界面也比较难看,等有时间的时候好好整理下。这个界面是用VB建立的,模仿的是eZ430-RF2500 Sensor Monitor,eZ430-RF2500 Sensor Monitor是个比较好玩的界面,就模仿这个建立一个适合我的上位机界面。
下图是我接入传感器检测装置所测得的天然气含量。
图(一)
下个模块是在没有插入带电池的无线模块时的上位机界面,该节目实现功能和TI给出的界面基本功能是一样的.
图(二)
通过显示两个模块的距离来显示硬件设备中两个无线模块的距离。
上位机界面:
By fxw451
具体软件部分,我在详细的介绍下我是怎么加上我这个天然气模块的。
首先在demo_ED中,对天然气采集所需要的AD进行设置
ADC10CTL1 = INCH_1 + ADC10DIV_4; // Temp Sensor ADC10CLK/5
ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE + ADC10SR;
for( degC = 240; degC > 0; degC-- ); // delay to allow reference to settle
ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
__bis_SR_register(CPUOFF + GIE); // LPM0 with interrupts enabled
results[2] = ADC10MEM;
我采用的是INCH_1通道,其他就是配置了,最后就是results[2] = ADC10MEM,将采集的数据给results[2],而results采集的结果,我这里是有三个,电压,温度和天然气含量。
然后就是 bj = results[2]; msg[3] = bj;,好在其他函数里调用要用到
然后在demo_AP中,需要添加天然气的数据如下有详细的程序
void transmitDataString(char addr[4],char rssi[3], char msg[MESSAGE_LENGTH] )
{
char temp_string[] = {" XX.XC"};
int temp = msg[0] + (msg[1]<<8);
if( !degCMode )
{
temp = (((float)temp)*1.8)+320;
temp_string[5] = 'F';
}
if( temp < 0 )
{
temp_string[0] = '-';
temp = temp * -1;
}
else if( ((temp/1000)%10) != 0 )
{
temp_string[0] = '0'+((temp/1000)%10);
}
temp_string[4] = '0'+(temp%10);
temp_string[2] = '0'+((temp/10)%10);
temp_string[1] = '0'+((temp/100)%10);
if( verboseMode )
{
char output_verbose[] = {"\r\nNode:XXXX,Temp:-XX.XC,Battery:X.XV,Strength:XXX%,RE:no,R:XXX "};
output_verbose[46] = rssi[2];
output_verbose[47] = rssi[1];
output_verbose[48] = rssi[0];
output_verbose[17] = temp_string[0];
output_verbose[18] = temp_string[1];
output_verbose[19] = temp_string[2];
output_verbose[20] = temp_string[3];
output_verbose[21] = temp_string[4];
output_verbose[22] = temp_string[5];
output_verbose[32] = '0'+(msg[2]/10)%10;
output_verbose[34] = '0'+((msg[2]%10))*4;
output_verbose[59] = '0'+(msg[3]%10); ////
output_verbose[60] = '0'+((msg[3]*10)%10); ////,R:XXX
output_verbose[7] = addr[0];
output_verbose[8] = addr[1];
output_verbose[9] = addr[2];
output_verbose[10] = addr[3];
TXString(output_verbose, sizeof output_verbose );
}
else
{
char output_short[] = {"\r\n$ADDR,-XX.XC,V.C,RSI,N#"};
output_short[19] = rssi[2];
output_short[20] = rssi[1];
output_short[21] = rssi[0];
output_short[8] = temp_string[0];
output_short[9] = temp_string[1];
output_short[10] = temp_string[2];
output_short[11] = temp_string[3];
output_short[12] = temp_string[4];
output_short[13] = temp_string[5];
output_short[15] = '0'+(msg[2]/10)%10;
output_short[17] = '0'+((msg[2]%10))*4;
output_short[22] = '0'+(msg[3]); ///
output_short[3] = addr[0];
output_short[4] = addr[1];
output_short[5] = addr[2];
output_short[6] = addr[3];
TXString(output_short, sizeof output_short );
}
}
其实程序就这样,大家可能刚开始学这个东西的时候需要花费很长的时间,去了解程序里的每个函数是什么意思,以及芯片是如何配置的。等大家学到一定程度的时候就很容易去编程了,当然我编的也不一定就好,这个只作为一个参考,有错误之处请大家及时通知我,我好及时的修改,以免影响大家。