[英]Using a c-program to read an NMEA-string
我正在尝试制作一个将字符串的c程序,但我希望它只读取其中的一小部分。 我尝试阅读的 NMEA 电报是 $WIXDR,并且确实收到了必要的字符串。 这是我进入 CPU 的 2 个字符串示例:
$WIXDR,C,1.9,C,0,H,83.2,P,0,P,1023.9,H,0*46
$WIXDR,V,0.01,M,0,Z,10,s,0,R,0.8,M,0,V,0.0,M,1,Z,0,s,1,R,0.0,M,1,R,89.9,M,2,R,0.0,M,3*60
如果它只有 1 个字符串(不是 C 和 V),这对我来说不是问题。 这里的问题是它是 2 个单独的字符串。 一个是温度,一个是雨信息。
我唯一感兴趣的是值“1.9”来自
$WIXDR,C,1.9,C,0......
这是我到目前为止所拥有的:
void ProcessXDR(char* buffPtr)
{
char valueBuff[10];
int result, x;
float OutSideTemp;
USHORT uOutSideTemp;
// char charTemperature, charRain
IODBerr eCode;
//Outside Temperature
result = ReadAsciiVariable(buffPtr, &valueBuff[0], &buffPtr, sizeof(valueBuff));
sscanf(&valueBuff[0],"%f",&OutSideTemp);
OutSideTemp *= 10;
uOutSideTemp = (USHORT)OutSideTemp;
eCode = IODBWrite(ANALOG_IN,REG_COM_XDR,1,&uOutSideTemp,NULL);
}
// XDR ...
if(!strcmp(&nmeaHeader[0],"$WIXDR"))
{
if(PrintoutEnable)printf("XDR\n");
ProcessXDR(buffPtr);
Timer[TIMER_XDR] = 1200; // Update every minute
ComStateXDR = 1;
eCode = IODBWrite(DISCRETE_IN,REG_COM_STATE_XDR,1,&ComStateXDR,NULL);
}
还有更多,但这是我拥有的主要部分。
我已经找到了我自己的问题的答案。 按照我的意图执行的代码如下:我的小代码的作用是查找字母 C,如果找到 C,它将取其后的值并将其放入“OutSideTemp”。 我不得不寻找 C 的原因是也收到了一个类似的字符串,带有字母 V(Rain)。 如果有人有任何意见,它可能会更好,我不介意,但是这里的这个小部分可以满足我的需要。
这是我收到的示例电报(我希望将值 3.0 放入“OutSideTemp”中):$WIXDR,C,3.0,C,0,H,59.2,P,0,P,102096美元。 ,V,0.00,M,0,Z,0,s,0,R,0.0,M,0,V,0.0,M,1,Z,0,s,1,R,0.0,M,1,R ,89.9,M,2,R,0.0,M,3 58
void ProcessXDR(char* buffPtr)
{
char valueBuff[10];
int result, x;
float OutSideTemp;
USHORT uOutSideTemp;
// char charTemperature, charRain
IODBerr eCode;
// Look for "C"
result = ReadAsciiVariable(buffPtr, &valueBuff[0], &buffPtr, sizeof(valueBuff));
// sscanf(&valueBuff[0],"%f",&charTemperature);
if (valueBuff[0] == 'C')
//Outside Temperature
result = ReadAsciiVariable(buffPtr, &valueBuff[0], &buffPtr, sizeof(valueBuff));
sscanf(&valueBuff[0],"%f",&OutSideTemp);
OutSideTemp *= 10;
uOutSideTemp = (USHORT)OutSideTemp;
eCode = IODBWrite(ANALOG_IN,REG_COM_XDR,1,&uOutSideTemp,NULL);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.