我在python中编写了这个简单的测试程序,以检查当我在Raspberry Pi中按下按钮时是否发生了某些事情:
import RPi.GPIO as GPIO
from time import sleep
GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.IN, pull_up_down = GPIO.PUD_UP)
testVar=0
def my_callback(channel):
print "Pressed!"
testVar= 32
GPIO.add_event_detect(24, GPIO.FALLING, callback=my_callback, bouncetime=200)
while True:
print str(testVar)
sleep(0.5)
我只读取0个值,当我按下按钮时,我看到"按下了!"但变量并没有改变。据我所知,原因是因为回调函数是作为新线程发布的,当然变量无法正确设置。有没有办法以某种方式将共享var发送到回调函数?
非常感谢任何好的建议。
答案 0 :(得分:4)
您好,只是找到解决方案,我发布它也许它可能有用。 使用全球一词使其有效。
因此回调函数变为:
out = squeeze(sum(bsxfun(@and,I,permute(I,[1 3 2])),1));
out(1:size(out,1)+1:end)=0;
答案 1 :(得分:1)
我有一个让我抓狂的问题……将变量设置为global
是解决方案。根据{{3}}关于全局变量的教程的解释,只要未将变量标记为全局变量,变量就始终在函数的局部作用域内。使变量在函数内部全局具有两个结果:
a)如果不存在全局变量x:global x = 0
创建一个新的全局变量x
并将其值设置为0
b)如果已经存在全局变量x:global x = 0
将现有全局变量的值更改为0(与x = 0
相反,没有全局关键字,该关键字会将值0分配给局部作用域变量)。
所以 b 是在回调函数中更改全局变量的值的解决方案。