简体   繁体   中英

Running a code in Python 3 to use a stepper motor

We're trying to make a stepper motor work using a Raspberry Pi 3b and the 8825 driver. However, the code we're using doesn't work and produces an error.

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()

This is what our console has told us:

test_stepper.py:6: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
GPIO.setup(pin,GPIO.OUT) Traceback (most recent call last): File "test_stepper.py", line 19, in GPIO.output(control_pins[pin],halfstep_seq[halfstep][pin]) IndexError: list index out of range

You have 6 steps in halfstep_seq , whose indices will be 0 to 5. But later, you do:

for halfstep in range(8):
    .... halfstep_seq[halfstep]...

so halfstep will take values from 0 to 7, causing an IndexError .

Similarly, you have 3 pins, not 4.

So, your code should be:

for i in range(512):
    for halfstep in range(6):
        for pin in range(3):
            GPIO.output(control_pins[pin],halfstep_seq[halfstep][pin])

But in Python, it is better to iterate on lists without explicitely referring to the indices:

  for halfstep in halfsteps:
    for pin_num, pin_value in zip(control_pins, halfstep):
      GPIO.output(pin_num, pin_value)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM