python - 如何确定回调中的python范围
问题描述
在使用 python3 的树莓派上,我想计算传入 I/O 上的脉冲数。为了测试,我整理了一个简单的程序。
import signal
import sys
import RPi.GPIO as GPIO
import time
iTP = 40
ictr=0
def signal_handler(sig, frame):
GPIO.cleanup()
print("\nOut of here!")
sys.exit(0)
def button_pressed_callback(channel):
global ictr
ictr+=1
def main():
print("Here we go!")
GPIO.setmode(GPIO.BOARD)
GPIO.setup(iTP, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(iTP, GPIO.FALLING,
callback=button_pressed_callback, bouncetime=20)
signal.signal(signal.SIGINT, signal_handler)
sctr=0
ictr=1
while 1:
time.sleep(1)
print("====")
while sctr==ictr:
time.sleep(1)
print("busy")
while sctr!=ictr:
time.sleep(2)
print("Cnt={}".format(sctr))
ictr=0
sctr=0
main()
我想在回调中收集一个脉冲计数,然后处理main()
. 脉冲实际上是在回调中收集的 - 即按ictr
预期递增 - 但并不是反映这一点。即使在回调中发生变化(通过打印验证),我也永远不会越过这条线。我尝试了各种全局声明组合,但似乎无法让这个变量在回调和. 非常感谢任何帮助。ictr
main()
print("busy")
ictr
main()
解决方案
通过我在各个地方找到的信息,我能够成功创建和使用以下代码。我不清楚为什么我在这里没有相同的范围问题,但这很好用。
import RPi.GPIO as GPIO
class Handle_Interrupts:
intCnt=0
def __init__(self,ipin, bouncetime):
self.ipin=ipin
self.bouncetime=bouncetime
GPIO.setmode(GPIO.BOARD)
GPIO.setup(self.ipin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(self.ipin, GPIO.FALLING,
self.int__callback, self.bouncetime)
def int__callback(self,channel):
self.intCnt+=1
def getCnt(self):
return(self.intCnt)
def clrCnt(self):
t=self.intCnt
self.intCnt=0
return(t)
推荐阅读
- php - 在前端显示管理员使用 ACF 插件手动创建的用户的用户配置文件字段
- python - 使用python缺少json信息
- c++ - 未知类型的对齐堆分配
- pandas - 使用 panda 数据文件和多个变量在 Spyder 中绘制实时图表
- python - 我的代码的一部分不起作用,我不知道为什么(python)
- python - 所以写了这段代码来打开网络摄像头的视频,我想保存打开摄像头但文件没有停止更新的日志
- r - 无法在 m1 mac 上的 R 中安装“robustHD”
- r - 如何从一元组中删除(自定义)停用词但将它们保留在二元组中?
- typescript - 如何正确地将 VScode 的语言服务器扩展与内部的客户端和服务器捆绑在一起
- python - 抓取网站时获取多个类的内容