Quantcast
Channel: okahiro | Okahiro's Gadget Lab
Viewing all articles
Browse latest Browse all 40

Pythonでダブルタップ(クリック)を検出するコードを書いてみた。

$
0
0

今日はちょっと地味な内容ですが、感圧センサの使い道を広げるために、シングルタップのみでなく、ダブルタップやトリプルタップを認識するような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() &gt; (last_time + max_delay) and pulse_count &gt; 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!”と表示されます。

img_1480

うーん、やはり地味ですがここにたどり着くまで結構苦労しました。ThreadとかTkなど使っていろいろ試してみたのですがうまくいかず、結局はtimeだけを使うというシンプルなところに落ち着きました。タップの回数は理論的にはいくらでも増やせます。あとは長押しなんかを検出できるといいかもです。

このあたり、普段はOSやライブラリに実装されているのでスルーしてますが、いざ自分で書くとなると結構大変なもんですね。

今日のところはこの辺で。☕️


Viewing all articles
Browse latest Browse all 40

Trending Articles