从Arduino Uno读取字节

时间:2015-01-01 13:13:01

标签: java arduino rxtx serial-communication arduino-uno

我使用RxTx库进行Arduino和Java app之间的通信。我的Arduino鳕鱼是:

void setup(){
  Serial.begin(9600);
}

void loop(){
  Serial.println("Hello world");
  delay(1000);
} 

如果你想看到我所有的java鳕鱼All。我有一个从arduino读取字节的方法

public byte[] readBlocked(int num) throws IOException {
        byte[] buff;
        buff = new byte[num];

       this.inputStream.readFully(buff, 0, num);

        return buff;
    }

在TestComunication类中,我打印接收数据

public class TestComunication {

    private Connection connection;
    //private CommPortIdentifier port;
    private static final String PORT_NAMES[] = {
        "/dev/tty.usbserial-A9007UX1", // Mac OS X
        "/dev/ttyACM0", // Raspberry Pi
        "/dev/ttyUSB0", // Linux
        "COM3", // Windows
        "/dev/tty.usbmodem621",
        "/dev/tty.usbmodem411"
    };

    public TestComunication() throws IOException {

        SerialClassConnection serialClassConnection = null;
        CommPortIdentifier port = null;

        serialClassConnection = SerialClassConnection.getInstance();
        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)) {
                    port = currPortId;
                    break;
                }
            }
        }

        if (port == null) {
            System.out.println("Could not find COM port.");
            return;
        }
        System.out.println(port.getName());

        serialClassConnection.openPort(port);

        this.connection = serialClassConnection;

        this.manageData(this.connection);
    }

    private void manageData(Connection conn) throws IOException {

        Connection connection;
        int availableBytes;
        byte[] inBytes;

        connection = conn;
        // listen forever for incoming data

        while (true) {
            if (connection.isDataAvailable()) {

                inBytes = connection.readBlocked(11);
                String text = new String(inBytes, "UTF-8");
                System.out.println(text);
            }

        }
    }

    public static void main(String[] args) throws IOException {

        new TestComunication();
        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(5000);
                } catch (InterruptedException ie) {
                }
            }
        };
        t.start();
        System.out.println("Started");

    }
}

我正在发送字符串

  

Hello world

来自Arduino Uno的

在我的Java应用程序中我'我把这个字符串读成字节。但是我收到了不稳定的数据。例如:

Native lib Version = RXTX-2.1-7
Java lib Version   = RXTX-2.1-7
/dev/tty.usbmodem621
Held
Hello
world
Hel
lo world
H
ello world

主要问题:转换为ASCII的字符串Hello World

  

072 101 108 108 111 032 119 111 114 108 100

但我每次都没有收到这个序列。我收到的例子:

  

072 108 101 108 111 032 119 111 114 108 100

     

101 072 108 108 111 032 111 114 108 119 100

     

101 072 108 111 032 114 108 111 119 100 108

但是接收数据的长度是正确的11个字节

0 个答案:

没有答案