使用Java中的serial com从Arduino写入和读取数据

时间:2017-02-24 15:53:38

标签: java windows netbeans serial-port arduino-uno

我试图将数据写入我的Arduino Uno并从中收到日期。

我在Windows 8.1和库" RXTXcomm.jar"上使用NetBeans。为了做到这一点。

我的代码是这样的,我的Arduino在COM3上,它在第25行和第80行引发错误:

错误

  

java.lang.UnsatisfiedLinkError:加载gnu.io.RXTXCommDriver时抛出的java.library.path中没有rxtxSerial   线程" main"中的例外情况java.lang.UnsatisfiedLinkError:java.library.path中没有rxtxSerial

     

在java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)

     

在java.lang.Runtime.loadLibrary0(Runtime.java:870)

     

在java.lang.System.loadLibrary(System.java:1122)

     

at gnu.io.CommPortIdentifier。(CommPortIdentifier.java:83)

     

at arduino.test.pkg3.ArduinoTest3.initialize(ArduinoTest3.java:25)

     

at arduino.test.pkg3.ArduinoTest3.main(ArduinoTest3.java:80)

守则:

01: package arduino.test.pkg3;
02: 
03: import java.io.BufferedReader;
04: import java.io.InputStreamReader;
05: import java.io.OutputStream;
06: import gnu.io.CommPortIdentifier; 
07: import gnu.io.SerialPort;
08: import gnu.io.SerialPortEvent; 
09: import gnu.io.SerialPortEventListener; 
10: import java.util.Enumeration;
11: 
12: public class ArduinoTest3 implements SerialPortEventListener {
13: 
14:     SerialPort serialPort;
15:     private static final String PORT_NAMES[] = {"COM3"};
16:     private BufferedReader input;
17:     private OutputStream output;
18:     private static final int TIME_OUT = 2000;
19:     private static final int DATA_RATE = 9600;
20: 
21:     public void initialize(){
22:         System.setProperty("gnu.io.rxtx.SerialPorts", "COM3");
23: 
24:         CommPortIdentifier portId = null;
25:         Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();

        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{
            serialPort = (SerialPort) portId.open(this.getClass().getName(), TIME_OUT);

            serialPort.setSerialPortParams(DATA_RATE,
            SerialPort.DATABITS_8,
            SerialPort.STOPBITS_1,
            SerialPort.PARITY_NONE);

            input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
            output = serialPort.getOutputStream();

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

    public synchronized void close(){
        if(serialPort != null){
            serialPort.removeEventListener();
            serialPort.close();
        }
    }

    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());
            }
        }
    }

    public static void main(String[] args) throws Exception{
        ArduinoTest3 main = new ArduinoTest3();
80 :        main.initialize();
        Thread t=new Thread(){
            public void run(){
                try{Thread.sleep(1000000);}catch(InterruptedException ie) {}
            }
        };
        t.start();
        System.out.println("Started");
    }
}

希望你们找到答案:)

1 个答案:

答案 0 :(得分:1)

我解决了这个问题......

我还应该制作' RXTXcomm.jar '图书馆与一个' dll'文件名为' rxtxSerial.dll '。 但是在我添加了' dll'文件,我有一个不同的错误,但这次问题来自' dll'归档自己,所以经过大量的研究,我找到了完整的“dll'文件(http://jlog.org/rxtx-win.html)和教程(https://www.youtube.com/watch?v=43Vdpz1YmdU)并且它有效 :)。

希望有人能发现我的经验有用。