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

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

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

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

2回答

3021閲覧

ArduinoのGPSプログラムについて

kyousukelin

総合スコア30

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2017/11/17 06:51

###前提・実現したいこと
Arduinoのプログラムを用いてGPSモジュールから座標を取得するプログラムについてなのですが、このままだと永遠に座標を取得し続けてしまいます。一度だけ座標を取得させるにはどのように改良すればいいのでしょうか?

###Arduino

#include "SoftwareSerial.h" #define rxPin 10 #define txPin 11 SoftwareSerial GPSSerial(rxPin, txPin); byte index; char buf[200]; char *ptr_format_id; char *ptr_utc_time; char *ptr_latitude; // S <--> N char *ptr_latitude_sn; char *ptr_longitude; // E <--> W char *ptr_longitude_ew; void clear_buf() { for( byte index = 0 ; index < 200 ; index++ ) { buf[index] = 0; } } void setup() { Serial.begin(9600); Serial.println("GPS GET location"); clear_buf(); index = 0; GPSSerial.begin(9600); } void loop() { char chr; double latitude; double longitude; if( GPSSerial.available() ) { chr = GPSSerial.read(); if( (chr == 0x0d) || (chr == 0x0a) ) { ptr_format_id = strtok( buf, "," ); if( strncmp( ptr_format_id, "$GPGGA", 6 ) == 0 ) { ptr_utc_time = strtok( NULL, "," ); ptr_latitude = strtok( NULL, "," ); ptr_latitude_sn = strtok( NULL, "," ); ptr_longitude = strtok( NULL, "," ); ptr_longitude_ew = strtok( NULL, "," ); latitude = atoi( ptr_latitude ) / 100; latitude += (atof(ptr_latitude) - latitude * 100) / 60; longitude = atoi( ptr_longitude ) / 100; longitude += (atof(ptr_longitude) - longitude * 100) / 60; //Serial.print(ptr_latitude_sn); Serial.print(latitude,8); Serial.print(","); //Serial.print(ptr_longitude_ew); Serial.print(longitude,8); Serial.println(""); } clear_buf(); index = 0; } else { buf[index] = chr; index++; } } }

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

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

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

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

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

guest

回答2

0

ベストアンサー

GPS読んだら立てるフラグ用意して
loop()の先頭でフラグ立ってたら何もせずreturn;すればいいんじゃないですかね

投稿2017/11/17 07:25

ozwk

総合スコア13512

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

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

kyousukelin

2017/11/17 07:33

なんとできました。ありがとうございます。
guest

0

loopメソッドは、繰り返し実行する機能に使います。
Setupメソッドは起動時に1度だけ実行されますから、Setupメソッドの中で座標を取得するか、座標を取得するメソッドを用意しておいて、それをSetupメソッドから呼び出すのが良いのではないでしょうか。

投稿2017/11/17 07:04

coco_bauer

総合スコア6915

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

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

kyousukelin

2017/11/17 07:09

なぜかそれだと一度も座標を取得できませんでした...。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問