Hallo alle zusammen,
ich bin zwar relativ neu was java angeht, habe aber schon etwas Erfahrung.
Mein Plan ist es ein Arduino CNC-Board mithilfe eines Computers zu steuern.
Die CNC Maschine soll eine Bewegung machen und dann auf das Signal eines zweiten Arduinos warten, an dem ein Taster angeschlossen ist. Also habe ich mir gedacht, dass man dies mit einer seriellen Verbindung hinbekommen könnte.
Hierzu habe ich 2 Java Klassen, die eine liest das Signal vom Taster 1 oder 0 und die andere sendet den G-code an das CNC-Board.
Ich verwende als IDE Eclips und die Libary RXTX.
Die einzelnen Klassen funktionieren
Klasse zum Senden:
Klasse zum lesen:
Mein Problem ist nun, wie ich die Variable ergebnis in der senden Klasse verwenden kann.
Mir ist klar, das dies beide main Klassen sind und genau deshalb brauche ich eure Hilfe wie ich das ändern kann.
ich bin zwar relativ neu was java angeht, habe aber schon etwas Erfahrung.
Mein Plan ist es ein Arduino CNC-Board mithilfe eines Computers zu steuern.
Die CNC Maschine soll eine Bewegung machen und dann auf das Signal eines zweiten Arduinos warten, an dem ein Taster angeschlossen ist. Also habe ich mir gedacht, dass man dies mit einer seriellen Verbindung hinbekommen könnte.
Hierzu habe ich 2 Java Klassen, die eine liest das Signal vom Taster 1 oder 0 und die andere sendet den G-code an das CNC-Board.
Ich verwende als IDE Eclips und die Libary RXTX.
Die einzelnen Klassen funktionieren
Klasse zum Senden:
Java:
import gnu.io.*;
import java.io.IOException;
//import java.io.InputStream;
import java.inutputStream;
import java.util.Enumeration;
//import java.util.TooManyListenersException;
//import OeffnenUndSenden.serialPortEventListener;
public class senden implements Runnable {
/**
* @param args
*/
public static void main(String[] args)
{
lesen lesen = new lesen();
Runnable runnable = new senden();
new Thread(runnable).start();
System.out.println("main finished");
}
/**
*
*/
CommPortIdentifier serialPortId;
Enumeration enumComm;
SerialPort serialPort;
OutputStream outputStream;
// InputStream inputStream;
Boolean serialPortGeoeffnet = false;
int baudrate = 115200;
int dataBits = SerialPort.DATABITS_8;
int stopBits = SerialPort.STOPBITS_1;
int parity = SerialPort.PARITY_NONE;
String portName = "COM3";
int secondsRuntime = 99999;
public senden()
{
System.out.println("Konstruktor: senden");
}
public void run()
{
Integer secondsRemaining = secondsRuntime;
if (oeffneSerialPort(portName) != true)
return;
while (secondsRemaining > 0) {
System.out.println("Sekunden verbleiben: " + secondsRemaining.toString() );
secondsRemaining--;
try {
Thread.sleep(1000);
} catch(InterruptedException e) { }
sendeSerialPort("G1 X10 F250\n");
}
schliesseSerialPort();
}
boolean oeffneSerialPort(String portName)
{
Boolean foundPort = false;
if (serialPortGeoeffnet != false) {
System.out.println("Serialport bereits geöffnet");
return false;
}
System.out.println("Öffne Serialport");
enumComm = CommPortIdentifier.getPortIdentifiers();
while(enumComm.hasMoreElements()) {
serialPortId = (CommPortIdentifier) enumComm.nextElement();
if (portName.contentEquals(serialPortId.getName())) {
foundPort = true;
break;
}
}
if (foundPort != true) {
System.out.println("Serialport nicht gefunden: " + portName);
return false;
}
try {
serialPort = (SerialPort) serialPortId.open("Öffnen und Senden", 500);
} catch (PortInUseException e) {
System.out.println("Port belegt");
}
try {
outputStream = serialPort.getOutputStream();
} catch (IOException e) {
System.out.println("Keinen Zugriff auf OutputStream");
}
/*
try {
inputStream = serialPort.getInputStream();
} catch (IOException e) {
System.out.println("Keinen Zugriff auf InputStream");
}
try {
serialPort.addEventListener(new serialPortEventListener());
} catch (TooManyListenersException e) {
System.out.println("TooManyListenersException für Serialport");
}
serialPort.notifyOnDataAvailable(true);
*/
try {
serialPort.setSerialPortParams(baudrate, dataBits, stopBits, parity);
} catch(UnsupportedCommOperationException e) {
System.out.println("Konnte Schnittstellen-Paramter nicht setzen");
}
serialPortGeoeffnet = true;
return true;
}
void schliesseSerialPort()
{
if ( serialPortGeoeffnet == true) {
System.out.println("Schließe Serialport");
serialPort.close();
serialPortGeoeffnet = false;
} else {
System.out.println("Serialport bereits geschlossen");
}
}
void sendeSerialPort(String nachricht)
{
System.out.println("Sende: " + nachricht);
if (serialPortGeoeffnet != true)
return;
try {
outputStream.write(nachricht.getBytes());
} catch (IOException e) {
System.out.println("Fehler beim Senden");
}
}
}
Java:
import gnu.io.*;
import java.io.IOException;
import java.io.InputStream;
//import java.io_OutputStream;
import java.util.Enumeration;
import java.util.TooManyListenersException;
//import OeffnenUndSenden.serialPortEventListener;
public class lesen implements Runnable {
String ergebnis;
/**
* @param args
*/
public static void main(String[] args)
{
Runnable runnable = new lesen();
new Thread(runnable).start();
System.out.println("main finished");
}
/**
*
*/
CommPortIdentifier serialPortId;
Enumeration enumComm;
SerialPort serialPort;
//OutputStream outputStream;
InputStream inputStream;
Boolean serialPortGeoeffnet = false;
int baudrate = 9600;
int dataBits = SerialPort.DATABITS_8;
int stopBits = SerialPort.STOPBITS_1;
int parity = SerialPort.PARITY_NONE;
String portName = "COM4";
int secondsRuntime = 99999;
public lesen()
{
//System.out.println("Konstruktor: EinfachSenden");
}
public void run()
{
Integer secondsRemaining = secondsRuntime;
if (oeffneSerialPort(portName) != true)
return;
while (secondsRemaining > 0) {
//System.out.println("Sekunden verbleiben: " + secondsRemaining.toString() );
secondsRemaining--;
try {
Thread.sleep(1000);
} catch(InterruptedException e) { }
}
schliesseSerialPort();
}
boolean oeffneSerialPort(String portName)
{
Boolean foundPort = false;
if (serialPortGeoeffnet != false) {
System.out.println("Serialport bereits geöffnet");
return false;
}
System.out.println("Öffne Serialport");
enumComm = CommPortIdentifier.getPortIdentifiers();
while(enumComm.hasMoreElements()) {
serialPortId = (CommPortIdentifier) enumComm.nextElement();
if (portName.contentEquals(serialPortId.getName())) {
foundPort = true;
break;
}
}
if (foundPort != true) {
System.out.println("Serialport nicht gefunden: " + portName);
return false;
}
try {
serialPort = (SerialPort) serialPortId.open("Öffnen und Senden", 500);
} catch (PortInUseException e) {
System.out.println("Port belegt");
}
/*
try {
outputStream = serialPort.getOutputStream();
} catch (IOException e) {
System.out.println("Keinen Zugriff auf OutputStream");
}
*/
try {
inputStream = serialPort.getInputStream();
} catch (IOException e) {
System.out.println("Keinen Zugriff auf InputStream");
}
try {
serialPort.addEventListener(new serialPortEventListener());
} catch (TooManyListenersException e) {
System.out.println("TooManyListenersException für Serialport");
}
serialPort.notifyOnDataAvailable(true);
try {
serialPort.setSerialPortParams(baudrate, dataBits, stopBits, parity);
} catch(UnsupportedCommOperationException e) {
System.out.println("Konnte Schnittstellen-Paramter nicht setzen");
}
serialPortGeoeffnet = true;
return true;
}
void schliesseSerialPort()
{
if ( serialPortGeoeffnet == true) {
System.out.println("Schließe Serialport");
serialPort.close();
serialPortGeoeffnet = false;
} else {
System.out.println("Serialport bereits geschlossen");
}
}
void serialPortDatenVerfuegbar() {
try {
byte[] data = new byte[150];
int num;
while(inputStream.available() > 0) {
num = inputStream.read(data, 0, data.length);
System.out.println( ergebnis);
ergebnis= new String(data, 0, num);
}
} catch (IOException e) {
System.out.println("Fehler beim Lesen empfangener Daten");
}
}
class serialPortEventListener implements SerialPortEventListener {
public void serialEvent(SerialPortEvent event) {
System.out.println("serialPortEventlistener");
switch (event.getEventType()) {
case SerialPortEvent.DATA_AVAILABLE:
serialPortDatenVerfuegbar();
break;
case SerialPortEvent.BI:
case SerialPortEvent.CD:
case SerialPortEvent.CTS:
case SerialPortEvent.DSR:
case SerialPortEvent.FE:
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
case SerialPortEvent.PE:
case SerialPortEvent.RI:
default:
}
}
}
}
Mir ist klar, das dies beide main Klassen sind und genau deshalb brauche ich eure Hilfe wie ich das ändern kann.
Zuletzt bearbeitet von einem Moderator: