前提・実現したいこと
下記のような簡単なスケッチで、受信した文字列を転送しよう(最終的には送られてきた文字列を違う文字列に変換して送信)としたい。
発生している問題・エラーメッセー
スケッチにある$WIWMV...しか送信されてきません。ArduinoのLEDは送信、受信とも点滅しています。USBではなくシリアルピンで接続しています。arduinoへ文字列を送信している側からデータが送られていることは直接PCと接続して確認しています(スケッチにある$WIWMV...の数字が違うだけです)。スケッチのネタ元とnmea.hは下記です。全くの素人ですのでアドバイスを頂けると助かります。
https://kingtidesailing.blogspot.com/2015/09/how-to-connect-any-nmea-0183-device-to.html
https://github.com/ericbarch/arduino-libraries/tree/master/NMEA
### 該当のソースコード ```Arduino ソースコード #include <nmea.h> NMEA nmeaDecoder(ALL); void setup() { Serial.begin(4800); } void loop() { if (Serial.available()) { // if something is incoming through the Serial Port if (nmeaDecoder.decode(Serial.read())) { // if it's a valid NMEA sentence Serial.println(nmeaDecoder.sentence()); // print it } } Serial.println("$WIWMV,256,R,14,N,A*39"); delay(1000); }
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
状況がいまいちよくわからないのですが、
PCとArduinoをつないでPCからNMEAフォーマットの文字列を送ってもArduinoが返答しないということですか?
有難うございます。その通りです。
PCから文字列はどうやって送っているんですか?
Teratermでキーボードカタカタしてるんですか? マクロ?
Teratermのローカルエコー設定どうなってますか?
PCからではなく航海計器のnmea出力ポートから電圧を5vに落としてarduinoのシリアルポートに入れています。写真は航海計器からUSBシリアル変換でPCにつなぎ受信したものです。
じゃあ"その通り"じゃないんですね。
航海計器の出力データをArduino経由してPCに送りたいが
航海計器がデータ出力しているはずなのに
PCに受信データが現れないってことですか?
そうです。失礼しました。
計器のシリアル通信線をArduinoのどのピンに
PCとArduinoをどのArduinoのどのピン/コネクタにどうつないでいるか教えて下さい
こんな感じです(GNDは省略)。level convは秋月で買った5v系-rs232変換基盤です。
arduino nano level conv PC 航海機器
Tx =======Rx-Tx===Rx
Rx=======Tx-Rx=========Tx
レベルコンバータ経由で
ArduinoのTxがPC(usbシリアル変換)のRx
ArduinoのRxが機器のTxですね
Serialのバッファは64バイトですが1秒もdelayすると溢れているのでは?
Serial.println("$WIWMV,256,R,14,N,A*39");
delay(1000);
最初は上記無しだったのですが、全く何も出て来なかったため、試しに入れてみたものです。この文字列は出てきたのでarduino、レベル変換基盤、PCの通信は出来ていることは確認出来ました。もう一度外して試してみます。
なら次は本当に受信できているか、Serial.read()したデータをそのままSerial.print()してみるべきでは?
有難うございます。週末船に行ければ試してみたいと思います。
船で移動しているのならいいですけれど、NMEA情報をそのまま見せたら所在地がモロバレなのでは...
有難うございます。念のため写真を削除しました。
回答3件
あなたの回答
tips
プレビュー