尝试添加第三个伺服

问题描述

我有一个程序可以激活两个伺服系统。现在,代码激活伺服“A”,然后是伺服“B”,然后在循环中重复此操作。我想添加第三个伺服,伺服“C”,我想设置它,以便它们在“A”和“B”循环两次之后运行。所以顺序是:'A' 'B' 'A' 'B' 'C' 然后它会循环。现在,伺服系统仅以“A”“B”“A”“B”的模式循环运行。我被卡住了,似乎无法弄清楚如何做到这一点。有什么想法吗?

import RPi.GPIO as GPIO
import time

aServoPin = 11
bServoPin = 13
GPIO.setmode(GPIO.BOARD)

GPIO.setup(aServoPin,GPIO.OUT)
GPIO.setup(bServoPin,GPIO.OUT)

aPwm = GPIO.PWM(aServoPin,50)
bPwm = GPIO.PWM(bServoPin,50)
aPwm.start(5)
bPwm.start(5)

while True:
    a = 0
    b = 0
    while(a < 5):
        for i in range(45,135):
            position = 1./18.*(i)+2
            aPwm.ChangeDutyCycle(position)
            time.sleep(0.005)

        for i in range(135,45,-1):
            position = 1./18.*(i)+2
            aPwm.ChangeDutyCycle(position)
            time.sleep(0.005)
        a = a + 1

    while(b < 5):
        for i in range(135,-1):
            position = 1./18.*(i)+2
            bPwm.ChangeDutyCycle(position)
            time.sleep(0.005)

        for i in range(45,135):
            position = 1./18.*(i)+2
            bPwm.ChangeDutyCycle(position)
            time.sleep(0.005)
        b = b + 1

    time.sleep(1)
aPwm.stop()
bPwm.stop()
GPIO.cleanup()

解决方法

这是你想要的吗?

while True:
    a = 0
    b = 0
    c = 0
    loopAB = 0
    while(loopAB < 2):
        while(a < 5):
            for i in range(45,135):
                position = 1./18.*(i)+2
                aPwm.ChangeDutyCycle(position)
                time.sleep(0.005)

            for i in range(135,45,-1):
                position = 1./18.*(i)+2
                aPwm.ChangeDutyCycle(position)
                time.sleep(0.005)
            a = a + 1

        while(b < 5):
            for i in range(135,-1):
                position = 1./18.*(i)+2
                bPwm.ChangeDutyCycle(position)
                time.sleep(0.005)

            for i in range(45,135):
                position = 1./18.*(i)+2
                bPwm.ChangeDutyCycle(position)
                time.sleep(0.005)
            b = b + 1
        loopAB += 1
        
    while(c < 5):
        # do some things
        c = c + 1

    time.sleep(1)
aPwm.stop()
bPwm.stop()
GPIO.cleanup()