我正在为一个基于Raspberry Pi 3的学校项目制作一个机器人线。机器人顶部有一个LED标志,我想在机器人运行时淡入淡出。我在一个单独的线程中运行淡入淡出的方法,以避免“time.sleep()”干扰主代码。
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的限制?而且,为什么它在开始时运行但不是在以后运行?