简体   繁体   中英

Reading bytes from Arduino Uno

I'm using the RxTx library for communication between Arduino and Java app. My Arduino cod is:

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

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

If you want to see all my java cods All . I have a method for read bytes from arduino

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

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

        return buff;
    }

In TestComunication class i print receive data

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");

    }
}

I am sending string

Hello world

from Arduino Uno. In my Java app i' m reading this string as bytes. But i'm receiving choppy data. Example:

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

The main problem: The string Hello World convert to ASCII is

072 101 108 108 111 032 119 111 114 108 100

but i don't receive that sequence every time. Example i receive:

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

But length of receive data is correct 11 bytes

Hmmm what return this.inputStream.readFully(buff, 0, num); check this method, maybe it's wrong

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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