# Java+Grbl: G-Code Befehle mit Java an Arduino senden und lesen



## Butch90 (6. Mrz 2016)

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(){
                [USER=48687]@Override[/USER] 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(){
    [USER=48687]@Override[/USER] 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");
        }
    }
}
```


----------



## JStein52 (7. Mrz 2016)

Butch90 hat gesagt.:


> Findet jemand den Fehler warum das Senden nicht funktioniert?


Was heisst denn funktioniert nicht ? Der zuständige Thread läuft los oder ?


----------

