2016-11-27 36 views
0

我需要通過Linux Ubuntu上的COM端口使用Java編程語言將變量發送給Arduino UNO。使用庫JSSC或RXTX。像:使用Java在ubuntu上發送變量到Arduino COM端口

String text = "turn_on"; 
write(text); 

和喜歡:

int num = 1; 
write(num); 

我Arduino的代碼是這樣的:

include <SoftwareSerial.h> 

void setup() { 
    pinMode(9, OUTPUT); 
    Serial.begin(57600); 
} 
int st; 
void loop() { 
    st = Serial.read(); 
    if(st == 1){ 
    digitalWrite(9, 1); 
    } 

} 

我試過這段代碼:

import jssc.SerialPort; 
import jssc.SerialPortEvent; 
import jssc.SerialPortEventListener; 
import jssc.SerialPortException; 

public class Test { 

    private static SerialPort serialPort; 

    public static void main(String[] args) { 

     serialPort = new SerialPort("/dev/ttyUSB2"); 
     try { 

      serialPort.openPort(); 

      serialPort.setParams(SerialPort.BAUDRATE_57600, 
           SerialPort.DATABITS_8, 
           SerialPort.STOPBITS_1, 
           SerialPort.PARITY_NONE); 

      serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN | 
              SerialPort.FLOWCONTROL_RTSCTS_OUT); 

      serialPort.addEventListener(new PortReader(), SerialPort.MASK_RXCHAR); 

      serialPort.writeInt(1); 
     } 
     catch (SerialPortException ex) { 
      System.out.println(ex); 
     } 
    } 

    private static class PortReader implements SerialPortEventListener { 

     public void serialEvent(SerialPortEvent event) { 
      if(event.isRXCHAR() && event.getEventValue() > 0){ 
       try { 

        String data = serialPort.readString(event.getEventValue()); 

        serialPort.write(1); 
       } 
       catch (SerialPortException ex) { 
        System.out.println(ex); 
       } 
      } 
     } 
    } 
} 

怎麼辦呢?

+2

描述你已經嘗試了什麼和任何研究的結果。 (你在問之前已經找到了解決問題的辦法,是不是?Stack Overflow並不意味着取代基本的搜索技巧。) – MikeJRamsey56

+0

哦......對不起,我忘了。我重寫我的問題。現在你可以看到 –

回答

0

嘗試寫入串行端口後休眠。配置Arduino進行流量控制,首先看看正常的讀寫是否正常工作,然後移動到eventListener方法意味着如果java寫入arduino,arduino能夠讀取,然後從arduino發送數據並且java端應該能夠讀取。這將消除許多可能性。進一步嘗試一些其他類似的庫也像SerialPundit或github上的fazecast。