1

私の Seeeduino Mega 1.22 には、シリアル入力を LCD ディスプレイに表示するだけの簡単なスケッチがあります。lynx term と arduino シリアル モニターを使用すると正常に動作します。送信された入力が表示されています。この問題は、Win7 x64 マシン上の Eclipse で実行されている Java プログラムと Seeeduino の間でシリアル通信を開始したいときに始まります。RXTX x64 ビルドを使用しています。このプログラムは、開いているポートを介していくつかの string.getBytes() を送受信することを目的としています。Java 側での受信は機能しますが、Arduino 側での受信は失敗します。

問題は適切な Flow Control 設定にあるようです。私は何人かの人々がここのように同じ問題を抱えているのを見ましたRXTXで受信する問題

しかし、この解決策は私にはうまくいきません。FlowControl を None に設定すると、シリアル接続が確立されたことを示すブロック アイコンのみがディスプレイに表示されますが、それ以外は何も表示されません。FlowControl を RCTS_IN | に設定すると、RCTS_OUT の場合、確立された接続を閉じると、ディスプレイにのみ文字列バイトが表示されます。

接続を閉じたときにのみデータが送信されるのはなぜですか (出力ストリームをフラッシュしても効果がありませんでした)。Flow Controll 設定のどこが間違っていますか?

これは、私が使用している変更された connect() メソッドです。

void connect(String portName) throws Exception {
        CommPortIdentifier portIdentifier = CommPortIdentifier
                .getPortIdentifier(portName);
        if (portIdentifier.isCurrentlyOwned()) {
            System.out.println("Error: Port is currently in use");
        } else {
            CommPort commPort = portIdentifier.open(this.getClass().getName(),
                    2000);

            if (commPort instanceof SerialPort) {
                SerialPort serialPort = (SerialPort) commPort;
                serialPort.setSerialPortParams(115200, SerialPort.DATABITS_8,
                        SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

                try {
                  serialPort.setFlowControlMode(
                  //      SerialPort.FLOWCONTROL_NONE);
                  // OR
                  // If CTS/RTS is needed
                  //serialPort.setFlowControlMode(
                        SerialPort.FLOWCONTROL_RTSCTS_IN |
                        SerialPort.FLOWCONTROL_RTSCTS_OUT);
                } catch (UnsupportedCommOperationException ex) {
                  System.err.println(ex.getMessage());
                }

                serialPort.setRTS(true);

                in = serialPort.getInputStream();
                out = serialPort.getOutputStream();

                (new Thread(new SerialWriter(out))).start();

                serialPort.addEventListener(new SerialReader(in, this));
                serialPort.notifyOnDataAvailable(true);

            } else {
                System.out.println("Error: Only serial ports are to use!");
            }
        }
    }

お時間をいただきありがとうございます

4

1 に答える 1

0

解決しました。多くの人が示唆したように、それはバッファーではありませんでした。問題は、ボード上の Seeeduinos RST スイッチが自動に設定されていたことです。手動に設定すると、問題は解決しました。フロー制御は必要ありません。

于 2012-05-03T14:37:57.587 に答える