Serielle Kommunikation

Lorenz

Mitglied
Hallo Forum,

ich habe eine Frage zu einem Kommunikationsproblem.
Ich kommuniziere mit Java mit meinem uC.
Habe ich die Möglichkeit mit folgendem Code das Byte b nur ein einziges mal zu senden und dann die Kommunikation zu beenden?

Zeile 75 - 77.

[Java]
import java.io.InputStream;
import java.io_OutputStream;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import java.util.Enumeration;

public class Serial implements SerialPortEventListener {
SerialPort serialPort;
/** The port we're normally going to use. */
private static final String PORT_NAMES[] = {"COM4"};
/** Buffered input stream from the port */
private InputStream input;
/** The output stream to the port */
private OutputStream output;
/** Milliseconds to block while waiting for port open */
private static final int TIME_OUT = 2000;
/** Default bits per second for COM port. */
private static final int DATA_RATE = 115200;

public void initialize() {
CommPortIdentifier portId = null;
Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();

// iterate through, looking for the port
while (portEnum.hasMoreElements()) {
CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
for (String portName : PORT_NAMES) {
if (currPortId.getName().equals(portName)) {
portId = currPortId;
break;
}
}
}

if (portId == null) {
System.out.println("Could not find COM port.");
return;
}

try {
// open serial port, and use class name for the appName.
serialPort = (SerialPort) portId.open(this.getClass().getName(),
TIME_OUT);

// set port parameters
serialPort.setSerialPortParams(DATA_RATE,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);

// open the streams
input = serialPort.getInputStream();
output = serialPort.getOutputStream();

// add event listeners
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
} catch (Exception e) {
System.err.println(e.toString());
}
}


/**
* Handle an event on the serial port. Read the data and print it.
*/
public synchronized void serialEvent(SerialPortEvent oEvent) {
if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
int available = input.available();
byte chunk[] = new byte[available];
input.read(chunk, 0, available);
String Send ="10000";
b = Send.getBytes();
output.write(b);



// Displayed results are codepage dependent
System.out.print(new String(chunk));
} catch (Exception e) {
System.err.println(e.toString());
}
}
// Ignore all the other eventTypes, but you should consider the other ones.
}

public static void main(String[] args) throws Exception {
Serial main = new Serial();
main.initialize();
System.out.println("Started");


}
}

[/Java]

Grüße
 
S

Spacerat

Gast
Wäre mal gut zu wissen, was für ein uC das ist. und wie er programmiert ist. ausserdem lässt sich eine Kommunikation auf mehrere Arten beenden.
1. man hört einfach auf, Daten zu senden bzw. zu empfangen. (removeEventListener)
2. man schliesst die Datenströme.
3. man schliesst den Port.

Bei 1. und 2. bleibt der Port definitiv belegt. bei 3. weis ich nicht, ob zu Freigabe die JVM beendet werden muss, dass andere Software ausserhalb Java drauf zugreifen kann. Auf jeden Fall lässt er sich aber von Java aus afaik erneut öffnen.
 

Lorenz

Mitglied
Moin,

es handelt sich um einen Arduino Uno.

Das "einfach" aufhören wäre warscheinlich am besten, so dass ich gegebenenfalls wieder einen neuen Wert senden kann. Welche möglichkeiten habe ich um "einfach" aufzuhören zu senden? Thread.sleep bringt mich ja hier nicht weiter oder? Ich müsste das ganze solange unterbrechen bis ich einen neuen Wert senden will. Mein Problem ist, dass ich nicht genau weis wo ich das ganze unterbrechen kann!

Grüße
 
S

Spacerat

Gast
Ach der UNO... ;)
Wenn der so programmiert ist, dass er ständig Daten sendet, musst du wohl das EventSystem des Seriellen Ports abstellen, der Arduino sendet seine Daten dann allerdings in den Hades. Besser wäre es, wenn man im Arduino ein "Kommunikations-Protokoll" realisiert mit dem man ihm sagt, wann er senden darf und wann nicht. Ich müsste dazu mal was suchen.
 

Lorenz

Mitglied
Hey Spacerat,

den Uno habe ich eigentlich so weit im griff, der Sendet nur wenn ich ihm das sage.
Mein Problem ist eher, dass mein Java Programm (s.oben) mir die ganze Zeit das erwähnte Byte sendet und ich das eigentlich nur einmalig machen will.

Grüße
 
S

Spacerat

Gast
Tja... aus meiner sicht sieht das gerade so aus:
1. Byte b in deinem Code ist ist scheinbar nirgendwo definiert und würde durch "10000".getBytes() ein Bytearray aus 5 Bytes (49, 48, 48, 48, 48) ergeben, welche dann natürlich auch gesendet werden.
2. Der UNO kann innerhalb eines Loops maximal 128 Bytes (Standard-Serial) senden, diese können von der JVM auch innerhalb eines SerialPortEvents nach "chunk" gelesen werden. Prinzipiell bedeutet ein "Serial.print()" auf dem Arduino exakt ein Event in der JVM.
Sofern die relevanten Zeilen (75 - 77) öfters als einmal aufgerufen werden, kann daraus eigentlich nur folgen, dass auf der Arduino-Seite "Serial.print()" mehr als nur einmal aufgerufen wird. Das die Loop-Methode dort kontinuierlich aufgerufen wird muss ich dir nicht erzählen denk' ich. Vllt. postest du mal den relevanten Arduino-Code möglichst in CODE-Tags.
Eine weitere Fehlerquelle könnte die Beschaltung der digitalen Pins 0 und 1 des UNOs sein, welche bei aktiviertem SerialPort als TX und RX extern verwendet werden und über UART und USB direkt an den virtuellen COM-Port gelangen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Serielle Kommunikation Allgemeine Java-Themen 20
J Daten über serielle Schnittstelle empfangen Allgemeine Java-Themen 4
Q Selbständig ActionEvent auslösen zum Daten senden über serielle Schnittstelle Allgemeine Java-Themen 7
stroggi Serielle Schnittstelle (jssc) - Flush benötigt? Allgemeine Java-Themen 2
ms_cikar RS232 Serielle Baudrate automatisch einstellen Allgemeine Java-Themen 1
T Input und Outputstream , serielle Schnittstelle Allgemeine Java-Themen 1
S Threads Serielle Schnittstelle mit Listener / Aufrufendes GUI Allgemeine Java-Themen 4
L Java und Serielle COM Ports Allgemeine Java-Themen 4
M Serielle Schnittstelle ansteuern - mit Processing Bibliothek Allgemeine Java-Themen 4
R Virtuelle Serielle Schnittstellen mit RXTX Allgemeine Java-Themen 2
J javax.comm findet serielle ports nicht Allgemeine Java-Themen 2
I Serielle Schnittstelle Allgemeine Java-Themen 5
N Serielle Schnittstelle / COM-Port auslesen und die empfangenen Daten verarbeiten Allgemeine Java-Themen 1
O Zugriff auf Serielle Schnittstelle - Keine Ports gefunden. Allgemeine Java-Themen 8
G Serielle Verbindung zu einem Handy Allgemeine Java-Themen 3
G serielle Schnittstelle einlesen Allgemeine Java-Themen 13
P serielle Schnitttstelle Allgemeine Java-Themen 14
D Datenübertragung über serielle Schnittstelle Allgemeine Java-Themen 4
G Problemme mit serielle Schnittstelle Allgemeine Java-Themen 9
MQue serielle Schnittstelle Allgemeine Java-Themen 2
E serielle Schnittstelle Allgemeine Java-Themen 6
N Serielle Schnittstelle ansprechen Allgemeine Java-Themen 9
G javax.comm bzw serielle Schhnittstelle? Allgemeine Java-Themen 2
J serielle Schnittstelle unter Linux Allgemeine Java-Themen 3
W Zugriff auf lokale serielle Schnittstelle via Applet Allgemeine Java-Themen 3
A Serielle Schnittstelle | Barcodescan | ohne Tastatur Allgemeine Java-Themen 11
G Zugriff auf serielle Schnittstelle mit Java 1.5.0 Allgemeine Java-Themen 11
J serielle schnittstelle unter linux Allgemeine Java-Themen 3
B OOP Kommunikation zwischen Objekten? Allgemeine Java-Themen 5
CptK Backpropagation parallelisieren: Kommunikation zwischen den Threads Allgemeine Java-Themen 7
L Kommunikation zwischen C# und Java? Allgemeine Java-Themen 5
R PIPE Kommunikation mit Prozess blockiert Allgemeine Java-Themen 0
M Checksummenprüfung bei Client Server kommunikation Allgemeine Java-Themen 3
D Interthread-Kommunikation Allgemeine Java-Themen 6
S Threads Kommunikation zwischen SocketThread und WorkerThread Allgemeine Java-Themen 11
0 Lösungsweg Client Server Kommunikation Fehlermeldung ausgeben Allgemeine Java-Themen 12
L Software-Design: Kommunikation mit SerialPort (RXTX) Allgemeine Java-Themen 2
A Kommunikation zwischen 2 Jar-dateien Allgemeine Java-Themen 16
S Kommunikation von Core und GUI über Schnittstellen Allgemeine Java-Themen 2
P Komponenten kommunikation Allgemeine Java-Themen 7
G Implementierung einer Kommunikation Allgemeine Java-Themen 7
B SerialPort Kommunikation - Pufferüberlauf Allgemeine Java-Themen 6
0 Sandbox und Applet Kommunikation Allgemeine Java-Themen 9
E kommunikation zwischen Fenstern Allgemeine Java-Themen 3
H Java C++ Interprozess Kommunikation Allgemeine Java-Themen 7
D Klassen Kommunikation Allgemeine Java-Themen 11
M Applet Servlet Kommunikation ein Problem bei externem Server Allgemeine Java-Themen 3
F Kommunikation zw 2 Java-Programmen mit unterschiedl Compiler Allgemeine Java-Themen 13
G Kommunikation mit Remotegeräten Allgemeine Java-Themen 2
A Kommunikation zwischen C++ und Java-Programm Allgemeine Java-Themen 4
J Kommunikation mit USB Gerät, das Midi-Signale sendet Allgemeine Java-Themen 4
G Kommunikation mit der seriellen Schnittstelle Allgemeine Java-Themen 6
H Kommunikation mit einem c-Prozess funzt nicht richtig Allgemeine Java-Themen 5
C Pattern für Kommunikation gesucht Allgemeine Java-Themen 3
B Kommunikation mit entferntem Thread Allgemeine Java-Themen 6
O kommunikation zw. objekten Allgemeine Java-Themen 7
G Kommunikation von zwei Java-Programmen Allgemeine Java-Themen 3
N Inter-Thread-Kommunikation Allgemeine Java-Themen 3
M Kommunikation mit externem Programm ueber Linux-Pipes Allgemeine Java-Themen 4
M Kommunikation zwischen 2 Programmen Allgemeine Java-Themen 7
G Kommunikation zwischen Threads und Gui Allgemeine Java-Themen 2
T Kommunikation mit batch datei Allgemeine Java-Themen 3
P kommunikation zwischen dialog und threads Allgemeine Java-Themen 4
K MVC - Kommunikation Controller <> Gui Allgemeine Java-Themen 5
P Kommunikation von Threads Allgemeine Java-Themen 5
V Kommunikation zwischen Programmen und Threads Allgemeine Java-Themen 7
H Servlet/Applet Kommunikation Allgemeine Java-Themen 2
C Kommunikation mit USB Port Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben