线程化Python程序在Raspberry Pi上运行不顺利

2024-09-30 04:29:33 发布

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

我正在为一个基于树莓皮3的学校项目制作一个跟线机器人。机器人的顶部有一个LED标志,我想在机器人运行时上下淡出。我在单独的线程中运行褪色方法以避免“时间。睡觉()“干扰主代码。在

class blinkSign(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.daemon = True
        self.start()
    def run(self):
        oneSign.start(0)    # Start PWM @ 0% duty cycle
        fiveSign.start(0)
        while 1:
            for i in range(20, 100, 1):
                oneSign.ChangeDutyCycle(i)
                fiveSign.ChangeDutyCycle(i)
                time.sleep(0.01)

            for j in range(100, 20, -1):
                oneSign.ChangeDutyCycle(j)
                fiveSign.ChangeDutyCycle(j)
                time.sleep(0.01)


def readButtons():
    startButton = GPIO.input(button1)
    stopButton = GPIO.input(button3)
    if ((savePress.prev_input1) and not startButton):
        print("start pressed")
        startFlag.started = 1
    if ((savePress.prev_input2) and not stopButton):
        print("Stop pressed")
        startFlag.started = 0

    savePress.prev_input1 = startButton
    savePress.prev_input2 = stopButton

try:
    blinkSign()
    while 1:
        readButtons()
        if (startFlag.started):
            decideSpeed()
        else:
            runMotor((0, 0))
except keyboardInterrupt:
    print("cleanup")
    GPIO.cleanup()

我遗漏了一些代码,因为我认为它对这个问题不重要。你可以在Github上看到这一切。在

问题是,这种衰落过程远不是一帆风顺的。在最初的几秒钟里,它做了它应该做的,但是后来它变得越来越慢,最后似乎完全停止了。主程序似乎不受影响。我试着只运行褪色代码(在类外),而且效果很好。是我在代码中做错了什么,还是Pi的限制?还有,为什么它在开始时运行,而不是在以后运行?在


Tags: 代码selfgpioifdef机器人startprint

热门问题