【求助帖】请及时确认最佳答案,下次提问时可以得到更多关注,问题可以更快解决在树莓派里面用按钮控制分别有轮询和中断两种模式,我先贴上代码


因为是用xdrp远程控制的 所以只能用截图了,原谅
轮询的那段代码最后执行出来时点动的效果,按下按钮LED就会亮 松开就灭
中断的那段代码在修改前代码是自锁效果(按下按钮后LED亮,松开灯依旧亮着)的,

这是代码
然后经过我修改后 也能实现点动效果
具体实现原理是在程序开头添加一个a变量初始赋值0 然后把中断边缘检测设置为升降沿每次的升和降都会向a变量+1,也就是说按钮松放会向a+2,然后再在每次升和降之后对a进行2的取余操作,如果取余为0就将LED的端口设置为低电平,
然后问题来了,由于对按钮进行了去抖动,区间是100ms,如果每次升降沿的过程在100ms中完成,第二次的降沿会被当成无效操作去抖动,如果将去抖动时间设置到50ms甚至30ms,那么去抖动效果就会很差,如果按下按钮的过程太过拖沓,闭合时间超过50ms的去抖动时间,那么超出这个时间,接收端口会错误接收到好多次的升降沿,LED疯狂闪。
然后我查询了资料,发现C语言里面有一个开关松放检测,能检测开关的闭合状态,请问各位dalao,python里面有没有这个函数。


因为是用xdrp远程控制的 所以只能用截图了,原谅
轮询的那段代码最后执行出来时点动的效果,按下按钮LED就会亮 松开就灭
中断的那段代码在修改前代码是自锁效果(按下按钮后LED亮,松开灯依旧亮着)的,

这是代码
然后经过我修改后 也能实现点动效果
具体实现原理是在程序开头添加一个a变量初始赋值0 然后把中断边缘检测设置为升降沿每次的升和降都会向a变量+1,也就是说按钮松放会向a+2,然后再在每次升和降之后对a进行2的取余操作,如果取余为0就将LED的端口设置为低电平,
然后问题来了,由于对按钮进行了去抖动,区间是100ms,如果每次升降沿的过程在100ms中完成,第二次的降沿会被当成无效操作去抖动,如果将去抖动时间设置到50ms甚至30ms,那么去抖动效果就会很差,如果按下按钮的过程太过拖沓,闭合时间超过50ms的去抖动时间,那么超出这个时间,接收端口会错误接收到好多次的升降沿,LED疯狂闪。
然后我查询了资料,发现C语言里面有一个开关松放检测,能检测开关的闭合状态,请问各位dalao,python里面有没有这个函数。