繁体   English   中英

从Arduino Uno读取字节

[英]Reading bytes from Arduino Uno

我正在使用RxTx库在Arduino和Java应用程序之间进行通信。 我的Arduino鳕鱼是:

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

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

如果您想查看我所有的java cods 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");

    }
}

我正在发送字符串

你好,世界

来自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

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

072 101 108 108 111 032 119 111 114 108 100

但我不会每次都收到该序列。 我收到的示例:

072 108 101 108 111 032 119 111 114 108 100

101072108108111032111114108119100

101 072 108 111 032 114 108 111119 100 108

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

嗯什么返回this.inputStream.readFully(buff, 0, num); 检查此方法,也许是错误的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM