2012-08-06 9 views
0

필터링 할 데이터가 많은 Arduino에 연결된 GPS 장치가 있습니다.Arduino 코드에서 이상한 문자를 처리하는 방법

$ ÇÐÇÇÁ, 175341.458,3355.7870, O, 01852.4251, Å, 1,03,5.5, -32.8, I, 32.8, 난 ,, 0000 * 57 : 여기

출력의 니펫 $ ÇÐÇÓA, Á, 2,31,32,20 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 060812 ,, * 1C $ ÇÐGÇÁ, 175342.458,3355.7871, Ó, 01852.4251, Å, 1,03,5.5, -32.8, Í, 32.8, Í ,, 0000 * 55 $ GÐÇÓÁ, Á, 2,31,32, 20 ,,,,,,,,, 5.5,5.5,1.0 * 33 $ ÇÐÒÍC, 175342.458, Á, 3355.7871, Ó, 01852.4251, Å, 0.22,4.85,060812 ,, * 10 $ ÇÐÇÇÁ, 175343.458,3355.7872 , S, 01852.4251, Å, 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; 
    } 
} 

내 목표

I 필터링하려고 이 데이터는 $ÇÐÇÇÁ으로 시작하는 행만 가져 와서이 행의 데이터를 사용합니다. 나는 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]); 

출력 등을

과 동일하지 않은 $
Ã

Ã

Ã

내가 init의 init에 삽입 한 문자들 dataformat[]. 나는 이것이 인코딩 된 것이라는 것을 알고 있지만 그것에 대해 어떻게 생각하는지 모른다.

질문

어떻게이 데이터를 내가 원하는 단지 라인을 얻기를 필터링 할 수 있을까?

+0

'if (isAlphanum (mychar)) {...}'를 사용하여 문자를 필터링하거나 if (strncmp ("MYSTRING", myString ", 5) == 0) {...} – paulsm4

+0

@ paulsm4하지만 알파벳 숫자인지 확인하면 무엇이 도움이 될까요? – LouwHopley

답변

0

데이터 형식에 16 비트 문자를 넣었지만 Serial.print()는 8 비트 문자를 필요로합니다.

출력 결과를 16 진수로 출력하여 수신중인 정확한 바이너리 데이터를보고 데이터 형식으로 복사하십시오.예를 들어

당신이 FF4C1245120c 받고있는이처럼 쓸 것이다 경우 :

숯불 DATAFORMAT [6] = {0xFF로, 0x4C, 0x12를, 0x45, 0x12를, 0x0C};

인코딩 문제가 발생하지 않습니다.

+0

이것은 도움이되지 않습니다. 특수 문자의 16 진수 값을 얻은 다음 그 값을 사용하려고했습니다. dataformat에 저장하지만 여전히 어딘가에 변환하고 – LouwHopley

관련 문제