Interrupts in Micropython

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
luemar
User
Beiträge: 20
Registriert: Samstag 4. April 2015, 19:36

Hallo Experten,
möchte meine ziemlich alten elektrischen Rolläden über einen ESP32-S steuern sowohl manuell
über Taster/Schalter wie auch automatisch bzw. zeitgesteuert.

Manuell soll der Rolladen laufen, bzw. das entsprechende Relais schalten solange ich die
entsprechende Tasten drücke.

Ich habe das Script unten gefunden womit ein Relais (aktuell eine LED) bei Tastendruck bzw. aufsteigender Flanke (.....Pin.IRQ_RISING)....am Pin 5 für eine in der Variablen timeOn vorgegebenen Zeit (ein)geschaltetwerden kann.
Wie muss ich das Script ändern, dass beim Loslassen der Taste bzw. absteigender Flanke
(...Pin.IRQ_FALLING...) das Relais wieder zurück bzw. die LED abschaltet.
:geek:
luemar
User
Beiträge: 20
Registriert: Samstag 4. April 2015, 19:36

jetzt noch das Script dazu:

Code: Alles auswählen

from machine import Pin
from time import sleep

timeOn = 3
key_pressed = False

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_RISING, handler = handle_interrupt)

while True:
  if key_pressed:
    print('Interrupt detected')
    led.value(1)
    sleep(timeOn)
    led.value(0)
    key_pressed = False
  else:
    led.value(0)
[Code]
luemar
User
Beiträge: 20
Registriert: Samstag 4. April 2015, 19:36

bin weiter am Problem bearbeiten:
Wenn ich im obigen Script den Taster loslasse und Pin 5 auf 1 bzw. 3.3V zurückgeht wird ebenfalls ein interrupt
ausgelöst obwohl in Zeile 11 button1.irq(trigger=Pin.IRQ_RISING, .....) eingetragen ist. Sollte doch nicht sein oder ?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Öh. Auf 3V3 zu gehen ist doch genau eine steigende Flanke.
Antworten