Zum Inhalt springen

mit Mikrokontroller kommunizieren


uthred

Empfohlene Beiträge

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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;

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...