как запустить irq () в irq ()? или отключить один IRQ при отправке IRQ? - PullRequest
0 голосов
/ 03 июня 2019

У меня есть датчик детонации, когда он в основной функции, то есть он запускает следующую функцию, а в следующей функции я использую irq (), но не работаю irq в функции secend. как это исправить ??? или использовать другой способ ??

Я хочу, чтобы устройство находилось в режиме ожидания и запускало функцию enter_password () с помощью стука. одним нажатием запускается enter_password (). после завершения перейдите в режим ожидания и дождитесь повторного запуска нового удара enter_password ().

одним ударом необходимо запустить enter_password () и получить пароль от пользователя по 5 циклам. Каждый цикл дает 1 или 2 или ... или 9 ударов.

Например: 1knock >> запустить приложение >> запустить enter_password ()

для диапазона i 4 >> 5 петель

цикл 1 >> 1 стук >> мой проход >> 1

петля 2 >> 7knock >> мой проход >> 17

loop3 >> 4knock >> мой проход >> 174

цикл 4 >> 0 стук >> мой проход >> 1740

петля 5 >> 2 стука >> мой проход >> 17402

мой пропуск >> 17402

если все в порядке >> откройте дверь #serach с помощью другой функции в моей базе данных и вернитесь в порядке или не в порядке еще >> ничего

и перейдите в режим ожидания и подождите 1 стук, чтобы запустить приложение, и снова и снова.

я использую micropython на nodemcu. 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 голосов
/ 12 июля 2019

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)
...