微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 c 程序读取 NMEA 字符串

如何解决使用 c 程序读取 NMEA 字符串

我正在尝试制作一个将字符串写入的 c 程序,但我希望它只读取其中的一小部分。 我尝试阅读的 NMEA 电报是 $WIXDR,并且确实收到了必要的字符串。 这是我进入 cpu 的两个字符串示例:

.cat-item {
    position: relative;
    width: 140px;
}

.cat-items .active-item::before {
    content: '';
    display: block;
    position: absolute;
    top: 40px;
    left: calc(50%);
    width: 0;
    height: 0;
    border-style: solid;
    border-width: 0 10px 10px;
    border-color: transparent transparent #397707;
    transform: translateX(-50%);
}

如果只有 1 个字符串(不是 C 和 V),这对我来说不是问题。 这里的问题是它是 2 个单独的字符串。一个是温度,一个是下雨信息。

我唯一感兴趣的是来自

的值“1.9”
$WIXDR,C,1.9,H,83.2,P,1023.9,0*46
$WIXDR,V,0.01,M,Z,10,s,R,0.8,0.0,1,89.9,2,3*60

这是我目前所拥有的:

$WIXDR,0......

还有更多,但这是我拥有的主要部分。

解决方法

我已经找到了我自己问题的答案。按照我的意图执行的代码如下: 我的小代码所做的,就是寻找字母C,如果找到了C,它就会把它后面的值放到“OutSideTemp”中。我必须寻找 C 的原因是,也收到了一个与字母 V(Rain)类似的字符串。 如果有人以某种方式提出任何意见可能会更好,我不介意,但这里的这一小部分可以满足我的需求。

这是我收到的电报示例(我希望将值 3.0 放入“OutSideTemp”中): $WIXDR,C,3.0,H,59.2,P,1026.9,04F $WIXDR,V,0.00,M,Z,s,R,0.0,1,89.9,2,358

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,sizeof(valueBuff));
sscanf(&valueBuff[0],&OutSideTemp);
OutSideTemp *= 10;
uOutSideTemp = (USHORT)OutSideTemp;
eCode = IODBWrite(ANALOG_IN,REG_COM_XDR,&uOutSideTemp,NULL);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。