如何在irq()中运行irq()?或在secend irq上禁用一个irq?

时间:2019-06-03 16:51:33

标签: python nodemcu micropython

在主函数中,我有一个爆震传感器,运行它的下一个函数,在下一个函数中,我使用了irq()。但是在secend函数中,irq不起作用。如何解决呢?或使用其他方式?

我希望设备处于待机模式并通过敲门运行enter_password()函数。 敲一敲,enter_password()开始。完成后进入待机模式,等待新的敲击再次运行enter_password()。

一击必须运行enter_password()并通过5次循环从用户那里获得密码。每一次循环给出1或2或...或9击。

例如: 1敲>>运行应用程序>>运行enter_password()

对于我范围4 >> 5循环

循环1 >> 1敲>>我的通行证>> 1

循环2 >> 7响>>我的通行证>> 17

loop3 >> 4响>>我的通行证>> 174

循环4 >> 0敲>>我的通行证>> 1740

循环5 >> 2响>>我的通行证>> 17402

我的通行证>> 17402

如果确定>>通过我的数据库中的另一个函数打开#serach的门,然后返回确定或不确定 其他>>没什么

进入待机状态,等待1次敲击以一次又一次地运行应用程序。

我在nodemcu上使用micropython。 tnx帮我


num_knock = 0


def main():
   .
   .
   .
   while True:
       P5 = Pin(5, Pin.IN)
       P5.irq(trigger=Pin.IRQ_RISING , handler=enter_password() ) //ONE IRQ  



def enter_password(P): 
    print("enter password starting")
    p5 = Pin(5, Pin.IN)
    door_password=""
    for i in range(5):
       global num_knock 
       num_knock = 0
       chk_time = utime.time() + 12
       while utime.time() <= chk_time:
           p5.irq(trigger=Pin.IRQ_RISING , handler=callback ) #TWO IRQ - BUT NOT WORK - not call  callback 
    door_password += str(num_knock )
    return


def callback(p):
   global num_knock 
   if num_knock < 9 :
        num_knock += 1
   led_num_knock = Pin(4, Pin.OUT)
   led_num_knock.on()
   utime.sleep_ms(200) 
   led_num_knock.off() 
   return

1 个答案:

答案 0 :(得分:0)


def main():
    starter = Pin(5, Pin.IN)
    webserver()
    while True:
        if starter.value()==1:   #use while anf if for one IRQ
            print("enter password fun")
            led_on_off(3,600)
            p5 = Pin(5, Pin.IN)
            door_password=""
            for i in range(5):
                print("range %i" %i)
                global num_kenok
                num_kenok = 0
                chk_time = utime.time() + 12
                while utime.time() <= chk_time:
                    p5.irq(trigger=Pin.IRQ_RISING ,  handler=callback )
                door_password += str(num_kenok)
                led_on_off(1,500)
            led_on_off(5,300)
            find_password(door_password)