我是python中的新手(虽然在编程和一般IT方面不是新手)所以请原谅我,如果我要问一些小事......
我有以下设置:
以下示例代码的行为对我来说无法解释(我想这与输入的具体类型无关):
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我错过了一些明显的东西?
答案 0 :(得分:0)
好吧,好像我在文档中搜索不够......
子进程模块不久...... https://docs.python.org/2/library/subprocess.html
用os.system("uptime")
替换subprocess.call("uptime")
就可以了。