7

Java-arduino シリアル通信をセットアップしようとしています。これまでのところ、Arduino ページ ( http://playground.arduino.cc/interfacing/java ) からコードをダウンロードしましたが、エラーが発生します。コード:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import gnu.io.CommPortIdentifier; 
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent; 
import gnu.io.SerialPortEventListener; 
import java.util.Enumeration;


public class SerialTest implements SerialPortEventListener {
    SerialPort serialPort;
        /** The port we're normally going to use. */
    private static final String PORT_NAMES[] = { 
            "/dev/tty.usbserial-A9007UX1", // Mac OS X
                        "/dev/ttyACM0", // Raspberry Pi
            "/dev/ttyUSB0", // Linux
            "COM3", // Windows
    };
    /**
    * A BufferedReader which will be fed by a InputStreamReader 
    * converting the bytes into characters 
    * making the displayed results codepage independent
    */
    private BufferedReader input;
    /** The output stream to the port */
    private OutputStream output;
    /** Milliseconds to block while waiting for port open */
    private static final int TIME_OUT = 2000;
    /** Default bits per second for COM port. */
    private static final int DATA_RATE = 9600;

    public void initialize() {
                // the next line is for Raspberry Pi and 
                // gets us into the while loop and was suggested here was suggested http://www.raspberrypi.org/phpBB3/viewtopic.php?f=81&t=32186
                System.setProperty("gnu.io.rxtx.SerialPorts", "/dev/ttyACM0");

        CommPortIdentifier portId = null;
        Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();

        //First, Find an instance of serial port as set in PORT_NAMES.
        while (portEnum.hasMoreElements()) {
            CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
            for (String portName : PORT_NAMES) {
                if (currPortId.getName().equals(portName)) {
                    portId = currPortId;
                    break;
                }
            }
        }
        if (portId == null) {
            System.out.println("Could not find COM port.");
            return;
        }

        try {
            // open serial port, and use class name for the appName.
            serialPort = (SerialPort) portId.open(this.getClass().getName(),
                    TIME_OUT);

            // set port parameters
            serialPort.setSerialPortParams(DATA_RATE,
                    SerialPort.DATABITS_8,
                    SerialPort.STOPBITS_1,
                    SerialPort.PARITY_NONE);

            // open the streams
            input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
            output = serialPort.getOutputStream();

            // add event listeners
            serialPort.addEventListener(this);
            serialPort.notifyOnDataAvailable(true);
        } catch (Exception e) {
            System.err.println(e.toString());
        }
    }

    /**
     * This should be called when you stop using the port.
     * This will prevent port locking on platforms like Linux.
     */
    public synchronized void close() {
        if (serialPort != null) {
            serialPort.removeEventListener();
            serialPort.close();
        }
    }

    /**
     * Handle an event on the serial port. Read the data and print it.
     */
    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());
            }
        }
        // Ignore all the other eventTypes, but you should consider the other ones.
    }

    public static void main(String[] args) throws Exception {
        SerialTest main = new SerialTest();
        main.initialize();
        Thread t=new Thread() {
            public void run() {
                //the following line will keep this app alive for 1000 seconds,
                //waiting for events to occur and responding to them (printing incoming messages to console).
                try {Thread.sleep(1000000);} catch (InterruptedException ie) {}
            }
        };
        t.start();
        System.out.println("Started");
    }
}

それは私が得る出力です:

安定したライブラリ ======================================== ネイティブ lib バージョン = RXTX-2.2 pre2 Java lib バージョン = RXTX-2.1-7 警告: RXTX バージョンの不一致 Jar バージョン = RXTX-2.1-7 ネイティブ lib バージョン = RXTX-2.2pre2
COM ポートが見つかりませんでした。開始

Linux を使用しています。そして、ポートは正しいと思います。誰でも助けることができますか?

4

3 に答える 3

7

問題を見て、RXTX と JSSC でしばらく苦労した後、JAVA Arduino Communication Libraryを開発しました。

私のライブラリには (できれば) 優れたドキュメント (ライブラリの SourceForge Wiki にあります) があり、インストール方法と使用方法を正確に説明しています。ライブラリに両方の JAR をダウンロードしてクラスパスに含めたら、クラス定義の前に次のステートメントを含めます。

import arduino.*;

これで、メソッドに次のコード スニペットを追加するだけで準備完了です。

String ArduinoPort = ""; //Your port name here
int BAUD_RATE = 9600;
Arduino arduino = new Arduino(ArduinoPort, BAUD_RATE);
arduino.openConnection(); 
arduino.serialWrite('1'); //serialWrite is an overridden method, allowing both characters and strings.
arduino.serialWrite('1', 20); //its second parameter even allows delays. more details can be found in the documentation.

このライブラリには、プロセスを高速化するのに役立つと思われるサンプル コードも付属しています。

于 2016-11-17T16:39:44.640 に答える
1

許可の問題のようです。試してください: Sudo chmod 666 /dev/ttyACM0 (あなたは usb )そしてJavaコードをもう一度再実行してください。

于 2015-04-02T15:48:41.590 に答える
0

「Com ポートが見つかりませんでした」は、Arduino が Arduino IDE とインターフェースできない場合のデフォルトのエラーです。

ただし、この場合、エラーは Arduino IDE が Arduino を認識できないことを示しているのではなく、RXTX ライブラリが Arduino を認識できないことを示しています。

お使いの PC のドライバーは古いバージョンで、RXTX に必要な com をまだサポートしていない可能性があります...

これが私のアドバイスです:

Arduino ボードをプラグインする

[コントロール パネル] ---> [システムとセキュリティ] ---> [システム] ---> 左ペインの [デバイス マネージャー] に移動します。

その他のデバイスを展開します。

[その他のデバイス] の下に、小さな黄色のエラー グラフィックが表示されたアイコンが表示されます。(シリアルポートに接続されている他のすべてのデバイスを取り外します)

そのデバイスを右クリック ---> ドライバー ソフトウェアの更新

[コンピューターを参照してドライバー ソフトウェアを検索] を選択します。

[参照] ---> [参照] をクリックして、Arduino Web サイトからダウンロードしたArduino 環境のフォルダーを参照します。ダウンロードされていない場合はhttp://arduino.cc/en/Main/Software

ブラウジングマークの後、サブフォルダーを含めます。

次へをクリック ---> ドライバがインストールされます。

他のデバイスを折りたたむ ---> ポートを展開します (デバイス マネージャーでは他のデバイスの下にのみ表示されます)。

Arduino Written が表示されます ---> その COM ポートを探します (デバイス マネージャーを閉じます)

Arduino 環境 ---> ツール ---> シリアル ポート ---> デバイス マネージャーのポートに記載されているように、COM ポートを選択します。(UNOの代わりに他のArduinoボードを使用している場合は、ボードで同じものを選択してください)

参考資料: http://www.devfactor.net/2014/10/26/arduino-basics-serial-communication/

于 2014-11-12T01:32:29.340 に答える