Eigene Funktion und Schleife gleichzeitig laufen lassen?

  • Hallo, ich habe ein Problem.

    Ich habe eine Schleife, die testet, welcher Knopf auf dem Display (Pygame programm, das läuft soweit.) gedrückt wird.
    Wird der rote gedrückt, geht eine LED aus.
    Wird der Grüne gedrückt, an.
    und wenn der Blaue gedrückt wird soll es blinken, bis der rote oder grüne Knopf gedrückt wird.

    ich habe EIne IF-Abfrage (in einer schleife), die testet, ob der blaue gedrückt wird. wenn das der fall ist, wird die Funktion LedBlink() aufgerufen. Die sagt nur, dass Der GPIO angehen soll, warten, ausgehen und wieder warten. Das steht in einem While loop. Wenn die Funktoin läuft, kommt es halt nichtmehr zur abfrage nach dem grünen und Roten Knopf und das Läuft endlos weiter. kann man die Blink-Schleife und die Knopf-schleife gleichzeitig laufen lassen?
    Danke

    :danke_ATDE:

  • Eigene Funktion und Schleife gleichzeitig laufen lassen?? Schau mal ob du hier fündig wirst!

  • Hallo Samu,

    was Du vorhast, programmiert man in der Regel so:

    - die drei Taster werden über einen Interrupt abgefragt

    - in jeder der drei Interrupt-Routinen wird ein Parameter gesetzt (z.B. [font="Courier New"]modus = grün[/font], [font="Courier New"]modus = rot[/font], [font="Courier New"]modus = blink[/font])

    - in der Hauptereignisschleife reagierst Du einfach nur auf den Wert der Variable [font="Courier New"]modus[/font] (also betreffende LED einschalten, alle anderen aus; wenn es blinken soll, dann schaltest Du mal ein und bei einem der nächsten Durchläufe wieder aus (hier kann z.B. ein Zähler erhöht werden; wenn ein bestimmter Wert erreicht wird, wird umgeschaltet und der Zähler zurückgesetzt).


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (7. November 2015 um 14:29)

  • Allo Samu,

    es geht sogar noch einen Tacken einfacher. Es gibt Blink-LEDs, die bei konstantem Pegel blinken (wie eine normale LED leuchtet) und sonst ausgeschaltet ist.

    Somit reicht es, wenn Du einfach nur je nach Modus einen GPIO-Pin auf Ausgang setzt und je nach dem Inhalt der Variablen [font="Courier New"]modus[/font] auf LOW oder HIGH setzt.

    Einfacher geht's dann nicht. Dann entfällt auch der Zähler.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Die Art, wie so etwas in Software mit Ereignisschleife (mainloop) umgesetzt wird - und darum handelt es sich bei pygame - sind einfach Timer-Ereignisse. In pygame wird das ueber https://www.pygame.org/docs/ref/time.….time.set_timer erledigt. Du erzeugst einen Time mit einem Timeout des Blinkintervalls (also wenn 1sek an, 1sek aus, dann Timer 1000ms = 1Sek). Die ID muss wie angegeben in einem Bereich zwischen pygame.USEREVENT und pygame. NUMEVENTS liegen - also zb einfach pygame.USERVENT wenn das dein einziges ist.

    Kleines Programm fuer's Konzept:

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!