質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

1122閲覧

Arduino DueでGPSの計測をシリアルで確認したい

yokuto_

総合スコア13

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/10/31 04:15

前提・実現したいこと

Arduino UnoでGPSの計測をおこなっていたのですが、Arduino Dueに変えたところSoftwaresirialが使えないためプログラムを変更したのですがエラーが出てしまいます。実現したいことといたしましては、シリアルにGPSの値を表示したいです。
よろしくお願いします。ちなみにGPSは18、19ピンを利用しています。

発生している問題・エラーメッセージ

In function 'void loop()': fix.Serial:102:19: error: request for member 'available' in '(0, 19)', which is of non-class type 'int' while (mySerial.available()>0) { ^ fix.Serial:103:23: error: request for member 'read' in '(0, 19)', which is of non-class type 'int' char c = mySerial.read(); exit status 1 request for member 'available' in '(0, 19)', which is of non-class type 'int'

該当のソースコード

C言語

1#include <fifo.h> 2#include <soft_uart.h> 3#include <TinyGPS++.h> 4 5#define mySerial (18,19) 6Serial.begin(9600); 7 8while (!Serial) { 9 ; // wait for serial port to connect. Needed for native USB port only 10 } 11 12 Serial.println("GPS START!"); 13 14void loop(){ 15 16 while (mySerial.available()>0) { //データが存在する間はループする 17 char c = mySerial.read(); 18 Serial.print(c); 19 gps.encode(c); 20 //Serial.println(Serial1.read()); 21 if (gps.location.isUpdated()) { //もしGPSが正常に更新されていたら...⬇ 22 gps_flg = 1; 23 LAT_GPS = gps.location.lat(); 24 LONG_GPS = gps.location.lng(); 25 Serial.print("LAT="); Serial.println(LAT_GPS, 6); 26 Serial.print("LONG="); Serial.println(LONG_GPS, 6); 27}

試したこと

いろいろプログラムを書き直しました。

補足情報(FW/ツールのバージョンなど)

Arduino Due

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

#define mySerial (18,19)
これ、間違ってないですか?
C言語のコードになってませんが

投稿2018/10/31 04:32

y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yokuto_

2018/10/31 04:58

以前のUnoの時は、SoftwareSerial myserial (10,11); と宣言していました。DueのばあいSoftwareSerialが使えないためどのように宣言すればいいでしょうか?
y_waiwai

2018/10/31 05:02

DueはUARTが4つ搭載されてますんで、HardwareSerialを使えばどうでしょう
yokuto_

2018/10/31 05:05

HardwareSerial mysirial (18,19); みたいな感じで大丈夫ですか? 1度やってみます ありがとうございます。
yokuto_

2018/10/31 06:15

void loop内のプログラムを変えたくないため、できれば18,19の部分をなんとかSoftwareSerial(18,19)のようにできないですか?
y_waiwai

2018/10/31 06:28

できません。というのがその回答になると思われますが、 提示したリンクを読んでください。 おそらく、Serial1 あたりでそのピンのシリアルが実装できると思われますが。
yokuto_

2018/10/31 07:35

ありがとうございます。参考にさせていただきます。 もしかしたらreadできていない可能性もあるので、シリアルと両にらみでやってみます。
yokuto_

2018/10/31 11:05

Dueの場合hardwareSerialを宣言しなくても、SerialNo(NoはSerial portの番号).beginを宣言するだけで目的の値をシリアルで得ることができました。回答してくださりありがとうございました。
guest

0

Arduino Dueはちょっと特殊で、4つのハードウェアSerial通信を持っています。
"serial"は0ピンと1ピン、"serial1"は19ピンと18ピン、"serial2"は17ピンと16ピン、"serial3"は15ピンと14ピンに接続されています。
「GPSは18、19ピンを利用しています」とのことですので、GPSとのやり取りは"serial1"を使うことになります。

Arduino Dueを使った事がないのですが、たぶん"mySerial"となっているところを、"Serial1"に書き換えればよいのではと思います。

#define mySerial (18,19)

の行は、意味がないコードなので削除してください。

投稿2018/10/31 08:29

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問