覆盆子pi 3上的Python 2.7 ...... os.system调用阻塞中断?

时间:2018-02-03 16:35:33

标签: python-2.7 interrupt raspberry-pi3 gpio

我是python中的新手(虽然在编程和一般IT方面不是新手)所以请原谅我,如果我要问一些小事......

我有以下设置:

  • 一个带有Wheezy Raspbian发行版的Raspberry PI 3(或者我认为,它是来自pimusicbox.com的PiMusicBox图像,应该是Wheezy基于我在文档上的红色)。 Python版本是2.7.3。
  • 如下连接的机械旋转编码器(针脚编号称为BOARD针脚):
    • 接地引脚39(接地,这很容易:-))
    • “+”到引脚1(3.3 V,另一个容易的)
    • dt to pin 13
    • clk to pin 15

以下示例代码的行为对我来说无法解释(我想这与输入的具体类型无关):

import os
import RPi.GPIO as GPIO
import time

TunerDtPin = 13    #  dt pin
TunerClkPin = 15    #  clk pin

last_state=0

def setup():
    GPIO.setmode(GPIO.BOARD)    
    GPIO.setup(TunerDtPin, GPIO.IN,pull_up_down=GPIO.PUD_UP)    
    GPIO.setup(TunerClkPin, GPIO.IN,pull_up_down=GPIO.PUD_UP)
    GPIO.add_event_detect(TunerClkPin, GPIO.BOTH, callback=rotary_callback) 

def rotary_callback(pin):
    global last_state
    sig = GPIO.input(TunerDtPin)
    clk = GPIO.input(TunerClkPin)
    if (clk and clk!=last_state):
        if(clk!=sig): 
            print 1
        else: 
            print -1
    last_state=clk

def destroy():
    GPIO.cleanup()             # Release resource   

if __name__ == '__main__':     # Program start from here
    setup()
    try:
        while True:
            os.system("uptime")
            time.sleep(10)
    except KeyboardInterrupt:  
        destroy()

回调函数永远不会被调用...脚本每隔十秒就会继续打印“正常运行时间”调用输出。

但是,如果省略脚本中的系统调用(注释行就足够了),整个过程就像一个魅力打印'1'或'-1',取决于旋转方向,对于每个编码器步骤... .am我错过了一些明显的东西?

1 个答案:

答案 0 :(得分:0)

好吧,好像我在文档中搜索不够......

子进程模块不久...... https://docs.python.org/2/library/subprocess.html

os.system("uptime")替换subprocess.call("uptime")就可以了。