RuntimeWarning с кодом для шагового двигателя - PullRequest
1 голос
/ 21 марта 2019

Чтобы запустить наш двигатель, мы пробуем этот код, но, очевидно, в нем много ошибок.Кто-нибудь может нам помочь?

RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)

pinDir = 24
pinStep = 26
numSteps = 200
microPausa = 0.005


GPIO.setup(pinDir,GPIO.OUT)
GPIO.setup(pinStep,GPIO.OUT)

while True:

        GPIO.output(pinDir,0)

        for i in range(0,numSteps):
                GPIO.output(pinStep, True)
                time.sleep(microPausa)
                GPIO.output(pinStep, False)
                time.sleep(microPausa)

        time.sleep(microPausa)

        GPIO.output(pinDir, 1)

        for i in range(0,numSteps):
                GPIO.output(pinStep, True)
                time.sleep(microPausa)
                GPIO.output(pinStep, False)
                time.sleep(microPausa)

GPIO.cleanup()

carlini.py: 12: RuntimeWarning: Этот канал уже используется, и все равно продолжается.Используйте GPIO.setwarnings (False), чтобы отключить предупреждения.GPIO.setup (pinDir, GPIO.OUT) carlini.py:13: RuntimeWarning: этот канал уже используется и все равно продолжается.Используйте GPIO.setwarnings (False), чтобы отключить предупреждения.GPIO.setup (pinStep, GPIO.OUT)

Ответы [ 2 ]

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

A RuntimeWarning - это просто предупреждение , а не ошибка .Это будет продолжаться, давая вам предупреждение.Если вы прочитаете его, он фактически сообщит вам, для чего предназначено предупреждение, и как его предотвратить:

Этот канал уже используется, в любом случае продолжается.

Использование GPIO.setwarnings(Неверно) для отключения предупреждений.

Это означает, что используемый вами вывод GPIO был установлен ранее, а не очищен.Это на самом деле не проблема для вас, поскольку вы просто перезапускаете свой код.Вы можете отключить предупреждения, добавив Use GPIO.setwarnings(False) в начало вашего файла (после GPIO.setmode).

0 голосов
/ 21 марта 2019

Вы запускали его несколько раз и останавливали с помощью прерывания клавиатуры (например, Ctrl + C)?Если это так, то GPIO по-прежнему установлены.

Возможно, вы захотите использовать блок try / исключением / finally для правильного сброса GPIO:

import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)

pinDir = 24
pinStep = 26
numSteps = 200
microPausa = 0.005


GPIO.setup(pinDir,GPIO.OUT)
GPIO.setup(pinStep,GPIO.OUT)
try:
    while True:

        GPIO.output(pinDir,0)

        for i in range(0,numSteps):
                GPIO.output(pinStep, True)
                time.sleep(microPausa)
                GPIO.output(pinStep, False)
                time.sleep(microPausa)

        time.sleep(microPausa)

        GPIO.output(pinDir, 1)

        for i in range(0,numSteps):
                GPIO.output(pinStep, True)
                time.sleep(microPausa)
                GPIO.output(pinStep, False)
                time.sleep(microPausa)
except KeyboardInterrupt:
        pass # or print("received a keyboard interrupt, exiting.")
finally:
    GPIO.cleanup()

Помните, что при первом запускеВ этом сценарии вы получите то же предупреждение (как и в предыдущих выполнениях), если только вы не запустите сценарий python

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.cleanup()
...