import RPi.GPIO as GPIO
import time

# 绑定对应的引脚，来自于图纸
PWMA = 18
AIN1 = 22
AIN2 = 27
PWMB = 23
BIN1 = 25
BIN2 = 24

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

# 设置引脚为输出
GPIO.setup(PWMA, GPIO.OUT)
GPIO.setup(AIN1, GPIO.OUT)
GPIO.setup(AIN2, GPIO.OUT)
GPIO.setup(PWMB, GPIO.OUT)
GPIO.setup(BIN1, GPIO.OUT)
GPIO.setup(BIN2, GPIO.OUT)

# 电机PWM初始化
leftMotor = GPIO.PWM(PWMA, 100)
rightMotor = GPIO.PWM(PWMB, 100)
leftMotor.start(0)
rightMotor.start(0)

def forward(speed, runtime):
    leftMotor.ChangeDutyCycle(speed)
    GPIO.output(AIN1, True)   # AIN1高电平则正转
    GPIO.output(AIN2, False)  # 如果为True则翻转
    rightMotor.ChangeDutyCycle(speed)
    GPIO.output(BIN1, True)
    GPIO.output(BIN2, False)
    time.sleep(runtime)  # 维持状态的时间

def backward(speed, backtime):
    leftMotor.ChangeDutyCycle(speed)
    GPIO.output(AIN2, True)   # AIN2高电平反转
    GPIO.output(AIN1, False)  # AIN1低电平
    rightMotor.ChangeDutyCycle(speed)
    GPIO.output(BIN2, True)   # BIN2高电平反转
    GPIO.output(BIN1, False)  # BIN1低电平
    time.sleep(backtime)

if __name__ == '__main__':  # 这里去掉了转义字符
    try:
        while True:
            forward(50, 3)
    except KeyboardInterrupt:
        GPIO.cleanup()