Выполнение кода в Python 3 для использования шагового двигателя - PullRequest
2 голосов
/ 13 марта 2019

Мы пытаемся заставить шаговый двигатель работать, используя 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: индекс списка вне диапазона

1 Ответ

1 голос
/ 13 марта 2019

У вас есть 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)
...