带有步进电机代码的运行时警告

时间:2019-03-21 08:06:23

标签: python-3.x raspberry-pi runtime-error raspberry-pi3

为了使电动机运转,我们尝试使用此代码,但显然有很多错误。有人可以帮助我们吗?

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 个答案:

答案 0 :(得分:1)

RuntimeWarning只是警告,而不是错误。它会在发出警告的同时继续进行。如果您阅读它,它实际上会告诉您该警告的含义以及如何预防该警告:

  

该频道已被使用,无论如何仍在继续。

     

使用GPIO.setwarnings(False)禁用警告。

这意味着您正在使用的GPIO引脚已经设置完毕,尚未清理。对于您而言,这并不是真正的问题,因为您只是在重新运行代码。您可以通过将Use GPIO.setwarnings(False)添加到文件顶部(在GPIO.setmode之后)来禁用警告。

答案 1 :(得分:0)

您是否多次运行它并通过键盘中断(例如ctrl + c)将其停止? 如果是这样,则仍然设置了GPIO。

您可能想使用try / except / 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()