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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

554閲覧

RaspberryPiで測距センサ(HC-SR04)の連続データをテキストファイルに出力したい

yoooth13

総合スコア1

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/11/12 16:42

編集2022/11/12 16:50

前提 実現したいこと

RaspberryPiを用いて、測距センサ(HC-SR04)で出力される距離データを約1秒間隔でテキストファイルに書き込みたいです。

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

エラーメッセージが出ているわけではなく、プログラム自体は動いているようですが、
テキストファイルが作成されるのみで、肝心の距離データが1行も書き込まれていません。
以下のコードを実行しているのですが、原因や対処法をご教示いただけないでしょうか。

該当のソースコード

Python

1import RPi.GPIO as GPIO 2import time 3import math 4from time import sleep 5import sys 6import datetime 7 8 9GPIO.setwarnings(False) 10GPIO.setmode(GPIO.BCM) 11 12#ポート番号の定義 13Trig = 27 #変数"Trig"に27を代入 14Echo = 22 #変数"Echo"に22を代入 15 16#GPIOの設定 17GPIO.setmode(GPIO.BCM) #GPIOのモードを"GPIO.BCM"に設定 18GPIO.setup(Trig,GPIO.OUT) #GPIO27を出力モードに設定 19GPIO.setup(Echo, GPIO.IN) #GPIO22を入力モードに設定 20 21file = open("ultrasonic_data.txt", "a") 22 23#HC-SR04で距離を測定する関数 24def read_distance(): 25 GPIO.output(Trig, GPIO.HIGH) #GPIO27の出力をHigh(3.3V)にする 26 time.sleep(0.00001) #10μ秒間待つ 27 GPIO.output(Trig, GPIO.LOW) #GPIO27の出力をLow(0V)にする 28 29 while GPIO.input(Echo) == GPIO.LOW: #GPIO22がLowの時間 30 sig_off = time.time() 31 while GPIO.input(Echo) == GPIO.HIGH: #GPIO22がHighの時間 32 sig_on = time.time() 33 34 duration = sig_on - sig_off #GPIO18がHighしている時間を算術 35 distance = duration * 34000 / 2 #距離を求める(cm) 36 return distance 37 38 39 40#連続して値を超音波センサの状態を読み取る 41while True: 42 try: 43 file.write(str(read_distance()) + "\n") 44 time.sleep(1) 45 46 except KeyboardInterrupt: #Ctrl+Cキーが押された 47 GPIO.cleanup() #GPIOをクリーンアップ 48 sys.exit() #プログラム終了

試したこと

file.write(str(read_distance()) + "\n")
のコードを
print(read_distance())
に置き換えると、連続した距離データが出力される状態なので、距離データの取得はできています。

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

プログラム終了の前に、fileのcloseしてみましょう

投稿2022/11/12 23:32

y_waiwai

総合スコア87749

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

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

yoooth13

2022/11/13 06:27

>プログラム終了の前に、fileのcloseしてみましょう ご回答ありがとうございます。初歩的なことを失念しておりました。 無事書き込みができるようになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問