[英]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.