Daten über serielle Schnittstelle empfangen

ja.va

Mitglied
Hallo,

ich lerne mich gerade in Java ein und versuche ein Projekt. Dabei versuche ich eine serielle Schnittstelle aufzubauen und bin auf RXTX gekommen was ich installiert habe. Jetzt versuche ich eine Verbindung aufzubauen jedoch blicke ich nicht wirklich durch bei den Klassen. Ich habe CommPort, CommPortIdentifier und SerialPort gefunden aber weiß nicht wie ich weiter Programmieren soll, was genau benötigt wird bzw. wie es funktioniert. Habt ihr vielleicht noch Tipps zum unteren Code?

Danke für die Hilfe und jeden Tipp!



[CODE lang="java" title="serielle Schnittstelle"]import java.io.*;
import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;

/**

*/
public class UsbStick {

public void dateiBeschreiben(){
File dataList = new File ("/media/xxx/");
String[] name = dataList.list();

for (int i=0; i< name.length; i++){
System.out.println(name.length);
System.out.println(name);
}

File usbStickO = new File ("/media/xxx/" + name[0] + "/dateiO.csv");
BufferedWriter text = null;
try{
if(!usbStickO.exists()){
usbStickO.createNewFile();
}

text = new BufferedWriter(new FileWriter(usbStickO));
text.write("Hallo Welt");
text.flush();
text.close();

System.out.println("Datei wurde erstellt und beschrieben!");


}catch(IOException e){
System.out.println("USBStick nicht gefunden!");
}finally{
if(text != null){
text.close();
}
}
}

/**
* @param args the command line arguments
*/
public static void main(String[] args){
// TODO code application logic here

CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier("/dev/ttyUSB1");
System.out.println(portIdentifier.getName());

UsbStick ausführen = new UsbStick();

ausführen.dateiBeschreiben();

}

}
[/CODE]
 
Moin,

ist ja toller Code ..... 🙄

Und was ist damit?
Funktioniert irgendwas nicht? Hast Du Verständnisfragen ??
Wir helfen ja gerne, müssten aber schon wissen wobei!

Es wäre auch gut, wenn Du ihn mit Kommentaren versehen würdest, die die jeweilige Funktionsweise beschreiben!

Du hast eine Klasse 'usbstick', ebenso ein Objekt vom Typ 'usbstick', das aber 'ausführen' heißt (Tipp: keine deutschen Umlaute!!) und dann noch ein Fileobjekt 'usbstick' .... meinst Du, dass Du da irgendwann selbst noch durchblickst??

VG Klaus
 
Danke für die Rückmeldung.

Ich würde gerne Daten die über die serielle Schnittstelle kommen speichern. Dabei werden die Daten in eine Datei auf einem USBStick gespeichert. Momentan bin ich soweit dass es eine Datei erstellen kann. Probleme habe ich mit dem Empfang der seriellen Daten. Mir ist noch sehr unklar wie diese Klassen funktionieren. Ich habe gesehen dass CommPortIdentifier immer verwendet wird, aber was genau es macht weiß ich nicht. Danach müssen noch die Baudrate usw. bekannt gegeben werden. Aber der optimale Ablauf das zu programmieren ist mir noch sehr unklar.
Hier ist der erste Teil den ich habe, man kann es bestimmt besser machen. Für Tipps bin ich dankbar.

LG

[CODE lang="java" title="serielle Schnittstelle"]import java.io.*;
import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;

/**

*/
public class UsbStickDateischreiben {

public void dateiBeschreiben(){
File dataList = new File ("/media/xxx/"); //Beim USB Anschluss wird es hier angezeigt
String[] name = dataList.list(); //Es werden alle Dateien und Verzeichnisse im Ordner angezeigt

for (int i=0; i< name.length; i++){ //Die Namen vom Verzeichnis welches Linux erstellt werden hier angezeigt
System.out.println(name.length);
System.out.println(name);
}

File usbStickO = new File ("/media/xxx/" + name[0] + "/dateiO.csv"); //Öffnet bzw. erstellt eine CSV Datei im jeweiligen Ordner
BufferedWriter text = null;
try{
if(!usbStickO.exists()){
usbStickO.createNewFile();
}

text = new BufferedWriter(new FileWriter(usbStickO)); //Schreibt "Hallo Welt" in die Datei
text.write("Hallo Welt");
text.flush();


System.out.println("Datei wurde erstellt und beschrieben!");


}catch(IOException e){
System.out.println("USBStick nicht gefunden!");
}finally{
if(text != null){ //Schließt die Datei
text.close();
}
}
}

/**
* @param args the command line arguments
*/
public static void main(String[] args){
// TODO code application logic here

CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier("/dev/ttyUSB1"); //1.Schritt serielle Schnittstelle aber unklar
System.out.println(portIdentifier.getName());

UsbStick ausfuehren = new UsbStick(); //Erstellt die Datei am USB-Stick

ausfuehren.dateiBeschreiben();

}

}[/CODE]
 
ich hab vor Jahren mal RXTX verwendet und dann tatsächlich auch den Zugriff per Java geschafft. Es war aber äuserstt mühselig damals. Weiß nicht ob RXTX verbessert wurde.

Ich erinnere mich auch noch irgendwie dran, daß es ein Problem von Windows gab, das Java überhaupt auf COM zugreifen konnte. Da war irgendwas, aber genau erinnere ich mich nicht mehr, sorry...
 
Danke für die Rückmeldung. Die ersten Schritte damit die Kommunikation funktioniert habe ich bereits. Es sind aber noch sehr viele Schönheitsfehler. Einerseits muss ich noch try, catch hinzufügen und die Kommunikation gehört noch verbessert wenn Daten ankommen => nicht ständig abfragen. Für andere Tipps wie man den Code schöner und besser darstellen kann bin ich jederzeit dankbar.

LG

Java:
import java.io.*;
import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;

/**
 *
 * @author
 */
public class UsbStick {
    
    
    
    
    public void dateiBeschreiben(String zeile){
        File dataList = new File ("/media/xxx/");         
        String[] name = dataList.list();

        for (int i=0; i< name.length; i++){
            System.out.println(name.length);
            System.out.println(name[i]);
        }
      
        dataList = new File ("/media/xxx/" + name[0] + "/dateiO.csv");
        BufferedWriter text = null;
        try{       
            if(!dataList.exists()){
                dataList.createNewFile();
            }
            
            text = new BufferedWriter(new FileWriter(dataList));
            text.write(zeile);
            text.newLine();
            text.flush();
  
                    
            System.out.println("Datei wurde erstellt und beschrieben!");
                  
            
        }catch(IOException e){
            System.out.println("USBStick nicht gefunden!");
        }finally{
            if(text != null){
                text.close();
            }   
        }
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args){
        // TODO code application logic here
        UsbStick ausfuehren = new UsbStick();
 
        CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier("/dev/ttyUSB0");
        //Open the port and give the port name and a timeout
    
        CommPort commPort = portIdentifier.open("/dev/ttyUSB0", 2000);


        SerialPort serialPort = (SerialPort) commPort;

        //Set the baud rate and other parameters of the serial port
        serialPort.setSerialPortParams(115200, 8, 1, 0);
    
        
        InputStream in = null;
        //char[] buffer = new char[1024]
        String zeile = null;
        while(true){
 
                in = serialPort.getInputStream();
                if (in != null){
                    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                    zeile = reader.readLine();
                    System.out.println(zeile);
                    ausfuehren.dateiBeschreiben(zeile);
                }
        }       
    } 
}
 

Neue Themen


Zurück
Oben