2

我们正在尝试使用 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) Traceback(最近一次调用最后):文件“test_stepper.py”,第 19 行,在 GPIO.output(control_pins[pin],halfstep_seq[halfstep][pin]) IndexError: list index超出范围

4

1 回答 1

1

您有 6 个步骤halfstep_seq,其索引将为 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)
于 2019-03-13T12:44:42.237 回答