uthred Geschrieben 29. Juli 2013 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.
Schiller256 Geschrieben 29. Juli 2013 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.
uthred Geschrieben 29. Juli 2013 Autor 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;
Schiller256 Geschrieben 29. Juli 2013 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.
uthred Geschrieben 30. Juli 2013 Autor 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?
Schiller256 Geschrieben 31. Juli 2013 Geschrieben 31. Juli 2013 Kannst du das etwas genauer beschreiben? Denn ich verstehe die Frage nicht.
uthred Geschrieben 1. August 2013 Autor 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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden