Hallo zusammen,
ich möchte mit Java und der Bibliothek jSerialComm an einen Arduino mit
Grbl G-Code Befehle senden und damit einen Schrittmotor ansteuern.
Bisher funktioniert nur das lesen, nicht aber das senden!
Ausgabe Konsole:
run:
1 :COM9
1
Gewählter Port: 1
USB-SERIAL CH340 (COM9)
Grbl 0.9a ['$' for help]
Der Hardware Aufbau funktioniert soweit, getestet hab ich es mit Arduino
Serial Monitor.
Zum Programm:
Ich gebe zuerst alle aktive COM Ports aus, lasse dann den Benutzer über
die Konsole einen wählen. Dann starte ich zwei Threats zum gleichzeitig
lesen und senden von G-Code.
Findet jemand den Fehler warum das Senden nicht funktioniert?
// -------------------------------------------------------------------
package com.port;
import java.util.Scanner;
import java.io.OutputStream;
import java.io.PrintWriter;
import com.fazecast.jSerialComm.SerialPort;
public class Main {
static int inputPort=0;
static SerialPort chosenPort;
public static void main(String[] args) {
// Aktive COM Ports ausgeben
SerialPort[] portNames = SerialPort.getCommPorts();
int i;
for(i = 1; i <= portNames.length; i++)
System.out.println(i+"
:"+portNames[i-1].getSystemPortName());
// Benutzer wählt COM Port
Scanner scan = new Scanner(System.in);
do{
try{
int input = Integer.parseInt(scan.nextLine());
if((input>0) && (input<i))
inputPort = input;
else
System.out.println("Bitte richtige Zahl eingeben!");
}catch(Exception e){
System.out.println("Bitte eine Zahl eingeben!");
}
}while(inputPort==0);
System.out.println("Gewählter Port: "+inputPort);
chosenPort = SerialPort.getCommPorts()[inputPort-1];
chosenPort.setComPortTimeouts(SerialPort.TIMEOUT_SCANNER, 0, 0);
System.out.println(chosenPort.getDescriptivePortName());
if(chosenPort.openPort()) {
// Seriell Lesen
Thread threadIn = new Thread(){
@Override public void run() {
Scanner input = new
Scanner(chosenPort.getInputStream());
while(input.hasNextLine()) {
try {
String line = input.nextLine();
System.out.println(line);
} catch(Exception e) {}
}
}
};
// Seriell Schreiben
Thread threadOut = new Thread(){
@Override public void run() {
try {Thread.sleep(100); } catch(Exception e) {}
PrintWriter output = new
PrintWriter(chosenPort.getOutputStream());
output.println("G0 X100");
output.flush();
}
};
threadIn.start();
threadOut.start();
}
else {
System.out.println("COM Port konnte nicht geöffnet werden");
}
}
}
Hallo Pascal, ich hätte eigentlich erwartet, dass Du eine Excpetion mit Erklärung der Fehlerursache bekommtst wenn etwas schief läuft. Aber aus der Dokumentation zum PrintWriter: "Methods in this class never throw I/O exceptions, although some of its constructors may." Der nächste Satz ist aber hilfreich: "The client may inquire as to whether any errors have occurred by invoking checkError()." Vielleicht findest hier eine Erklärung dafür, was falsch läuft.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.