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