Interrupts in Micropython
Verfasst: Donnerstag 3. Dezember 2020, 14:33
Hallo Experten,
mit dem folgenden Script schalte ich beim Drücken eines Tasters über einen Interrupt eine LED ein
und beim loslassen wieder aus. Pin 5 ist initial auf HIGH (1) und geht beim Drücken des Tasters auf
LOW (0) und dementsprechend ist der irq Parameter trigger = Pin.IRQ_FALLING gesetzt:
(ich habe die while Schleife limitiert um bei einem Fehler im Code nicht in eine endlos Schleife zu kommen)
1. Was ich nicht verstehe ist, dass der Interrupt auch beim Loslassen anspricht, wenn Pin 5 von 0 wieder
auf 1 geht, wie das print statement anzeigt. Sollte m.e. nicht sein.
2. Es ist mir auch nicht klar warum ich im Haupt Code den led.value zuerst auf 0 und für das Loslassen
auf 1setzten muss, damit es funktioniert.
mit dem folgenden Script schalte ich beim Drücken eines Tasters über einen Interrupt eine LED ein
und beim loslassen wieder aus. Pin 5 ist initial auf HIGH (1) und geht beim Drücken des Tasters auf
LOW (0) und dementsprechend ist der irq Parameter trigger = Pin.IRQ_FALLING gesetzt:
(ich habe die while Schleife limitiert um bei einem Fehler im Code nicht in eine endlos Schleife zu kommen)
Code: Alles auswählen
from machine import Pin
from time import sleep
def handle_interrupt(pin):
global key_pressed
key_pressed = True
led=Pin(2,Pin.OUT)
button1=Pin(5, Pin.IN)
button1.irq(trigger=Pin.IRQ_FALLING, handler = handle_interrupt)
n = 0
while n < 10:
print('initial value:', button1.value())
sleep(2)
if key_pressed:
print('Interrupt detected')
led.value(0)
key_pressed = False
if button1.value() == 0:
led.value(1)
n += 1
auf 1 geht, wie das print statement anzeigt. Sollte m.e. nicht sein.
2. Es ist mir auch nicht klar warum ich im Haupt Code den led.value zuerst auf 0 und für das Loslassen
auf 1setzten muss, damit es funktioniert.