前提・実現したいこと
ArduinoMega2560にて2つのGPSセンサを用いてハードウェアシリアル通信をしようと試みています。
GPSセンサはNeo6Mで、それぞれTX3-RX3(14,15ピン)とTX2-RX2(16,17ピン)に接続しています。
これにて2つのGPSセンサの各緯度経度情報を取り込もうとしています。
しかし、コンパイル後のシリアルモニタにて出力される各GPSセンサ値は両方とも0であり、値が入ってきません。
センサエラーを疑い、片方のGPSセンサを外し、コードからも片方の処理を無効化したところGPSセンサの値が取れるようになりました。(もう片方も同様の処理で値が取れることは確認しました。)
ということで、複数のシリアル通信のコード的な問題があり、現コードが間違っている、もしくは何か別の特有のコードがあるのではないかと思っています。
発生している問題・エラーメッセージ
シリアルモニタの表示:
Start
No2Lati= 0.000000 No2Long= 0.000000
No3Lati= 0.000000 No3Long= 0.000000
No2Lati= 0.000000 No2Long= 0.000000
No3Lati= 0.000000 No3Long= 0.000000
と続く
該当のソースコード
skecth
1#include <TinyGPS++.h> 2#include <SoftwareSerial.h> 3static const uint32_t GPSBaud = 9600; 4 5// The TinyGPS++ object 6TinyGPSPlus gps1; 7TinyGPSPlus gps2; 8 9// The serial connection to the GPS device 10 11void setup(){ 12 Serial.begin(9600); 13 Serial2.begin(GPSBaud); 14 Serial3.begin(GPSBaud); 15 Serial.println("Start"); 16} 17 18void loop(){ 19 // This sketch displays information every time a new sentence is correctly encoded. 20// while (Serial2.available() > 0){ 21 delay(5000); 22 gps1.encode(Serial2.read()); 23 delay(5000); 24// if (gps1.location.isUpdated()){ 25 Serial.print("No2Lati= "); 26 Serial.print(gps1.location.lat(), 6); 27 Serial.print("\t"); 28 Serial.print("No2Long= "); 29 Serial.println(gps1.location.lng(), 6); 30// } 31// } 32// while (Serial3.available() > 0){ 33 delay(5000); 34 gps2.encode(Serial3.read()); 35 delay(5000); 36// if (gps2.location.isUpdated()){ 37 Serial.print("No3Lati= "); 38 Serial.print(gps2.location.lat(), 6); 39 Serial.print("\t"); 40 Serial.print("No3Long= "); 41 Serial.println(gps2.location.lng(), 6); 42// } 43// } 44}
試したこと
・GPSのコード部を単独のシリアル通信に変更すると1つのGPS値は取り込める
・2つのGPSセンサを使おうとするとGPS値が両方とも0になる
・delayを入れてみたが、効果なし
補足情報(FW/ツールのバージョンなど)
ArduinoIDE:1.8.13
Arduinoボード:osoyoo製のMEGA2560
GPSセンサ:neo-6M
TX3-RX3(14,15ピン)とTX2-RX2(16,17ピン)をそれぞれ使用
回答2件
あなたの回答
tips
プレビュー