首页 > 解决方案 > 我需要在 Python 中使用 PWM 控制 2 个电机,用于树莓派 4。我使用 sys.argv [1]。PWM 必须在 while 循环内

问题描述

我正在尝试用树莓派 4 控制 2 个电机。参数 sys.argv [1] 给我带来了数字 1 来启动电机,而 2 则让电机反转。我需要将 pwm 命令放在 while 循环中,以便它可以保持不变。它对我不起作用,因为在 while 循环中留下了一些东西并且它让两个电机都打开。

import sys
import RPi.GPIO as GPIO     
import os                   
import time                 

ena = 12        #Motor1 
in1 = 23
in2 = 24

enb = 13        #Motor2
in3 = 19
in4 = 26

GPIO.setmode(GPIO.BCM)          

GPIO.setup(ena,GPIO.OUT)
GPIO.setup(enb,GPIO.OUT)
GPIO.setup(in1, GPIO.OUT)
GPIO.setup(in2, GPIO.OUT)
GPIO.setup(in3, GPIO.OUT)
GPIO.setup(in4, GPIO.OUT)


pwm_1 = GPIO.PWM(ena,100)
pwm_2 = GPIO.PWM(enb,100)


pwm_1.start(0)
pwm_2.start(0)

duty = 20

#from web interface with PHP
x = sys.argv[1]

try:
    while True:
        if x=="1":
            #Motor1
            GPIO.output(in1,True)
            GPIO.output(in2,False)
            pwm_1.start(duty) 
            #pwm_1.ChangeDutyCycle(duty) #alternative
            #Motor2
            GPIO.output(in3,True)
            GPIO.output(in4,False)
            pwm_2.start(duty)
            #pwm_2.ChangeDutyCycle(duty) #alternative
                        
            
        elif x=="2":
            #Motor1
            GPIO.output(in1,False)
            GPIO.output(in2,True)
            pwm_1.start(duty)
            #pwm_1.ChangeDutyCycle(duty) #alternative
            #Motor2
            GPIO.output(in3,False)
            GPIO.output(in4,True)
            pwm_2.start(duty)
            #pwm_2.ChangeDutyCycle(duty) #alternative
                        
        else:
            pwm_1.stop()
            pwm_2.stop()
            GPIO.cleanup()
            break
        
        
except ValueError:
    pwm_1.stop()
    pwm_2.stop()
    GPIO.cleanup()
    exit()

标签: pythonwhile-loopgpioraspberry-pi4pwm

解决方案


推荐阅读