Я использую класс JSSC для получения строки из Arduino Uno.Arduino подключен к моему компьютеру через COM3.В void настройки на Arduino он отправляет строку в java-программу, сообщающую, что Arduino готов к считыванию последовательных данных.Когда java-программа читает последовательный порт, она разбивает строку из Arduino на несколько строк с пробелами.Я предполагаю, что Java-программа печатает данные, когда они получены, а не ждет полной строки.Как я мог сделать так, чтобы программа считывала строку из Arduino и сохраняла ее в строку, а затем печатала на консоли.
Java:
package jtac;
import jssc.*;
public class JTAC {
public static SerialPort serialPort = new SerialPort("COM3");
public static PortReader portreader = new PortReader(serialPort);
public static boolean ready = false;
public static void main(String[] args) {
try {
serialPort.openPort();//Open serial port
//Thread.sleep(2000);
serialPort.setParams(SerialPort.BAUDRATE_9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);//Set params. Also you can set params by this string: serialPort.setParams(9600, 8, 1, 0);
serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
serialPort.addEventListener(portreader, SerialPort.MASK_RXCHAR);
while(!ready) {} //Wait for Arduino to fire up
}
catch (SerialPortException ex) {
System.out.println(ex);
}
}
}
class PortReader implements SerialPortEventListener {
SerialPort serialPort;
public PortReader(SerialPort serialPort) {
this.serialPort = serialPort;
}
@Override
public void serialEvent(SerialPortEvent event) {
if (event.isRXCHAR() && event.getEventValue() > 0) {
try {
String receivedData = serialPort.readString(event.getEventValue());
System.out.println(receivedData);
if(receivedData == "Arduino Ready") JTAC.ready = true;
} catch (SerialPortException ex) {
System.out.println("Error in receiving string from COM-port: " + ex);
}
}
}
}
Arduino:
String input;
void setup() {
Serial.begin(9600);
Serial.print("Arduino Ready");
}
void loop() {
}
Вот что выводит консоль:
Ard
uino
Rea
dy
Пробелы перед Ard не могут быть скопированы из вывода консоли.Есть ли способ, которым я мог бы сделать все это в одной строке?Возможно, мне понадобится снова получить данные от Arduino в будущем.Спасибо.