uthred Geschrieben 29. Juli 2013 Teilen Geschrieben 29. Juli 2013 Hi ich habe gerade ein kleines Verständnisproblem bei meinem Projekt. Ich habe einen Mikrokontroller der je nach Eingabe bestimmte Werte liefert. Eine Java-Server-Applikation soll nun mit den Mikrokontroller kommunizieren, dazu suche ich den richtigen USB-Port, öffne ihn und starte die Streams (Input/Output). Mit einem EventListener prüfe ich ob Daten vorhanden sind. Nun habe ich das Problem, das mit der Beispieleingabe "OC" Daten einmal (vom Mikrokontroller) gesendet werden, diese aber anscheinend dauerhaft zur Verfügung stehen und dadurch obwohl nur einmal gefordert immer und immer wieder bearbeitet wird. Darum die Frage, benutze ich im Moment vielleicht einen falschen EventListener, denn in der Doc steht "Data available at the serial port. This event will be generated once when new data arrive at the serial port. Even if the user doesn't read the data, it won't be generated again until next time new data arrive."? public synchronized void serialEvent(SerialPortEvent oEvent) { try { output.write("OC\n".getBytes()); } catch (Exception e) { System.err.println(e.toString()); } if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) { try { ...}catch (Exception e) { System.err.println(e.toString()); }} Der Mikrokontroller sendet erst Daten wenn er eine Eingabe erhält. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schiller256 Geschrieben 29. Juli 2013 Teilen Geschrieben 29. Juli 2013 Da musst du schon mal was genauer werden. Welche Mikrokontroller nutzt du mit welchen java libraries? Sonst wird das hier ein wildes raten was es sein könnte. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
uthred Geschrieben 29. Juli 2013 Autor Teilen Geschrieben 29. Juli 2013 Ok Ich benutze den Arduino und benutze die SerialPort-Libaries von sun: import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.util.Enumeration; import javax.comm.SerialPort; import javax.comm.SerialPortEvent; import javax.comm.SerialPortEventListener; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schiller256 Geschrieben 29. Juli 2013 Teilen Geschrieben 29. Juli 2013 Meine letzten Mikrocontroller Versuche sind etwas her aber wieso schreibst du in der event Methode als erstes erstmal wieder in den Outputstream? Was macht dein Controller damit? Kann es sein das er im Moment so eingestellt ist das alles was in den Controller rein kommt sofort wieder gesendet wird? Du so also eine Endlosschleife bekommst. Ansonsten versuche dich erstmal mit folgenden Tutorial Arduino Playground - Java damit hatte ich vor längerem erfolg gehabt. Leider habe ich meine Hardware im Moment nicht in der nähe das ich es selbst noch mal versuchen könnte. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
uthred Geschrieben 30. Juli 2013 Autor Teilen Geschrieben 30. Juli 2013 Hi danke für den Tipp Ich habe jetzt die Funktion ausgelagert, der EventListener hört jetzt auf das "ready" vom Mikrokontroller, sendet dann die Daten und verarbeitet sie. Beim nächsten Schritt habe ich nur eine Verständnissfrage, wenn man die Java-Applikation starten soll, soll es eine Start-Methode geben, diese startet den Kontroller und der Eventlistener passt die Daten ab, gleichzeitig soll eine Getter-Methode Eben jene Werte jederzeit nach außen liefern können. Dafür muss ich Multithreading verwenden, oder? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schiller256 Geschrieben 31. Juli 2013 Teilen Geschrieben 31. Juli 2013 Kannst du das etwas genauer beschreiben? Denn ich verstehe die Frage nicht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
uthred Geschrieben 1. August 2013 Autor Teilen Geschrieben 1. August 2013 Ok, also der Mikrokontroller wird als Klassenobjekt initialisiert, dabei wird die Verbindung (zum Mikrokontroller) aufgebaut und ein Eventlistener schreibt die erhaltenen Daten in Variablen. Eine Get-Methode greift diese ab und liefert diese gebündelt in einem Array zurück. Der Hauptthread der Klasse wird für 1000 Sekunden am Leben erhalten, damit weitere Daten ausgelesen werden können. Initialisiert man nun diese Service-Klasse bekommt man mit der oben genannten Get-Methode die Daten, welche allerdings anfangs noch leer sind. Mithilfe eines weiteren Threads rufe ich die Get-Methode solange auf bis ich Daten habe. Soweit zu meinem jetzigen Programm, die eigentliche Frage ist jetzt, gesetzt dem Fall das der Eventlistener zum selben Zeitpunkt Daten in die Variablen schreibt, wie die Get-Methode diese aufruft, bekomme ich dann noch die alten Daten, oder die neuen, oder irgendein Humbuk? (Ich kann diesen Fall im Moment leider nicht erzwingen um es selbst zu prüfen) p.s. Ich habe es jetzt mit Multithreading gemacht Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.