9/13にテーマになっていたロータリーエンコーダーについて

ロータリーエンコーダーをRPiで使う件、とりあえず動いたのでまとめてみました。
割り込み処理した方が実用的なので、ゆってぃさんお願いします。

「いいね!」 3

おー!ありがとうございます! :raised_hands:
あの後触っていたら、待機処理が効かなかったのは自分のインデントの位置が間違っていたのが原因でした :innocent:

9/15 水の配信で動かしてみたいと思います!

「いいね!」 1

今日見直したらpi hutのコードでもいい感じでした。
せっかくなので割り込み化してみました。

from RPi import GPIO
from time import sleep

A = 17
B = 18

GPIO.setmode(GPIO.BCM)
GPIO.setup(A, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(B, GPIO.IN, pull_up_down=GPIO.PUD_UP)

class CallBack:

    def __init__(self):
       
        self.counter = 0
        self.times   = 0

        GPIO.add_event_detect(A, GPIO.FALLING, bouncetime = 100)
        GPIO.add_event_callback(A, self.RotaryMove)
    
    def RotaryMove(self,args):

        self.Bstate = GPIO.input(B)

        if self.Bstate == 1:
            self.counter += 1
        else:
            self.counter -= 1
        self.times += 1

        print("Bstate  = " + str(self.Bstate))
        print("counter = " + str(self.counter))
        print("times   = " + str(self.times))

cb = CallBack()

while True:
    sleep(1)
「いいね!」 1

Qiitaに書いてアップしてたらspam判定されてしまいました。引用リンクでアップしない方がいいですか?

@yasuhiroyamashita さん
確認したところ、フォラームへ登録して間もない期間に、同じドメインへのリンクが複数回行われたことで今回の判定となってしまったようです。該当する投稿の非表示は解除いたしました。

上限値の見直しを行いましたので、リンクは今まで通りしていただいて構いません。お騒がせしました!

ありがとうございます。
早速ですが、勉強会でも少し話題になっていたロータリーエンコーダの構造について、分解確認したのでレポートします。

「いいね!」 2

コールバックも良い感じに動作しました! ありがとうございます :bowing_man:

途中で止まってしまうというお話をされていたので、再現のためにscreenコマンドでセッションを作り、プロセスを動かしっぱなしにしてみてます。もし再現したら共有させてください。

「いいね!」 1