今日はちょっと地味な内容ですが、感圧センサの使い道を広げるために、シングルタップのみでなく、ダブルタップやトリプルタップを認識するようなPythonスクリプトを書いてみたのでご紹介します。
関連記事:感圧センサをタッチしてラズパイで地デジをザッピングしてみた。
参考にしたのは以下のサイトです。ほとんどここのサンプルコードを利用しています。(;^ω^)
https://www.raspberrypi.org/forums/viewtopic.php?f=32&t=76464
早速コードを掲載します。
#!/usr/bin/env python import spidev import time # Open spi device. spi = spidev.SpiDev() spi.open(0, 0) def getvalue(): res = spi.xfer2([0x68, 0x00]) value = (res[0] * 256 + res[1]) & 0x3ff return value def detect_tap(): value1 = getvalue() time.sleep(0.08) value2 = getvalue() diff = value1 - value2 if diff > 100: return False elif diff < -100: return True if __name__== '__main__': state = False max_delay = 1.0 #Second last_time = time.time() pulse_count = 0 while True: new_state = detect_tap() if new_state and not state: #going from off to on pulse_count += 1 state = True last_time = time.time() elif not new_state: #on to off state = False if time.time() > (last_time + max_delay) and pulse_count > 0: #too long a delay so after end of sequence if pulse_count == 1: print "Single tap!" elif pulse_count == 2: print "Double taps!" elif pulse_count >= 3: print "Triple taps!" pulse_count = 0
このスクリプトを実行して感圧センサを一回タップすると”Single tap!”と表示されます。二回なら”Double taps!”、三回なら”Triple taps!”と表示されます。
うーん、やはり地味ですがここにたどり着くまで結構苦労しました。ThreadとかTkなど使っていろいろ試してみたのですがうまくいかず、結局はtimeだけを使うというシンプルなところに落ち着きました。タップの回数は理論的にはいくらでも増やせます。あとは長押しなんかを検出できるといいかもです。
このあたり、普段はOSやライブラリに実装されているのでスルーしてますが、いざ自分で書くとなると結構大変なもんですね。
今日のところはこの辺で。☕️