Verhalten von PI4J - GpioFactory.getInstance();

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo,

    ich versuche PI4J zu verstehen. Wer kann helfen?
    (falls der Foren-Bereich der Falsche ist, bitte Hinweis)

    Man braucht ja eine Instanz des GpioControllers.

    Code
    final GpioController gpio = GpioFactory.getInstance();


    Jetzt GPIOs initialisieren (z.B. auf Output stellen, pullup Widerstand rein, Ausgang auf HIGH)
    Dann sollen die Pins irgendwas machen (z.B. LED ansteuern/blinken etc.).
    Zum Ende kann ich die Instanz des GpioControllers wieder schließen

    Code
    gpio.shutdown();

    FRAGEN: :s

    1) darf ich mehrere GPIO-Instanzen gleichzeitig/parallel laufen haben und GPIOs ansteuern? (gerne mit unterschiedlichem Bezeichner z.B. gpioA und gpioB)

    2) wenn ich mit .shutdown(); die Instanz beende, was passiert mit den GPIOs? Behalten sie ihren (letzten) Pegel bzw. ihre Funktion (z.B. PWM-Signal)

    3) was pasiert wenn ich wieder eine .getInstance öffne? Bleiben die Pegel der GPIOs wo sie gerade stehen oder wechseln die Pegel bei der Instanzierung "unkontrolliert"?

    Danke und Gruß
    Ocram

  • Das sind eigentlich schon eher Java oder Objekt-Programmierung Grundlagen Fragen.

    Also das .getInstance macht genau das was es sagt. Es gibt die eine Instanz des Objektes. So ein Konstrukt wird üblicherweise bei Singletons verwendet. Also kannst du davon ausgehen, das bei jedem Aufruf von .getInstance du im Endeffekt das selbe Objekt kriegst.
    Ob du das dann jetzt einmal gpioA und ein mal gpioB nennst in deienr Variablen ist relativ egal. Beide würden dann auf die gleiche Instanz zeigen, heißen nur anders.

    Das sollte dann auch die Frage nach dem Shutdown erübrigen. Die eine Instanz geht in den shutdown, also gild das auch für alle Variablen auf die du dir diese merkst.

    Shutdown ist dazu da, alle Pegel so zu setzen wie es am Anfang war. Also wenn du ein Pin auf High setzt und shutdown aufrufst wird dieser wieder zurückgestzt. Ein weiterer Aufruf von getInstance würde den dann nicht verändern.
    (Ich frag mich hier auch ob das Objekt überhaupt freigegeben wird, oder einfach nur ein Default-Zustand wieder hergestellt wird, aber im Endeffekt ist es für die Anwendung auch egal)

Jetzt mitmachen!

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