概要
前回 Python でロータリエンコーダを制御しました
せっかく LED 付きのロータリエンコーダなので LED も制御してみました
環境
- RaspberryPi Zero rev1.3
- Raspbian 8.0 (Jessie, 4.4.11+ #888)
- LED 付きロータリエンコーダ (EC12PLRVF-D-24K-24-24C-02/06-6)
- ロータリーエンコーダ DIP 化基板
- wiringPi 2.32
- Python 2.7.9
LED 部分の配線
ロータリエンコーダの配線は前回と同様です
今回は LED を制御する配線も追加したのでそこを紹介します
写真奥の白いジャンパケーブルを GPIO23 (16 番ピン) に接続し、紫のケーブルを抵抗 470kΩを挟んで GND に接続します
スクリプト
前回の Python でロータリエンコーダを制御したスクリプトを拡張しています
ロータリエンコーダ用のカウンタが 10 で割り切れる値になったときに別スレッドで LED を点滅させます
元のスクリプトがループ実装なので LED の点滅は別スレッドで実行したほうがいいです
ちょっとソースが長いですが、ソースの全容は以下の通りです
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
import threading
RoAPin = 11
RoBPin = 12
led = 16
globalCounter = 0
preGlobalCounter = 0
flag = 0
Last_RoB_Status = 0
Current_RoB_Status = 0
class LedThread(threading.Thread):
def __init__(self):
super(LedThread, self).__init__()
def run(self):
print "Turn on the led"
GPIO.output(led, True)
time.sleep(0.5)
GPIO.output(led, False)
def setup():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(RoAPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(RoBPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(led, GPIO.OUT, initial=GPIO.LOW)
def rotaryDeal():
global globalCounter
global flag
global Last_RoB_Status
global Current_RoB_Status
Last_RoB_Status = GPIO.input(RoBPin)
while (not GPIO.input(RoAPin)):
Current_RoB_Status = GPIO.input(RoBPin)
flag = 1
if flag == 1:
flag = 0
if (Last_RoB_Status == 0) and (Current_RoB_Status == 1):
globalCounter = globalCounter + 1
if (Last_RoB_Status == 1) and (Current_RoB_Status == 0):
globalCounter = globalCounter -1
def loop():
global globalCounter
while True:
preGlobalCounter = globalCounter
rotaryDeal()
if (preGlobalCounter != globalCounter):
print 'globalCounter = %d' % globalCounter
if (globalCounter % 10 == 0):
th = LedThread()
th.start()
def destroy():
GPIO.cleanup()
if __name__ == '__main__':
setup()
try:
loop()
except KeyboardInterrupt:
destroy()
これで実行してロータリエンコーダを回すと 10, 20 や -10 のときに LED が点滅するはずです
最後に
3 回に渡ってロータリエンコーダの紹介をしてきました
正直、今のところ実ケースでロータリエンコーダを使う場面に出くわしていません
オーディオ機器のボリュームコントロール等によく使われるみたいですが、現状自分の回りのハックではそのようなケースがない状態です
まぁいろいろと便利そうなデバイスではあるので、とりあえず検証できたことは良かったと思います
0 件のコメント:
コメントを投稿