前提・実現したいこと
○秒以内に何回スイッチ(タクト)を押したかを検知したい
例えば10秒以内に3回押せばprint(count)
したときに3が出力される
それを繰り返したい
一例 (こんなのしか思いつかなぃ)
0 : 押されるまで待機
↓
A1 & B1へ
A1 : 押されたら10秒タイム開始 &
count += 1
↓
A2 : 1で計測中の10秒以内にもう一回押されるとさらに
count += 1
↓ ↑ 繰り返し
A3 : 1で計測中の10秒以内にもう一回押されるとさらに
count += 1
B1 : A1での計測が10秒を満たした
↓
B2 : Aスレッド停止(要るかな??)
↓
B3 :
print(count)
出力
↓
B4 :
count = 0
↓
0へ (再び待機)
試したこと
threading使ったけどなんかタイマーのdef動いてないっぽい?というか並列せずにできるのかなこれ?できたらいいけど。
raspberrypi zero w です。タクトスイッチはgpio21(40番目のやつ)と39番目のGNDにつないでます。
10秒で終わってくれずに押せばずっとカウントされる・・・
python
1#10秒で終わってくれずに押せばずっとカウントされる・・・助けて・・・ 2import threading 3import time 4import RPi.GPIO as GPIO 5 6 7 8GPIO.setmode(GPIO.BOARD) 9GPIO.setup(40 , GPIO.IN, pull_up_down = GPIO.PUD_UP) 10 11count = 0 12 13 14 15def counter(): 16 global count 17 while True: 18 if GPIO.input(40) == GPIO.LOW: 19 print("click") #ここまでは出る、というかチャタリングして大量に出る 20 count = count + 1 21 #print (count) デバッグ用、正常にカウントアップしてた チャタ(ry 22 23def timer(): #これ起動してないっぽい? 24 global count 25 if count >= 1: #これのせい??? 26 time.sleep(10) 27 print (count) #本来求めてる出力はこれ 28 exit() #おわっちゃう~ count=0のところまで戻りたい 29 # (というか出力が終わったら待機状態に戻りたい)のに~ 30def main(): 31 #並列の使い方あってんのかなこれ。 32 print("wait") #ちゃんと出る 33 t1 = threading.Thread(target=counter) 34 t2 = threading.Thread(target=timer) 35 t1.start() 36 t2.start() 37 38 39 40if __name__ == "__main__": 41 main() 42 43#これを手直ししてほしいってわけではないです。多分始めっから全部間違ってる気がしてます。
補足情報
raspberrypi zero w です。タクトスイッチはgpio21(40番目のやつ)と39番目のGNDにつないでます。
ほんとうはここからrequestsでifttt(webhook)経由でlineにcountの数字をvalue1に入れて飛ばしたい(親切な方~)
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/22 21:58
2021/06/22 22:51