与树莓派的 GPIO 回调函数共享变量

NiB*_*iBE 5 python gpio raspberry-pi raspberry-pi2

我在 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)
Run Code Online (Sandbox Code Playgroud)

我只读取 0 个值,当我按下按钮时,我看到“按下!” 但变量没有改变。据我了解,原因是回调函数作为新线程被午餐,当然变量无法正确设置。有没有办法以某种方式将共享变量发送到回调函数?

非常感谢任何好的建议。

NiB*_*iBE 5

嗨,只是找到解决方案,我正在发布它,也许它会有用。使用global一词使其有效。

所以回调函数变为:

def my_callback(channel):
    global testVar
    print "Pressed!"
    testVar= 32
Run Code Online (Sandbox Code Playgroud)