これはプログラムの対象部分であり、これを動作させると以降、While True:内部を無限ループするものです。
題目のとおりですが、"gps.latitude[0], gps.longitude[0]"に格納されている小数点のデータが一個前のデータと同じであれば特に何も処理せず再度、ループの先頭に返し無限ループを始める、、ことを実装したいです。
上記の「特に何もせず」の部分ですが無記入だとエラー(頭にインデントを入れろ)が出てしまうので、"print("same")"としました。
どうかよろしくお願いいたします。
Python
1def rungps(): 2 #timeoutを秒で設定(10秒の間に受信したデータを返す) 3 s = serial.Serial('/dev/serial0', 9600, timeout=10) 4 #ここでGPSデータ取得するが初回はうまく取得できていない 5 s.readline() 6 #読むの1回目 7 c = 1 8 while True: 9 #GPSデータを'utf-8'に変換 10 sentence = s.readline().decode('utf-8') 11 if sentence[0] != '$': 12 continue 13 #GPSオブジェクトにデータを追加,更新する 14 for x in sentence: 15 gps.update(x) 16 17 if gps.clean_sentences > 20: 18 print('%2.8f, %2.8f' % (gps.latitude[0], gps.longitude[0])) 19 df = pd.DataFrame([[gps.latitude[0], gps.longitude[0]]]) 20 #読むの1回目なら 21 if c == 1: 22 lat = gps.latitude[0] 23 lon = gps.longitude[0] 24 25 df.to_csv('r_latlon.csv', mode='a', header=False, index=False) 26 27 time.sleep(1.0) 28 29 #読むの2回目以降は 30 elif lat == gps.latitude[0] or lon == gps.longitude[0]: 31 print("same") 32
補足変更追記
①GPSが”35.0000, 139.0000”の形で35.000はgps.latitude[0]へ、139.0000はgps.longitude[0]へ格納されます。
GPSが繰り返し取得されるので、上記①が繰り返し動作しgps.latitude[0],gps.longitude[0]はその都度更新されます。
そこで一つ前のデータと今取得したデータが異なる場合にのみ動作させたく、プログラムを動作した直後一度目のgps.latitude[0],gps.longitude[0]データをlat及びlonに格納し2回目以降はlatとgps.latitude[0]を,lonとgps.longitude[0]を比較しようと思いました。
しかしこの通りに動作しなかったため、どのように変更すれば良いのかをお聞きした次第でございます。
回答2件
あなたの回答
tips
プレビュー