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

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

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

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

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

Q&A

3回答

736閲覧

ラズパイ MCP23017 Python 「可変抵抗の値が変化した時」という条件でwhileを回すには。

_magurochan

総合スコア13

Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

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

0グッド

0クリップ

投稿2020/01/14 12:34

編集2020/01/14 12:35

#実現したいこと
MCP23017というADCを使い、SPI通信で、可変抵抗の動きを取得しています。

Raspberry Pi Zero WH
SPI通信にはpigpio
OSCの送信にPython-OSCを使っています。

現在のコードはこうなっています。

Python

1while True: 2 cmnd = (0b00001000 + adch) << 4 3 c, raw = pi.spi_xfer(hndl_spi, [ 1, cmnd, 0 ]) 4 data = ((raw[1] << 8) + raw[2]) & 0x3FF 5 client.send_message("/midi2/pot1", data) 6 time.sleep(0.5)

このコードでは、

ADCから値を取得 ↓ 「data」をOSCでsend_messageして、 ↓ 「time.sleep(0.5)」で待機する ↓ はじめに戻る

となっているのですが、

この状態だと、可変抵抗を回してない時も数値がsend_messageされ続けていて、鬱陶しいです。

while文の条件を「可変抵抗を回してdata・数値が変わった時」にしたら解決できそうですが、具体的な方法が、調べてもわかりません。

良い方法がありましたら、教えて欲しいです。

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

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

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

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

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

coco_bauer

2020/01/16 07:43

何の目的で可変抵抗の値を収集しているのですか? 用途が判らないと、どのように値を収集するのが適しているかが判断できません。
guest

回答3

0

python

1last_data = None 2while True: 3 cmnd = (0b00001000 + adch) << 4 4 c, raw = pi.spi_xfer(hndl_spi, [ 1, cmnd, 0 ]) 5 data = ((raw[1] << 8) + raw[2]) & 0x3FF 6 if data != last_data: 7 client.send_message("/midi2/pot1", data) 8 last_data = data 9 time.sleep(0.5)

投稿2020/01/14 23:43

編集2020/01/14 23:45
shiracamus

総合スコア5406

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

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

thkana

2020/01/16 14:03

可変抵抗はアナログ素子だし、機構的にいわゆる「ガリオーム」になったりとかいろいろあるし、多少のノイズは乗ったりすることもあるだろうから、触っていないからと言って値が全く変わらない、とはいかないかも知れませんよ。
guest

0

直前の値 と 現在の値 が異なるなら送信する でよくね?

投稿2020/01/14 19:05

episteme

総合スコア16614

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

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

0

可変抵抗を回してdata・数値が変わった時

というのはどういう条件で判定できるのかをまず考えましょう。

それがわからない、というのであれば、勉強しよう、としかいいようがないです。

投稿2020/01/14 12:58

y_waiwai

総合スコア87747

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問