import wiringpi as pi
import time
from multiprocessing import Value, Array, Process
from datetime import timedelta
BUZZER_PIN = 17
LED_PIN = 23
SW_PIN = 24
WAITING_TIME = 180
pi.wiringPiSetupGpio()
pi.pinMode(BUZZER_PIN, pi.OUTPUT)
pi.pinMode(LED_PIN, pi.OUTPUT)
pi.pinMode(SW_PIN, pi.INPUT)
pi.pullUpDnControl(SW_PIN, pi.PUD_UP)
def output(flg):
"""
出力制御関数
-------------
flg:bool 出力ONかOFFか
"""
if flg:
pi.digitalWrite(BUZZER_PIN, pi.HIGH)
pi.digitalWrite(LED_PIN, pi.HIGH)
else:
pi.digitalWrite(BUZZER_PIN, pi.LOW)
pi.digitalWrite(LED_PIN, pi.LOW)
def stop(stopflg):
"""
タイマー停止関数 タイマー中にボタンが押された場合、停止フラグをTrueにする
-------------
stopflg:Synchronized wrapper bool 停止フラグ
"""
while True:
if pi.digitalRead(SW_PIN) == pi.LOW:
stopflg.value = 1
return
time.sleep(0.1)
def inform_3min(stopflg):
"""
タイマー関数 停止フラグがTrueの場合、タイマーを停止する
-------------
stopflg:Synchronized wrapper bool 停止フラグ
"""
for i in range(WAITING_TIME):
print(timedelta(seconds=(WAITING_TIME - i)))
time.sleep(1)
if stopflg.value:
return
while True:
output(True)
time.sleep(0.5)
output(False)
time.sleep(0.5)
if stopflg.value:
output(False)
break
def run():
"""
実行関数 タクトスイッチが押されるとタイマーを起動する
"""
while True:
print('waiting')
stopflg = Value('i', 0)
if pi.digitalRead(SW_PIN) == pi.LOW:
while True:
if pi.digitalRead(SW_PIN) == pi.LOW:
time.sleep(0.1)
continue
p1 = Process(target=stop, args=[stopflg])
p2 = Process(target=inform_3min, args=[stopflg])
p1.start()
p2.start()
p1.join()
p2.join()
break
break
else:
pass
time.sleep(0.1)
if __name__ == '__main__':
while True:
if pi.digitalRead(SW_PIN) != pi.LOW:
run()
time.sleep(0.1)