Ich sitze mittlerweile seit fast einer Woche an diesem Problem und habe schon in etlichen Foren nach Hinweisen gesucht. Leider bis heute ohne Erfolg.
Das ist mein Problem: Ich versuche einen Befehl an ein Bluetooth HC-05 Modul zu senden, welches über einen virtuellen COM Port mit dem PC verbunden ist. In meinem Fall "COM4".
Ich benutze die RXTX Bibliothek um mich mit dem Serial Port zu verbinden. Das funktioniert auch ohne Probleme.
Das Problem tritt im Schreibe-Thread auf. Wenn die writeTo() Methode des ByteArrayOutputStream Objekts aufgerufen wird, bleibt das Programm einfach hängen, ohne eine Exception zu schmeißen.
Ich benutze Windows 8.1 in der 64bit Version.
Ich kann mich übrigens mittels HTERM Konsole mit dem Bluetooth Modul verbinden.
Ich bin für jeden Tip/Hilfe wirklich dankbar!!
Das ist mein Problem: Ich versuche einen Befehl an ein Bluetooth HC-05 Modul zu senden, welches über einen virtuellen COM Port mit dem PC verbunden ist. In meinem Fall "COM4".
Ich benutze die RXTX Bibliothek um mich mit dem Serial Port zu verbinden. Das funktioniert auch ohne Probleme.
Java:
public static void main(String[] args) {
portList = CommPortIdentifier.getPortIdentifiers();
boolean portFound = false;
while (portList.hasMoreElements()) {
portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
if (portId.getName().equals("COM4")) {
portFound = true;
SimpleRead reader = new SimpleRead();
}
}
}
}
@SuppressWarnings("restriction")
public SimpleRead() {
try {
serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);
} catch (PortInUseException e) {System.out.println(e);}
try {
serialPort.setOutputBufferSize(15);
serialPort.setEndOfInputChar((byte)'\n');
inputStream = serialPort.getInputStream();
outputStream = serialPort.getOutputStream();
} catch (IOException e) {System.out.println(e);} catch (UnsupportedCommOperationException e)
e.printStackTrace();
}
try {
serialPort.addEventListener(this);
} catch (TooManyListenersException e) {System.out.println(e);}
serialPort.notifyOnDataAvailable(true);
try {
serialPort.setSerialPortParams(300,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
} catch (UnsupportedCommOperationException e) {System.out.println(e);}
serialPort.setRTS(true);
serialPort.setDTR(true);
serialPort.notifyOnDataAvailable(true);
serialPort.setInputBufferSize(8192);
serialPort.setOutputBufferSize(8192);
writeThread = new Thread(new SerialWriter(outputStream));
writeThread.start();
readThread = new Thread(this);
readThread.start();
}
Das Problem tritt im Schreibe-Thread auf. Wenn die writeTo() Methode des ByteArrayOutputStream Objekts aufgerufen wird, bleibt das Programm einfach hängen, ohne eine Exception zu schmeißen.
Java:
public class SerialWriter implements Runnable{
OutputStream out;
public SerialWriter (OutputStream out)
{
this.out = out;
}
public void run (){
try{
Thread.sleep(500);
while (true){
out.flush();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write("AT\n".getBytes(Charset.forName("ASCII")));
baos.writeTo(out); //<-- Here is my Problem. The program just hangs up
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
catch (IOException e){
e.printStackTrace();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
Ich benutze Windows 8.1 in der 64bit Version.
Ich kann mich übrigens mittels HTERM Konsole mit dem Bluetooth Modul verbinden.
Ich bin für jeden Tip/Hilfe wirklich dankbar!!