我是Raspberry Pi的新手,我正试图通过打开和关闭引脚来使电机正常工作。它运行正常,但是当我尝试设置引脚时,我收到了这些警告:
test2.py:17: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
GPIO.setup(pin1,GPIO.OUT)
test2.py:18: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
GPIO.setup(pin2,GPIO.OUT)
test2.py:19: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
GPIO.setup(pin3,GPIO.OUT)
由于电机仍在工作,似乎没有引起任何问题,但是如果可能的话我想摆脱它们。
我想我需要在程序结束时以某种方式释放pin频道,但我该怎么办呢?
有关信息,这是我的完整程序:
import RPi.GPIO as GPIO
import time
import sys
pin1=17
pin2=18
pin3=27
pin4=22
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin1,GPIO.OUT)
GPIO.setup(pin2,GPIO.OUT)
GPIO.setup(pin3,GPIO.OUT)
GPIO.setup(pin4,GPIO.OUT)
Apin1=[0,1,0,0,1]
Apin2=[0,1,1,0,0]
Apin3=[0,0,1,1,0]
Apin4=[0,0,0,1,1]
current=0
target=0
def GO_THERE(target,current):
if current<target:
while current<target:
i=current&2 + 1
GPIO.output(pin1,Apin1[i])
GPIO.output(pin2,Apin2[i])
GPIO.output(pin3,Apin3[i])
GPIO.output(pin4,Apin4[i])
time.sleep(.003)
current= current + 1
else:
while current>target:
i=current&2 + 1
GPIO.output(pin1,Apin1[i])
GPIO.output(pin2,Apin2[i])
GPIO.output(pin3,Apin3[i])
GPIO.output(pin4,Apin4[i])
time.sleep(.003)
current= current - 1
print current,target
return current;
target=4096
current=GO_THERE(target,current)
答案 0 :(得分:3)
您应该在程序结束时致电GPIO.cleanup()
:
import RPi.GPIO as GPIO
# your init code
try:
# your main loop
except KeyboardInterrupt:
# handle ctrl-c
except:
# other exceptions
finally:
GPIO.cleanup()
正如RPi.GPIO basics 3 – How to Exit GPIO programs cleanly, avoid warnings and protect your Pi所述:
RPi.GPIO提供内置函数GPIO.cleanup()来清理所有内容 您使用过的端口。但要清楚这是做什么的。它只是 影响您在当前程序中设置的任何端口。它重置任何 您在此程序中使用的端口返回输入模式。这可以防止 例如,您将端口设置为HIGH的情况下的损坏 输出,你不小心将它连接到GND(低),这将 将端口短路并可能将其煎炸。输入可以处理 0V(低电平)或3.3V(高电平),因此将端口作为输入更安全。
并且GPIO.cleanup()
无法清除所有端口,因为:
如果它确实清理了所有端口,这意味着你可以拥有专业 不同程序之间的冲突,甚至可能都没有尝试 使用相同的端口。显然,这不是一个理想的情况!
P.S。:有Raspberry Pi StackExchange。