Python“此GPIO通道已存在PWM对象”

2024-07-05 14:26:19 发布

您现在位置:Python中文网/ 问答频道 /正文

#import required libraries
import RPi.GPIO as GPIO
import time

# Configure GPIO setting
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)

#constants for motor control
PWMA = 36
PWMB = 33
AIN1 = 40
AIN2 = 38
BIN1 = 37
BIN2 = 35

#Speed set to
speed_input = int(25)
speed = speed_input

left_speed = None
right_speed = None

def drive_init():
    global left_speed, right_speed

    print("Initializing the GPIO ports supporting drive ops.")
    #GPIOsettings
    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BOARD)

    #MC directions as output
    GPIO.setup(AIN1, GPIO.OUT, initial = False)
    GPIO.setup(AIN2, GPIO.OUT, initial = False)
    GPIO.setup(BIN1, GPIO.OUT, initial = False)
    GPIO.setup(BIN2, GPIO.OUT, initial = False)

    #Set motors to off first
    GPIO.output(AIN1, False)
    GPIO.output(AIN2, False)
    GPIO.output(BIN1, False)
    GPIO.output(BIN2, False)

    #set pins as out
    GPIO.setup(PWMA, GPIO.OUT, initial = True)
    GPIO.setup(PWMB, GPIO.OUT, initial = True)

    left_speed = GPIO.PWM(PWMA, 50)
    right_speed = GPIO.PWM(PWMB, 50)
    left_speed.start(0)
    right_speed.start(0)

    #Enable MC with high on enable
    GPIO.output(PWMA, True)
    GPIO.output(PWMB, True)

尝试在我的程序中运行操作时,例如:

def forward(speed, sec):
    print(f"Moving forward for at {speed}")
    GPIO.output(AIN1, False)
    GPIO.output(AIN2, True)
    GPIO.output(BIN1, False)
    GPIO.output(BIN2, True)
    left_speed.ChangeDutyCycle(speed)
    right_speed.ChangeDutyCycle(speed)
    time.sleep(1)
    GPIO.output(AIN1, False)
    GPIO.output(AIN2, False)
    GPIO.output(BIN1, False)
    GPIO.output(BIN2, False)

程序按照第一个输入的预期工作,但在输入另一个输入时,返回错误“此GPIO通道已存在PWM对象”,参考行“left_speed=GPIO.PWM(PWMA,50)”和“GPIO.setup(BIN2,GPIO.OUT,initial=False)”。我对编码还是相当陌生,不能100%确定问题到底是什么。感谢您的帮助


Tags: rightfalsetrueoutputgpiosetupoutleft