Problem mit µController über COM-Port zu kommunizieren

wallace99

Grünschnabel
hallo zusammen,

ich möchte mit einem über USB angeschlossenen µController kommunizieren. dabei nutze ich von FTDI einen D2XX treiber, um auf den USB als SerialPort zugreifen zu können. mit hyperterminal z.b. klappt die kommunikation und ich erhalte nach dem befehl "#0M" die korrekte antwort. nur nicht mit folgendem code...

Code:
import java.io.*;
import gnu.io.*;
import java.awt.*;
import java.awt.event.*;

public class comframe extends Frame{
  static CommPortIdentifier portID;
  InputStream ins;
  OutputStream out;
  static SerialPort serss;
  TextArea ausgabe;
  TextField tfe;
  Button bt;

  public static void main(String[] args){
    try{portID = CommPortIdentifier.getPortIdentifier("COM3");
        serss = (SerialPort) portID.open("This Programm",0);
        comframe f = new comframe();
        f.setSize(330,250);
        f.show();
    }
    catch(Exception exc){System.out.println("Fehler :"+exc);}
  }

  public comframe() {
    this.addWindowListener(new WindowAdapter(){
      public void windowClosing(WindowEvent e){
        dispose();
        System.exit(0);
      }
    });
    setLayout(new FlowLayout());
    add(tfe=new TextField(40));
    tfe.addActionListener(new sendeListener());
    add(bt=new Button("Senden"));
    bt.addActionListener(new sendeListener());
    add(ausgabe=new TextArea("Port COM3 geöffnet\n",7,40));
    try {ins = serss.getInputStream();
         out = serss.getOutputStream();
         serss.addEventListener(new commListener());
    }
   catch (Exception e) { System.out.println("Fehler: "+e);}
    serss.notifyOnDataAvailable(true);
    try {serss.setSerialPortParams(19200,
                                   SerialPort.DATABITS_8,
                                   SerialPort.STOPBITS_1 ,
                                   SerialPort.PARITY_NONE);}
    catch (UnsupportedCommOperationException e) {}
  }

  public class sendeListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
      PrintWriter aus = new PrintWriter(out);
      aus.println(tfe.getText());
      aus.flush();
      aus.close();
    }
  }

  public class commListener implements SerialPortEventListener{
    public void serialEvent(SerialPortEvent event) {
      if(event.getEventType()==SerialPortEvent.DATA_AVAILABLE){
        byte[] readBuffer = new byte[15];
        try {
          while (ins.available() > 0)
          {
        	  int numBytes = ins.read(readBuffer);
          }
          String nachricht = new String (readBuffer); 
          ausgabe.append(nachricht);
          System.out.println (nachricht);
          }
        catch (IOException e) {System.out.println("Fehler: "+e);}
      }
    }
  }

}

der port öffnet korrekt und gesendet wird auch, jedoch erhalte ich erst nach einer zufälligen anzahl von sendungen des befehls die entsprechende antwort. ich hoffe jemand kann mir helfen und schonmal danke im voraus.

gruß
wallace
 

Anhänge

  • app.JPG
    app.JPG
    19,6 KB · Aufrufe: 28
Zurück