我们正在尝试使用Raspberry Pi 3b和8825驱动器使步进电机工作。但是,我们使用的代码无法正常工作并产生错误。
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
control_pins = [14,15,18]
for pin in control_pins:
GPIO.setup(pin,GPIO.OUT)
GPIO.output(pin,0)
halfstep_seq = [
[0,0,0],
[0,0,1],
[0,1,0],
[0,1,1],
[1,0,0],
[1,0,1]
]
for i in range(512):
for halfstep in range(8):
for pin in range(4):
GPIO.output(control_pins[pin],halfstep_seq[halfstep][pin])
time.sleep(0.001)
GPIO.cleanup()
这是我们的控制台告诉我们的:
test_stepper.py:6:RuntimeWarning:该频道已在使用中, 无论如何继续。使用GPIO.setwarnings(False)禁用警告。
GPIO.setup(pin,GPIO.OUT)追溯(最近一次通话):文件 第19行中的“ test_stepper.py” GPIO.output(control_pins [pin],halfstep_seq [halfstep] [pin])IndexError:列表索引超出范围
答案 0 :(得分:1)
您在halfstep_seq
中有6个步骤,它们的索引将是0到5。但是以后,您可以这样做:
for halfstep in range(8):
.... halfstep_seq[halfstep]...
因此halfstep
的值将介于0到7之间,从而导致IndexError
。
类似地,您有3个引脚,而不是4个。
因此,您的代码应为:
for i in range(512):
for halfstep in range(6):
for pin in range(3):
GPIO.output(control_pins[pin],halfstep_seq[halfstep][pin])
但是在Python中,最好在不显式引用索引的情况下迭代列表:
for halfstep in halfsteps:
for pin_num, pin_value in zip(control_pins, halfstep):
GPIO.output(pin_num, pin_value)