Проблема при импорте скрипта в другой - PullRequest
1 голос
/ 25 апреля 2020

Я написал два сценария для робота с ременными приводами, приводимыми в движение шаговыми двигателями. Скрипт "DUALSTEPPER_LIBARY_002.py" содержит класс DualStepper и некоторые функции, такие как forward, backward et c. Этот сценарий должен запускаться в фоновом режиме путем импорта в другой сценарий с именем «Testlauf_001.py».

Когда я создаю экземпляр класса DualStepper в сценарии «DUALSTEPPER_LIBARY_002.py» и пишу некоторый код, который использует функции при условии, что я могу выполнить код без проблем. Двигатели двигаются правильно вперед и назад.

Как только я импортирую скрипт "DUALSTEPPER_LIBARY_002.py" в скрипт "Testlauf_001.py", шоу останавливается с сообщением об ошибке:

Traceback (most recent call last):
  File "/home/pi/Documents/PythonFiles/Stepperbox Amazon/Testlauf_001.py", line 7, in <module>
    antriebsmotoren = DualStepper("antriebsmotoren", 20, 16, 21, 12)
NameError: name 'DualStepper' is not defined

Итак Почему? Есть класс под названием DualStepper. Как это не может быть определено?

ЭТО БЫЛО ОЧЕНЬ ДОБРОГО, ЕСЛИ КТО-то МОЖЕТ СКАЗАТЬ МНЕ, МОЯ ТУМКА. СПАСИБО

Вот кратчайшие возможные примеры кода для воспроизведения проблемы:

СЦЕНАРИЙ "DUALSTEPPER_LIBARY_002.py":

import time
import RPi.GPIO as GPIO

class DualStepper:
    def __init__(self, motor_name, direction_pin1, direction_pin2, step_pin1, step_pin2):
        self.motor_name = motor_name
        self.direction_pin1 = direction_pin1
        self.direction_pin2 = direction_pin2
        self.step_pin1 = step_pin1
        self.step_pin2 = step_pin2
        GPIO.setwarnings(False)
        GPIO.setmode(GPIO.BCM)

    def vorwaerts(self, steps=200, stepdelay=.005, initdelay=.05):
        GPIO.setup(self.direction_pin1, GPIO.OUT)
        GPIO.setup(self.direction_pin2, GPIO.OUT)
        GPIO.setup(self.step_pin1, GPIO.OUT)
        GPIO.setup(self.step_pin2, GPIO.OUT)
        GPIO.output(self.direction_pin1, 1)
        GPIO.output(self.direction_pin2, 0)

        for i in range(steps):
            GPIO.output(self.step_pin1, True)
            GPIO.output(self.step_pin2, True)
            time.sleep(stepdelay)
            GPIO.output(self.step_pin1, False)
            GPIO.output(self.step_pin2, False)
            time.sleep(stepdelay)

            antriebsmotoren = DualStepper("antriebsmotoren", 20, 16, 21, 12)

СЦЕНАРИЙ "Testlauf_001.py":

import time
import RPi.GPIO as GPIO
import DUALSTEPPER_LIBARY_002

for n in range (3):
    antriebsmotoren.vorwaerts(steps=400, stepdelay=.001, initdelay=.05)
    time.sleep(.5)

GPIO.cleanup()

1 Ответ

0 голосов
/ 25 апреля 2020

Вы должны инициализировать объект antriebsmotoren вне определения вашего класса.

Попробуйте:

Сценарий A:

import time
import RPi.GPIO as GPIO

class DualStepper:
    def __init__(self, motor_name, direction_pin1, direction_pin2, step_pin1, step_pin2):
        self.motor_name = motor_name
        self.direction_pin1 = direction_pin1
        self.direction_pin2 = direction_pin2
        self.step_pin1 = step_pin1
        self.step_pin2 = step_pin2
        GPIO.setwarnings(False)
        GPIO.setmode(GPIO.BCM)

    def vorwaerts(self, steps=200, stepdelay=.005, initdelay=.05):
        GPIO.setup(self.direction_pin1, GPIO.OUT)
        GPIO.setup(self.direction_pin2, GPIO.OUT)
        GPIO.setup(self.step_pin1, GPIO.OUT)
        GPIO.setup(self.step_pin2, GPIO.OUT)
        GPIO.output(self.direction_pin1, 1)
        GPIO.output(self.direction_pin2, 0)

        for i in range(steps):
            GPIO.output(self.step_pin1, True)
            GPIO.output(self.step_pin2, True)
            time.sleep(stepdelay)
            GPIO.output(self.step_pin1, False)
            GPIO.output(self.step_pin2, False)
            time.sleep(stepdelay)

antriebsmotoren = DualStepper("antriebsmotoren", 20, 16, 21, 12)

Сценарий B:

import time
import RPi.GPIO as GPIO
from DUALSTEPPER_LIBARY_002 import antriebsmotoren

for n in range (3):
    antriebsmotoren.vorwaerts(steps=400, stepdelay=.001, initdelay=.05)
    time.sleep(.5)

GPIO.cleanup()
...