HOME >> LED電子工作集 > R-2 タクトスイッチによる入力
■ はじめに
.
今、RaspberryPiに挑戦している。 今回は教則本の5章、タクトスイッチによる入力をテストする。
■ テスト2: タクトスイッチでLEDを点灯
タクトスイッチの設置とInput 処理を学ぶ。 この辺りは既存の知識で対応出来るので楽々だ。
内部プルダウン抵抗を利用するオプション方法も学ぶ。 GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) と記述しておけば良いのだ。
********** 省略 ******************* def my_callback(channel):
global ledState
if channel==24:
ledState == not ledState: if ledState == GPIO.HIGH:
GPIO.output(25, GPIO.HIGH)
else:
GPIO.output(25, GPIO.LOW) GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.add_event_detect(24, GPIO.RISING,
callback=my _callback, bouncetime=200)
ledState == GPIO.LOW
try:
while True:
sleep(0.01)
************* 省略 *******************************
■ テスト3: タクトスイッチのよるトグル動作
次に、スイッチボタンのトグル動作を設定する方法をテストする。 これは今後使いたい処理方法である。 ハードでなくてソフトで対応できるのはメリットが有りそうだ。
HIGH かLOW かの状態を記憶しておく方法はいろいろな手があると思われるが、ここでは ledState とグローバル宣言している変数を使用している。 そしてこの変数を、ledState == not ledState で反転させているのだ。
その反転動作は、def my_callback(channel): にて、my_callback といる関数を定義し、channel==24 の動作に応じて作動させている。
channel==24 は、GPIO.add_event_detect の項目でイベントをチェックしているが、ここではLOW から HIGH に切り替わるタイミングのポジティブエッジを検出してmy_callback といる関数を呼び出すようにしている。 また、bouncetime=200 は、一回目のイベントを検出したら200ms は検出しないようにするおまじないである。 チャタリング対策である。
********** 省略 ******************* def my_callback(channel):
global isPlaying
global process
if channel==24:
if isPlaying == False:
isPlaying = True
GPIO.output(25, GPIO.HIGH)
args = ['mpg321', 'kanayama_4an.mp3']
process = subprocess.Popen(args)
else:
isPlaying = False
GPIO.output(25, GPIO.LOW)
args = ['kill', str(process.pid)]
subprocess.Popen(args) GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.add_event_detect(24, GPIO.RISING, callback=my_
callback, bouncetime=200)
isPlaying = False
process = None
try:
while True:
sleep(0.01)
************* 省略 *******************************
■ テスト4: MP3ファイルの再生
次に 5.6 章の「タクトスイッチをカメラのシャッターにしてみよう」は、カメラディバイスが無いのでパスし、5.7 章の「タクトスイッチでMP3 ファイルの再生と停止」を実施してみた。
音声ファイルはネットから借用したものであるが、ホームのアナウンス録音などを使用すると、自動運転システムに活用できそうである。 自分で案内を吹き込んでも面白そうだ。
プログラム構成はテスト3と同じ構成であるが、MP3 ファイルの再生である mpg321 を使用し、kanayama_4an.mp3 というファイルを再生させている。 教則本には、subprocess.Popen(args) などのコマンドの説明がないので、ネットで調べてみた。 しかし、その高度な内容を理解するにはまったくもって歯が立たないので、このままおまじないの様にして使うしかないのだ。 ただ、subprocess.Popen や args はPython で設定されている用語である事は確かである。
また、トグル動作は、
if isPlaying == False:
isPlaying = True
のif 命令で実施している。
スピーカーはスピーカージャックに接続して鳴らしている。 昔のパソコンで使用していたセットを持ち出して来た。 今回、小型のディスプレイを購入したのであるが、ケチってスピーカーの付いていないモデルを買ってしまった。 失敗であった。
それに、最初はウンともスンとも鳴らなかったので、配線や設定をいろいろチェックした。 諦めかかった時に、画面右上のスピーカーアイコンを右クリックした時、Analog と HDMI の選択ボックスを発見した時は、うれしかった!
HDMI 側のチェックを外し、Analog 側にチェックを入れると見事に音が鳴り出しのである。
**************** 続く **************************