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

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

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

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

Q&A

解決済

1回答

1246閲覧

Python I2C

hiro0927

総合スコア3

Python

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

0グッド

0クリップ

投稿2022/01/05 02:02

編集2022/01/05 02:05

無線モジュールでI2C通信できる温度センサADT7410から温度情報を得ようとしたプログラムが次のものです。
このプログラムでの温度情報の読み取りを10秒おきとかに変更したいのですがどうしたらよいでしょうか

Python

1import struct, binascii, serial 2import time 3 4# I2Cを制御する関数 5def accessI2C(s, sendto = 0x05, reqno = 0x00, command = 0x01, 6 i2caddress = 0x00, i2ccommand = 0x00, 7 data = [], readbyte = -1): 8 9 # データを作成する 10 if readbyte == -1: 11 # dataを書き込む 12 sendbytes = [sendto, 0x88, reqno, command, i2caddress, i2ccommand, len(data)] 13 # dataを加える 14 sendbytes.extend(data) 15 else: 16 # readbyteだけ読み取る(dataは利用しない) 17 sendbytes = [sendto, 0x88, reqno, command, i2caddress, i2ccommand, readbyte] 18 19 # チェックサムを計算する 20 chksum = 0 21 for val in sendbytes: 22 chksum = (chksum + val) & 0xff 23 sendbytes.append((0x100 - chksum) & 0xff) 24 25 # 16進数文字列に変換する 26 bytelen = len(sendbytes) 27 ss = struct.Struct(str(bytelen) + "B") 28 outstring = str(binascii.hexlify(ss.pack(*sendbytes)), 'utf-8').upper() 29 30 # TWE-Liteに送信する 31 s.write(bytes(":" + outstring + "\r\n", 'utf-8')) 32 33 # 結果を待つ 34 # 10回繰り返す 35 for i in range(10): 36 status = str(s.readline(), 'utf-8') 37 if status[0:9] == ":" + outstring[0:2] + "89" + outstring[4:8]: 38 # 該当の応答結果である 39 # 行頭の「:」と行末の改行を取り除く 40 status = status[1:].rstrip() 41 # バイトデータに変換する 42 ss = struct.Struct(">BBBBBB") 43 parsed = ss.unpack(binascii.unhexlify(status[0:12])) 44 if status[4]: 45 # I2Cへのアクセスに成功 46 # 得たバイトを戻り値として返す 47 ss = struct.Struct(str(parsed[5]) + "B") 48 result = ss.unpack(binascii.unhexlify(status[12:len(status) - 2])) 49 return result 50 else: 51 # 失敗 52 return False 53 break 54 return False 55# COM5を開く 56s = serial.Serial(4, 115200) 57 58while 1: 59 # コンフィグレーションレジスタを設定して初期化する 60 # 16ビット、ワンショットモード 61 accessI2C(s, command = 0x01, i2caddress = 0x48, i2ccommand = 0x03, data=[0x80], sendto = 0x05) 62 time.sleep(0.300) 63 # 温度の値を読み取る 64 result = accessI2C(s, command = 0x04, i2caddress = 0x48, i2ccommand = 0x00, readbyte = 2) 65 if result: 66 # 16ビットの値に変換 67 val = result[0] * 256 + result[1] 68 # 温度に変換 69 if val & 0x8000 : 70 # 負の温度 71 t = (val - 32768) / 128.0 72 else: 73 # 正の温度 74 t = val / 128.0 75 print("温度=" + str(t)) 76 else: 77 print("読み取りエラー") 78 79# COMを閉じる 80s.close() 81

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

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

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

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

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

1T2R3M4

2022/01/05 02:06 編集

嫌がらせのようなコード提示方法ですね。 >10秒おきとかに変更したい 自分で書いたコードの内容を理解していないのでしょうか。
hiro0927

2022/01/05 02:06

自分も気づいて直しました
guest

回答1

0

ベストアンサー

python

1 time.sleep(0.300)

で0.3秒待っているところを10秒に変更するのではうまくいかないのですか?

投稿2022/01/05 02:24

ppaul

総合スコア24666

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

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

hiro0927

2022/01/05 02:28

どんな値にしても絶え間なく情報が流れてくるんですよね。
ppaul

2022/01/05 02:58

温度センサと関係ないコードでも同じですか。例えば以下のコードです。 time.sleep(0.300) for i in range(10): print(i) time.sleep(2)
hiro0927

2022/01/05 03:12

ありがとうございます。解決しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問