【发布时间】:2019-02-28 08:09:55
【问题描述】:
我正在使用 JSSC 类从 Arduino Uno 接收字符串。 Arduino 通过 COM3 连接到我的电脑。在 Arduino 的 setup void 中,它向 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);
}
}
}
}
阿杜诺:
String input;
void setup() {
Serial.begin(9600);
Serial.print("Arduino Ready");
}
void loop() {
}
这是控制台输出的内容:
Ard
uino
Rea
dy
Ard 前面的空格无法从控制台输出中复制。 有没有办法让我在一条线上完成这一切? 将来我可能还需要再次从 Arduino 接收数据。 谢谢。
【问题讨论】:
-
您可以将所有数据存储在缓冲区中并从那里格式化吗?
-
永远不要将字符串与
==进行比较 -
@GyroGearless 那么我该如何比较字符串呢?