2017-02-24 89 views
1

我正在尝试将数据写入到我的Arduino Uno中,并且还收到了它的日期。使用Java中的串行通信从Arduino写入和读取数据

我在Windows 8.1上使用NetBeans,并在库“RXTXcomm.jar”中执行此操作。

我的代码是这样的,我的Arduino是在COM3,并上线25和80将引发一个错误:

错误

java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver Exception in thread "main" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path

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

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

at 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

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

我也应该让 'RXTXcomm.jar' 库谈话到名为 'rxtxSerial.dll' A 'DLL' 文件。 但我添加'dll'文件后,我得到了一个不同的错误,但这次的问题是从'dll'文件本身,所以经过大量的研究,我发现了完整的'dll'文件(http://jlog.org/rxtx-win.html )和教程(https://www.youtube.com/watch?v=43Vdpz1YmdU),它的工作:)。

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