HOME  >>  LED電子工作集 > R-2 タクトスイッチによる入力

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 側にチェックを入れると見事に音が鳴り出しのである。

 

  ****************  続く  **************************