首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TraceBack (最近一次呼叫)和GPIO.setmode(GPIO.BOARD)或GPIO.setmode(GPIO.BCM)错误

TraceBack (最近一次呼叫)和GPIO.setmode(GPIO.BOARD)或GPIO.setmode(GPIO.BCM)错误
EN

Stack Overflow用户
提问于 2015-04-07 03:29:08
回答 2查看 13.2K关注 0票数 5

我一直在为一个脚本而苦苦挣扎,这个脚本将Pi的BCM引脚17,27和10打开1秒,然后关闭1秒,顺序大约100次。当我运行脚本时,LED1会打开,然后它会关闭,程序会关闭,并显示以下错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "LedBlink.py", line 47, in <module>
    LED2Blink()
  File "LedBlink.py", line 27, in LED2Blink
    GPIO.setup(LED2, GPIO.OUT)
RuntimeError: Please set pin numbering mode using     GPIO.setmode(GPIO.BOARD) or GPIO.setmode(GPIO.BCM)

import RPi.GPIO as GPIO
import time

LED1 = 17
LED2 = 27
LED3 = 10

GPIO.setmode(GPIO.BCM)

def LED1Blink():
        GPIO.setup(LED1, GPIO.OUT)
        GPIO.output(LED1,True) 
        time.sleep(1)  
        GPIO.output(LED1,False)
        time.sleep(1)
        GPIO.cleanup()

def LED2Blink():
        GPIO.setup(LED2, GPIO.OUT)
        GPIO.output(LED2,True) 
        time.sleep(1)  
        GPIO.output(LED2,False)
        time.sleep(1)
        GPIO.cleanup()

def LED3Blink():
        GPIO.setup(LED3, GPIO.OUT)
        GPIO.output(LED3,True) 
        time.sleep(1)  
        GPIO.output(LED3,False)
        time.sleep(1)
        GPIO.cleanup()

i = 0
while i < 100:
       LED1Blink()
       LED2Blink()
       LED3Blink()
       i + 1
else:
       print "finished loop"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-07 09:50:07

问题是您在每个方法的末尾调用GPIO.cleanup()。如documentation中所述,您想要的是GPIO.cleanup(channel),其中Note that GPIO.cleanup() also clears the pin numbering system in use.对应于脚本中的LED1, LED2, LED3

最佳做法是仅设置一次和cleanup ,例如

代码语言:javascript
复制
import RPi.GPIO as GPIO
import time

LED1 = 17
LED2 = 27
LED3 = 10

GPIO.setmode(GPIO.BCM)
GPIO.setup(LED1, GPIO.OUT)
GPIO.setup(LED2, GPIO.OUT)
GPIO.setup(LED3, GPIO.OUT)

def LED1Blink():
        GPIO.output(LED1,True) 
        time.sleep(1)  
        GPIO.output(LED1,False)
        time.sleep(1)

def LED2Blink():
        GPIO.output(LED2,True) 
        time.sleep(1)  
        GPIO.output(LED2,False)
        time.sleep(1)

def LED3Blink():
        GPIO.output(LED3,True) 
        time.sleep(1)  
        GPIO.output(LED3,False)
        time.sleep(1)

i = 0
if i < 100:
       LED1Blink()
       LED2Blink()
       LED3Blink()
       i + 1
else:
       GPIO.cleanup()
       print "finished loop"
票数 7
EN

Stack Overflow用户

发布于 2018-03-11 17:21:12

永远不要多次调用GPIO.cleanup(),因为在清除引脚的同时,它也会清除引脚模式!所以,如果你在程序之间调用了它,那么下一条语句的执行就不会有引脚模式,这会给出一个错误。TraceBack(最近呼叫时间)和GPIO.setmode(GPIO.BOARD)或GPIO.setmode(GPIO.BCM)错误

因此,如果满足某些条件,请始终在程序可能结束/中断的地方使用它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29478216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档