Pi4J Bibliothek

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,

    da sich meine Aufgabenstellung leicht geändert hat und mein altes Thema somit nicht mehr aktuell ist möchte ich ein neues Thema starten.
    LINK zum alten Thema: Oracle Java ME Embedded 3.3 for Raspberry Pi

    Ich soll nun mit der Pi4J - Bibliothek einen Lauflicht und ein Reaktionsspiel programmieren. Auf der Seite http://www.pi4j.com habe ich bereits die Beispiele durchgearbeitet und das Lauflicht programmiert. Beim Reaktionsspiel habe ich aber leichte Probleme.

    Das Programm soll wie folgt funktionieren:
    Es wird auf dem Bildschirm ein Countdown ausgegeben der von 3 Sek. auf 0 Sek. herrunter zählt. Danach soll eine LED leuchten. Ziel ist es nun die LED so schnell wie möglich auszuschalten. Die benötigte Zeit soll mit der Methode System.nanoTime(); ausgegeben werden. Dazu habe ich bereits auf der oben beschriebenen Internetseite das Beispiel "Trigger GPIO on Events" erweitert/verändert.

    Was bisher funktioniert: Der Countdown wird herruntergezählt und die LED leuchtet. Mit einem Tastendruck geht die LED kurz aus aber gleich wieder an. Mit welcher Methode schaffe ich es, dass die LED bei einem Tastendruck ausbleibt? Hat jemand Erfahrung mit dieser Bibliothek und kann mir auf die Sprünge helfen, wo und vorallendingen wie ich diese Übersicht/Seite ( LINK: http://pi4j.com/apidocs/index.html ) zu lesen bzw. zu verstehen habe?

    Ich habe zwar schon einfache Dinge in Java programmiert aber ich habe noch nie eine solche Übersicht oder Seite benutzen müssen um die Klassen und Methoden zu suchen.

    Vielen Dank für eure Zeit und Hilfe!

    Gruß
    Steeef

    • Offizieller Beitrag

    Das ist wie bei jeder Doku. Zuerst hast du eine Übersicht welche Pakete (in python wären es Module) du zur Verfügung hast. Für gpio steuerung, trigger, eventhandling usw. Wenn du dann auf eines dieser Module gehst, folgt dann die Beschreibung der darin enthaltenen Klassen sowie der in den Klassen enthalten Methoden (sowie deren erforderliche und optionale Paramater, ). Desweiteren findest du zu jeder Klasse/methode ne Beschreibung und wenn du glück hast auch ein Beispiel.

    • Offizieller Beitrag

    Ich glaube dein Problem / Aufgabe wirst du nicht auf anhieb in der Doku von Pi4J finden...
    Mich würd eher Interessieren wie du die LEDs genau ansteuerst? Dann könnte ich dir evtl ein paar Tipps geben ;)


  • Ich glaube dein Problem / Aufgabe wirst du nicht auf anhieb in der Doku von Pi4J finden...
    Mich würd eher Interessieren wie du die LEDs genau ansteuerst? Dann könnte ich dir evtl ein paar Tipps geben ;)


    Das ist ein ganz einfaches Lauflicht, welches in einer for Schleife 10 mal durchlaufen wird.

    Gruß Steeef

    • Offizieller Beitrag

    Irgendwie fehlte mir jeglicher Zusammenhang zwischen dem Spiel und deiner Lauflicht...
    Nachdem dbv mich aufgeklärt hat, dass es da kein Zusammenhang gibt bin ich erleichtert :P

    Aber dennoch wie sieht dein Programm nun aus? Sowas sollte man immer mal zeigen wenn man Hilfe sucht ;)
    Ohne das Programm zu sehen würde ich einfach mal behaupten das du alles soweit hast bis auf ein Klassen Attribut was dir fehlt:
    Du brauchst zbs ein Boolean um quasi den Zustand deiner LED darzustellen... Am Anfang des Spiels setzt du diese auf true und die Lampe leuchtet... Sobald dein Button Listener aktiviert wurde setzt du den Boolean dann auf false und die lampe bleibt solange aus bis du den Boolean wieder auf High setzt...

  • Hallo Turael,

    du hast recht, es besteht kein Zusammenhang zwischen dem Lauflicht und dem Spiel. Der hier gezeigte Code ist das Programm für mein Lauflicht. Oder was meinst du mir deiner Frage, ich solle mein Programm zeigen?

    Meine bisherigen Versuche mit dem Spiel kann ich leider erst morgen in das Forum stellen, da ich den Raspberry samt Programm gerade nicht da habe.

    Deine Behauptung bestätige ich voll und ganz. Ich bin auf der Suche nach der fehlenden Methode welche mir einen bool Wert zurück gibt. Diesen kann ich dann vergleichen und auswerten. Aber genau diese Methode suche ich noch. Deshalb war meine Frage ob mir jemand helfen kann die Übersichtseite ( LINK: http://pi4j.com/apidocs/index.html ) besser zu verstehen. Das würde mir die Suche erleichtern.

    Gruß und Danke!
    Steeef

    • Offizieller Beitrag

    Und genau deswegen habe ich in meinem ersten Post gesagt das du die Antwort nicht unbedingt in der Api von Pi4J findest ;)

    diesen Boolean baust du dir selber ;)



  • Und genau deswegen habe ich in meinem ersten Post gesagt das du die Antwort nicht unbedingt in der Api von Pi4J findest ;)

    diesen Boolean baust du dir selber ;)


    Ok danke zunächst mal für die Antwort! :)

    Mit Pin.999 meist du den GPIO Pin an dem die LED hängt oder?

    Muss meine obige Aussage korrigieren. Kann erst am Donnerstag weiter testen. Ich melde mich dann mit den Ergebnissen.

    Auf jeden Fall, vielen Dank für deine Mühen.

    Gruß
    Steeef

    Einmal editiert, zuletzt von Steeef (29. Oktober 2013 um 20:48)

  • Hallo,

    so ich habe jetzt gerade am Projekt weitergearbeitet. Allerdings habe ich noch ein Problem. Hier ist der Code:

    Wenn ich dies kompiliere gibt es mir folgenden Fehler aus:

    Zitat


    STW_Reaktionsspiel.java:69: error: local variable SCHLEIFE is accessed from within inner class; needs to be declared final
    SCHLEIFE = false;
    ^
    1 error

    Wenn ich das die bool-Variable SCHLEIFE in final boolean SCHLEIFE = false; umändere geht zwar der Fehler weg. Aber es passiert trotzdem nicht das was ich möchte, nämlich das die while Schleife nicht mehr ausgeführt wird.

    Turael: Ich hoffe ich habe deine, oben beschriebene, Idee richtig verstanden.

    Gruß
    Steeef

    • Offizieller Beitrag

    Also zunächst solltest du alles was in der main Methode steht steht in eine Klasse schreiben... dann sollte der Fehler auch weg gehen ;)
    Der Fehler kam auf, weil du in der Listener Methode (handleGpioPinDigitalStateChangeEvent) versuchst dein Boolean einen Wert zuzuweisen dies klappt aber nicht da das Boolean kein Attribut sondern nur eine Varibale ist... Für wirklich einfache Programme kannst du die Main benutzen... aber für so ein kleines Spielchen solltest du den Programmcode in Klassen auslagern... OOP hilft dir ;)



    Verdammt... Ich wollte erst nur den groben Rahmen liefern wie die Klasse aussehen sollte... un nun ist es beim schreiben doch mehr geworden :P
    Aber ich denke nicht das du das 1:1 benutzen kannst - aber den Rest solltest du alleine Lösen können ;)

    Ich bin ein gefallener Engel namens Turael.

    Einst vor langer Zeit rebelierte ich im Himmel bis Gott mich auf die Erde verbannte.

    Doch meine taten werden kein ende finden....

Jetzt mitmachen!

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