コード ```### 前提・実現したいこと 焦電型赤外線センサーを使って人が作業をしているところを撮影したい。 その時に通りすがりは撮影したくないので、センサーに3回反応があったら撮影し初期状態に。 センサーに反応がない状態が5回続くと初期状態に戻る。 ### 発生している問題・エラーメッセージ センサー自体の反応ではなく、決まったパターンでしか動いてない。 1回目の反応があったあと、4回反応が無かったら撮影してしまう。 ### 該当のソースコード ``````ここに言語を入力 import traceback from functools import wraps import time import RPi.GPIO as GPIO import picamera from datetime import datetime import os from os import path __author__ = 'isann' def wrapper(func): @wraps(func) def _func(*args, **keywords): try: func(*args, **keywords) except Exception: traceback.print_exc() return _func @wrapper def main(): sleeptime = 2 Interval = 5 sensor_pin = 18 GPIO.setmode(GPIO.BCM) GPIO.setup(sensor_pin, GPIO.IN) cam = picamera.PiCamera() cam.resolution = (512, 360) cam.shutter_speed = 10000 record_folder = '/home/pi/Camera' usb_folder = '/media/pi/ESD-USB/Camera' try: print ('処理キャンセル:CTRL+C') cnt = 1 resetcnt = 1 while True: sys_date = time.strftime('%Y%m%d%H%M%S') filename = sys_date + '.jpg' save_file = record_folder + '/' + filename # センサー感知 if (GPIO.input(sensor_pin) == GPIO.HIGH): print(datetime.now().strftime('%Y/%m/%d %H:%M:%S') + ":" + str("{0:05d}".format(cnt)) + "回目の人感知") time.sleep(sleeptime) cnt = cnt + 1 resetcnt = 1 time.sleep(sleeptime) if cnt == 3: print('shot!!!!') if path.exists(usb_folder): cam.capture(save_file) time.sleep(sleeptime) cnt = 1 resetcnt = 1 continue else: cam.capture(save_file) time.sleep(sleeptime) cnt = 1 resetcnt = 1 continue else: print(GPIO.input(sensor_pin)) resetcnt = resetcnt + 1 if resetcnt > 4: cnt = 1 resetcnt = 1 time.sleep(Interval) GPIO.cleanup() except KeyboardInterrupt: print ("Quit") finally: print ("clean up") GPIO.cleanup() if __name__ in '__main__': main()
```ここに言語を入力 pyhon3
試したこと
~回反応したら撮影、~回反応がなかったらリセット、USBがあればUSBへ無ければ本体へ保存というところまではできてると思います。
補足情報(FW/ツールのバージョンなど)
センサーの動かし方はこれでよいのか、もしくは根本から違うのかが知りたいです。
もし、違うのであればヒントを頂けると助かります。
プログラミング初心者なので、至らない点もあるかと思いますがよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー