G
Gast
Gast
Hallo, ich möchte Werte über die serielle Schnittstelle einlesen, ich verwernde das SimpleRead programm von Sun.
Sobald ich jedoch die Werte einlesen möchte erscheinen komische Rechtecke und die Werte Stimmen überahupt nicht mit denen überein, die tatsächlich gesendet werden!
Danke für die mögliche Hilfe!!
Sobald ich jedoch die Werte einlesen möchte erscheinen komische Rechtecke und die Werte Stimmen überahupt nicht mit denen überein, die tatsächlich gesendet werden!
Danke für die mögliche Hilfe!!
Code:
import java.io.*;
import java.util.*;
import gnu.io.*;
public class RS232_lesen implements Runnable, SerialPortEventListener
{
//Definieren von Variablen
static CommPortIdentifier portId;
static Enumeration portList;
InputStream inputStream;
SerialPort serialPort;
Thread readThread;
//Beginn der Statischen Methode
public static void main(String[] args) {
boolean portFound = false;
String defaultPort = "COM1"; //Auswahl welcher Port verwendet werden soll
//Überprüfen ob Port vorhanden
if (args.length > 0) {
defaultPort = args[0];
}
portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements()) {
portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) { //Ob serieller Port vorhanden
if (portId.getName().equals(defaultPort)) { //wenn vorhandener Port gleich dem definierten Port ist
System.out.println("Found port: "+defaultPort);
portFound = true;
RS232_lesen reader = new RS232_lesen(); //Konstruktor neues SimpleRead
}
}
}
if (!portFound) { //Wenn Port nicht gefunde
System.out.println("Port " + defaultPort + " nicht gefunden");//Fehlermeldung wenn Port nicht gefunden
}
}
//Lesen
public RS232_lesen() {
try {
serialPort = (SerialPort) portId.open("RS232 lesen", 2000);//Port wird gelesen
} catch (PortInUseException e) {}
try {
inputStream = serialPort.getInputStream(); //Inputstream wird gelesen
} catch (IOException e) {}
try {
serialPort.addEventListener(this);
} catch (TooManyListenersException e) {}
serialPort.notifyOnDataAvailable(true);
//Eigenschaften der Seriellen Schnittstelle
try {
serialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
} catch (UnsupportedCommOperationException e) {}
readThread = new Thread(this);
readThread.start();
}
//ausführend des Programmes
public void run() {
try {
Thread.sleep(200);
} catch (InterruptedException e) {}
}
public void serialEvent(SerialPortEvent event) {
switch (event.getEventType()) { //Ermittelt den Typ dieses Events(lesen/schreiben)
case SerialPortEvent.BI: //Break interrupt
case SerialPortEvent.OE: //Overrun error
case SerialPortEvent.FE: //Framing error
case SerialPortEvent.PE: //Parity error
case SerialPortEvent.CD: //Carrier detect
case SerialPortEvent.CTS://Clear to send
case SerialPortEvent.DSR://Data set ready
case SerialPortEvent.RI://Ring indicator
case SerialPortEvent.OUTPUT_BUFFER_EMPTY://Wenn keine Daten verfügbar sind
break;
case SerialPortEvent.DATA_AVAILABLE: //Wenn Daten verfügbar sind
byte[] readBuffer = new byte[4]; //Daten werden in den Buffer geschrieben
try {
while (inputStream.available() > 0) { //Daten werden gelesen und anschließend in eine Variable gespeichert
int numBytes = inputStream.read(readBuffer);
//System.out.println("Winkel="+ numBytes);
}
System.out.print(new String(readBuffer)); //Buffer wird ausgelsesn
} catch (IOException e) {}
break;
}
}
}