トグル動作によるLEDの点灯制御

スポンサーリンク

IMG_3946

前回の タクトスイッチを使ってLEDを点灯してみる の続き。今度は、トグルの動作によってLEDの点灯制御に挑戦。

はじめる前に

前回の タクトスイッチを使ってLEDを点灯してみる で実装した機能をそのまま使います。興味がある方は是非やってみてください。

トグル動作とは

そもそもトグル動作って何?ということで調べてみました。

スイッチ・ボタンなどで、操作するたびに二つの状態が交互に入れ替わるような機構。
(wikipediaより)

つまりここで言うトグル動作とは、
・スイッチがONになりLEDが点灯(LOWからHIGH
・スイッチがOFFになりLEDが消灯(HIGHからLOW
この2つの状態が交互に入れ替わる状態をさします。

トグル動作によるLED制御の考え方

トグル動作は「操作するたびに2つの状態が入れ替わる」ことが分かりました。
では実際にどのようにPythonを使って制御すればいいのでしょうか。

まずスイッチが設置してある場所に注目します。
今回の場合、GPIO 24上に接続されています。ということは、「GPIO 24上を監視し条件によってLEDを制御する構文」を入れたら実装できるのではないか?という予測がたちます。
条件とは、LEDが点灯しているか、消灯しているかです。

Pythonを使ってLEDの点灯を制御するスクリプトを作成

では、Pythonを使って制御構文を書いていきます。

# coding: utf-8
import RPi.GPIO as GPIO
import time

ledStatus = GPIO.LOW

def myCallBack(channel):
 global ledStatus
 
 if channel == 24:
  if ledStatus == GPIO.LOW:
   ledStatus = GPIO.HIGH
   GPIO.output(25, GPIO.LOW)
  else:
   ledStatus = GPIO.LOW
   GPIO.output(25, GPIO.HIGH)

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=myCallBack, bouncetime=200)

try:
 while True:
  time.sleep(0.01)
except KeyboardInterrupt:
 GPIO.cleanup()

処理の内容を見ていきます。

5行目の ledStatus = GPIO.LOW で初期化を行っています。デフォルトでは消灯状態にしておきます。
21行目でGPIO 24の監視を行っています。
GPIO.RISINGとは、LOW状態からHIGH状態の検出を行います。検出をしたらcallback=myCallBackで7行目から記述してあるメソッドを呼び出します。bouncetimeでは、イベントを検出したら200ミリ秒は次のイベントを呼び出さないように制御しています。

7行目からLEDの点灯制御を行っています。
引数に入っているチャネルが24(GPIO 24)である場合、処理を続行します。
現在のledStatusの値を判定してLEDのON/OFFを制御します。

トグル動作によるLEDの点灯・消灯の確認

実際にトグル動作によるLEDの点灯と消灯ができるか確認してみましょう。
IMG_3941
※クリックして画像を表示するとタスクスイッチを使ったLED点灯のGIFアニメを表示できます。

ばっちりトグル動作によりLEDを点灯・消灯することができました。

参考文献

・Raspberry Piで学ぶ電子工作(金丸隆志 著)
・トグル:https://goo.gl/vePqcW

スポンサーリンク
スポンサーリンク
スポンサーリンク

フォローする

スポンサーリンク
スポンサーリンク