如何处理Arduino代码中的奇怪字符

时间:2012-08-06 19:16:14

标签: c++ character-encoding arduino

我有一个连接到我的Arduino的GPS装置,它输出了许多我想要过滤的数据。

以下是输出的片段:

  

$ÇÐÇÇÁ,175341.458,3355.7870,O,01852.4251,A,1,03,5.5,-32.8,I,32.8,Í,, 0000 * 57   $ÇÐÇÓA,A,2,31,32,20 ,,,,,,,,,, 5.6,5.5,1.0 * 30   $ÇÐÒÍÃ,175341.458,A,3355.7870,O,01852.4251,A,0.17,223.13,060812 ,, * 1C   $ÇÐGÇÁ,175342.458,3355.7871,O,01852.4251,A,1,03,5.5,-32.8,I,32.8,我,, 0000 * 55   $GÐÇÓÁ,A,2,31,32,20 ,,,,,,,,,, 5.5,5.5,1.0 * 33   $ÇÐÒÍC,175342.458,A,3355.7871,O,01852.4251,A,0.22,4.85,060812 ,, * 10   $ÇÐÇÇÁ,175343.458,3355.7872,S,01852.4251,A,1,03,5.5,-32.8,I,32.8,Í,, 0000 * 57

使用以下方法阅读:

char GPSread()
{
  byte val = 0;
  while (digitalRead(GPSrx));
  //wait for start bit
  if (digitalRead(GPSrx) == LOW)
  {
    delayMicroseconds(halfBit4800Delay);
    for (int offset = 0; offset < 8; offset++)
    {
        delayMicroseconds(bit4800Delay);
        val |= digitalRead(GPSrx) << offset;
    }
    //wait for stop bit + extra
    delayMicroseconds(bit4800Delay);
    delayMicroseconds(bit4800Delay);
    return val;
  }
}

我的目标

我正在尝试过滤此数据,以仅获取以$ÇÐÇÇÁ开头的行来使用此行中的数据。我不熟悉使用字符串作为char[]

我的尝试

所以我目前正在尝试将这些值读入char[],然后当我得到$ÇÐÇÇÁ的匹配时,我知道我已经得到了这一行。但我发现这让我陷入困境:

char dataformat [12] = "$ÇÐÇÇÁ";
Serial.println(dataformat [0]);
Serial.println(dataformat [1]);
Serial.println(dataformat [2]);
Serial.println(dataformat [3]);
Serial.println(dataformat [4]);
Serial.println(dataformat [5]);

输出为

  

$
  Ã

     

Ã

     

A

这与我在dataformat[]的init上插入的字符不同。我知道这是一个编码的东西,但不知道如何去做。

问题

如何过滤此数据以仅获取我想要的行?

1 个答案:

答案 0 :(得分:0)

您在数据格式中放置16位字符,但Serial.print()需要8位字符。

以十六进制打印输出以查看您正在接收的确切二进制数据并以数据格式复制。

例如,如果您收到FF4C1245120c,您可以这样写:

  

char dataformat [6] = {0xFF,0x4C,0x12,0x45,0x12,0x0C};

这将绕过任何编码问题。