プログラミング初心者です。現在、Pythonを使用してDCモーターと光電センサーの並列処理を行うプログラムを作成していますがうまくいきません。プログラムは下記の通りです。
Python3
import RPi.GPIO as GPIO import time import sys GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) GPIO.setup(13,GPIO.OUT) GPIO.setup(19,GPIO.OUT) GPIO.setup(21,GPIO.OUT) GPIO.setup(15,GPIO.OUT) GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.add_event_detect(24, GPIO.FALLING, bouncetime=300) #モーター制御 pwm = GPIO.PWM(19, 30) pwm.start(0) pwm.ChangeDutyCycle(0) GPIO.output(19, 1) GPIO.output(21, 0) pwm.ChangeDutyCycle(40) pwmR = GPIO.PWM(15, 100) pwmR.start(0) pwmR.ChangeDutyCycle(0) GPIO.output(15, 1) pwmR.ChangeDutyCycle(23) time.sleep(3.0) #3秒間回転 #モーター停止 pwm.stop() pwmR.stop() time.sleep(3.0) GPIO.output(13, 0) GPIO.output(15, 0) GPIO.output(19, 0) GPIO.output(21, 0) while True: try: print(GPIO.input(24)) #センサーからGPIO 24へ入力信号 time.sleep(1) except KeyboardInterrupt: GPIO.cleanup() sys.exit()
実現したいこと
このプログラムは現段階ではモーターを3秒回転させた後、モーターを停止、その後センサーが起動、センサーに反応している間はGPIO24に入力信号が行き、1秒おきにshellに[1]と表示されるプログラムになっております。実現したいことは、このセンサーからの入力信号を利用してモーターを停止させることです。
発生している問題・エラーメッセージ
特にはエラーメッセージなどは出てきませんでしたが、センサーからの入力信号をどのようにすればモーターの停止にさせられるのかがわかりません。
試したこと
プログラムを組む際に優先順位があると気づき、何度かプログラムの順序を変えて組んでみましたがうまくいきませんでした。
どなたか解決策を教えていただけないでしょうか。
追記
ご指摘された通り、プログラムを修正してみました。修正後のプログラムは、センサー反応後にモーターが止められるようにはなりましたが、停止後にモーターを再稼働させるプログラムがうまくいきません。どのようにすればよいか、どなたか解決策を教えていただけないでしょうか。
Python3
import RPi.GPIO as GPIO import time import sys GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) motor1speed=15 motor1Direction=21 SENSOR_PORT = 24 LED = 35 def motorstop(): pwm.stop() pwmR.stop() GPIO.setup(19,GPIO.OUT) GPIO.setup(motor1speed,GPIO.OUT) GPIO.setup(motor1Direction,GPIO.OUT) GPIO.setup(SENSOR_PORT, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(LED, GPIO.OUT) #モーター制御 pwm = GPIO.PWM(19, 100) pwm.start(0) GPIO.output(motor1Direction, 0) pwm.ChangeDutyCycle(40) pwmR = GPIO.PWM(motor1speed, 100) pwmR.start(0) GPIO.output(motor1speed, 1) pwmR.ChangeDutyCycle(23) while True: try: time.sleep(0.1) if(GPIO.input(SENSOR_PORT) == 1): motorstop() GPIO.output(LED, GPIO.HIGH) else: GPIO.output(LED, GPIO.LOW) except KeyboardInterrupt: GPIO.cleanup() sys.exit()
補足情報(ツールバージョンなど)
Python 3.7.2
まだ回答がついていません
会員登録して回答してみよう