1

私はArduinoとCプログラミングにとても慣れていません。

GPSスピードメーターを作成していて、シリアルを読み込んで、サブストリングから値を保存し、シリアル経由でエコーバックしようとしています。

現在、部分文字列の保存に問題があります。

<との間でデータを取得できるようになり>ました。しかし、データはそのようには入りません。これはNMEAデータストリームであり、必要なデータはとの間,N,です,K,

だから私はとで置き換えようとして,N,< まし,K,>

それを機能させることはできません。私は得るerror: request for member 'replace' in 'c', which is of non-class type 'char'

これがこれまでの私のコードです...

int indata = 0;
int scrubdata = 0;
char inString[32];
int stringPos = 0;
boolean startRead = false; // is reading?

void setup() {
  Serial.begin(4800);
}

void loop() {
  String pageValue = readPage();
  Serial.print(pageValue);
}

String readPage(){
  //read the page, and capture & return everything between '<' and '>'

  stringPos = 0;
  memset( &inString, 0, 32 ); //clear inString memory

  while(true){
    if (Serial.available() > 0) {

      char c = Serial.read();
      c.replace(",N,", "<");
      c.replace(",K,", ">");

      if (c == '<' ) { //'<' is our begining character
        startRead = true; //Ready to start reading the part 
      }
      else if(startRead){

        if(c != '>'){ //'>' is our ending character
          inString[stringPos] = c;
          stringPos ++;
        }
        else{
          //got what we need here! We can disconnect now
          startRead = false;
          return inString;
        }
      }
    }
  }
}
4

1 に答える 1

2

デフォルトでは:

Serial.read()intこの方法でデータを処理する必要がある場合は を返します。次のようにキャストしてみcharてください。

 char c = (char) Serial.read();

これを行う別の方法:

開始文字列を検索して(不要なデータを破棄) 、終了文字「 、K」にSerial.find()達するまでデータを読み取りますSerial.readBytesUntil()

このようなものは非常にうまく機能します:

char inData[64];         //adjust for your data size
Serial.setTimeout(2000); //Defaults to 1000 msecs set if necessary
Serial.find(",N,");      //Start of Data
int bRead = Serial.readBytesUntil(",K,", inData, 64);  //Read until end of data
inData[bRead] = 0x00;    //Zero terminate if using this as a string
return inData;
于 2012-08-01T04:16:48.650 に答える