0

ArduinoSerialを実装するというクラスを書きましたSerialPortEventListener

ArduinoGUIこのクラスを、一連のチェックボックスを含むスイング GUI を作成する という別のプログラムにインポートするライブラリとして使用します。

シリアル ポートに書き込みたい場合、ArduinoGUIクラス private ArduinoSerialarduino のプライベート メンバー変数があります。

関数を呼び出すと、arduino.output.write(byte b);正常に動作します。

問題は、内部ArduinoSerialクラスが read 関数をオーバーライドし、現在、出力を system.out に吐き出していることです。

    @Override
public synchronized void serialEvent(SerialPortEvent oEvent) {
    if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
        try {
            String inputLine=input.readLine();
            System.out.println(inputLine);

        } catch (Exception e) {
            System.err.println(e.toString());
                            System.out.println("But nothing much to worry about.");
        }
    }
    // Ignore all the other eventTypes, but you should consider the other ones.
}

これは私が望むものではありませんが、シリアルデータをクラス内のバイト配列に読み込みたいのですが、ArduinoGUIこのメソッドをもう一度オーバーライドする方法や、シリアル上のデータのイベントリスナーを作成する方法がわかりませんArduinoSerialクラスが最初にバッファを読み取って破棄しないようにしながらポートします。

4

1 に答える 1

1

はい、メソッドを2回オーバーライドすることはできませんが、次のことを行うことができます:

public class ArduinoGUI extends JFrame implements ArduinoSerialItf { 

private ArduinoSerialItf arduinoSerialItf = null; 
private ArduinoSerial arduinoSerial = null;

 //init 
 public ArduinoGUI(){
    arduinoSerialItf = this;

   arduinoSerial = new ArduinoSerial(arduinoSerialItf );

 } 

@Override
public void onEventReceived(SerialPortEvent oEvent){
   // in GUI class you get event from ArduinoSerial 
}

}    

インターフェイスを作成します。

public interface ArduinoSerialItf {
 public void onEventReceived(SerialPortEvent oEvent);
}

Arduinoシリアルクラス:

public class ArduinoSerial implements SerialPortEventListener {

private ArduinoSerialItf arduinoSerialItf = null;

public ArduinoSerial(ArduinoSerialItf arduinoSerialItf){
  this.arduinoSerialItf = arduinoSerialItf;
} 

@Override
public synchronized void serialEvent(SerialPortEvent oEvent) {
    // when we call this method, event goes to GUI class
    arduinoSerialItf.onEventReceived(oEvent);

}
于 2013-03-19T14:28:27.263 に答える