Python 如何检测GPIO输入的变化raspberry pi

Python 如何检测GPIO输入的变化raspberry pi,python,raspberry-pi,gpio,Python,Raspberry Pi,Gpio,有没有一种方法可以检测树莓皮GPIO的变化而不使用无限循环 您可以使用以下方法检测上升或下降: 但您一次只能为下降或上升设置事件检测器。有没有办法不检查无限循环中的输入就可以执行此操作?此链接可能会有所帮助 基本上只需使用回调在上升或下降边缘执行任何您想要的操作,而不是轮询(您所描述的)您可以在事件检测上使用线程回调。根据,你可以使用这样的东西 GPIO.add\u event\u detect(频道,GPIO.RISING,callback=my\u callback) 其中事件可以是GPI

有没有一种方法可以检测树莓皮GPIO的变化而不使用无限循环

您可以使用以下方法检测上升或下降:


但您一次只能为下降或上升设置事件检测器。有没有办法不检查无限循环中的输入就可以执行此操作?

此链接可能会有所帮助
基本上只需使用回调在上升或下降边缘执行任何您想要的操作,而不是轮询(您所描述的)

您可以在
事件检测上使用线程回调。根据,你可以使用这样的东西

GPIO.add\u event\u detect(频道,GPIO.RISING,callback=my\u callback)

其中事件可以是
GPIO.RISING
GPIO.fall
GPIO。两者都是
my_callback
是一个普通的python函数,其行为类似于在不同线程中运行的ISR


希望能有帮助

如果你有一个简单的MCP3004或MCP3008集成电路,它是一个模数转换器,你可以做更多的输入。下面是一些示例代码,让您开始学习。以及如何将它们连接到你的pi

import spidev

#this fucntion can be used to find out the ADC value on ADC 0
def readadc_0(adcnum_0):
    if adcnum_0 > 7 or adcnum_0 < 0:
        return -1
    r_0 = spi_0.xfer2([1, 8 + adcnum_0 << 4, 0])
    adcout_0 = ((r_0[1] & 3) << 8) + r_0[2]
    return adcout_0

reading= readadc_0(0))
导入spidev
#此功能可用于查找ADC 0上的ADC值
def读取ADC_0(ADC_0):
如果adcnum_0>7或adcnum_0<0:
返回-1

r_0=spi_0.xfer2([1,8+adcnum_0 Oops,我错过了
GPIO。两者都是
位。
import spidev

#this fucntion can be used to find out the ADC value on ADC 0
def readadc_0(adcnum_0):
    if adcnum_0 > 7 or adcnum_0 < 0:
        return -1
    r_0 = spi_0.xfer2([1, 8 + adcnum_0 << 4, 0])
    adcout_0 = ((r_0[1] & 3) << 8) + r_0[2]
    return adcout_0

reading= readadc_0(0))