ArduinoでTinyGPS++を使用してNMEAデータを解析し、OLEDディスプレイに情報を表示したいと考えています。しかし、ソフトウェアシリアルとTX/RXピンを使用する代わりに、NMEAデータはUSBによって受信されます。シリアルからNMEA文を解析する
私はTinyGPS ++から例を追ったが、私は二つの問題が発生しました:
1) 私はシリアルモニター(Windowsの上で1つのNMEA文を送信するときにのみ、最初の64の文字は、Arduinoのによって受信され、 Arduino 1.6.9)。どうすればこの制限を克服できますか?私は小数点以下2桁を削除することで自分自身を助けますが、これは好ましい方法ではありません。
2)TinyGPS ++ BasicExampleで サンプルNMEA文字列は、読み出し専用メモリ内に定義されています。私は私のNMEAを受ける
while (*gpsStream) {
Serial.print(*gpsStream);
gps.encode(*gpsStream++);
}
によって
// A sample NMEA stream.
const char *gpsStream =
"$GPRMC,045103.0,A,3014.0,N,09748.0,W,36.88,65.02,030913,,,A*7C\r\n"
"$GPGGA,045104.0,3014.0,N,09749.0,W,1,09,1.2,211.6,M,-22.5,M,,*62\r\n"
"$GPRMC,045200.0,A,3014.0,N,09748.0,W,36.88,65.02,030913,,,A*77\r\n"
"$GPGGA,045201.0,3014.0,N,09749.0,W,1,09,1.2,211.6,M,-22.5,M,,*6C\r\n"
"$GPRMC,045251.0,A,3014.0,N,09748.0,W,36.88,65.02,030913,,,A*7D\r\n"
"$GPGGA,045252.0,3014.0,N,09749.0,W,1,09,1.2,211.6,M,-22.5,M,,*6F\r\n";
と解析された(残念ながらのみ1行)この方法:
if (Serial.available()) {
while (Serial.available() > 0) {
if(index < 80)
{
inChar = Serial.read();
inData[index] = inChar;
index++;
inData[index] = '\0';
}
}
}
とによってそれを解析しよう:
index = 0;
while (index < 80) {
gps.encode(inData[index]);
Serial.print(inData[index]);
index++;
}
しかし、必要に応じて、これは動作しません。場所isValid()
が常に真ではないかどうかをチェックします。
残念ながら、私はこの望ましくない動作の原因をいくつか考えています。
- シリアル経由でデータを読み取るあまりに短い文章(そう)
- 誤った道。
- 私は1行だけを提出します。
- 他にもあります。
私はNMEAもシリアルデータ通信も経験していません。私はArduino/Cの経験はほとんどありません。この(これらの)問題を解決する方法を私に指示できますか?
#1は[このバグ](https://github.com/arduino/Arduino/issues/1223)に起因すると思います。私の勘違いは、これがPC上で円滑になるということです。あなたはシリアルドングルをコンピュータに接続し、そこに初期の開発者を置いて、次にarduinoの特定の問題を2番目に解決してみませんか? –
あなたの受信ループと解析ループも私には間違っていますが、[MCVE](http://stackoverflow.com/help/mcve)なしでは言い難いです –
シリアルドングルの意味を理解できません。後でGPSデバイスが追加されます。今のところ私はPCを介してArduinoに送信するいくつかの文章を持っています。私はそれが単にラインの終わりではなく特定の位置でマッサージを切るので、キャリッジリターンによるとは思わない。しかし、私はそれを見てMCVEを提供します – Markus