You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Arduino串口输入流中提取指定数据段(如000.00LPM)

解决方案

核心思路

  1. 先完整接收Arduino发送的每一次数据包(避免分段接收导致的不完整数据)
  2. 用正则表达式匹配xxx.xxLPM格式的流量数据段
  3. 提取后更新UI或存储数据,同时清空缓冲区准备下一次接收

修改后的代码

// 确保dataBuffer是类的成员变量,用于持续拼接串口数据
private String dataBuffer = "";

private void Serial_EventBasedReading(SerialPort activePort){
    activePort.addDataListener(new SerialPortDataListener(){
        public int getListeningEvents(){return SerialPort.LISTENING_EVENT_DATA_RECEIVED;}
        public void serialEvent(SerialPortEvent event){
            byte[] newData = event.getReceivedData();
            // 拼接本次收到的字节数据到缓冲区
            for(int i=0;i<newData.length;i++){
                dataBuffer += (char)newData[i];
            }

            // 检查是否收到完整的数据包(假设Arduino发送的数据包以换行结尾,若没有则可根据长度或固定标记判断)
            if(dataBuffer.contains("\n")){
                // 使用正则表达式匹配"数字.数字LPM"格式的内容
                String pattern = "\\d+\\.\\d+LPM";
                java.util.regex.Pattern r = java.util.regex.Pattern.compile(pattern);
                java.util.regex.Matcher m = r.matcher(dataBuffer);

                if(m.find()){
                    String flowData = m.group(); // 提取到的"000.00LPM"数据
                    // 更新UI必须在Swing事件线程中执行,避免线程安全问题
                    javax.swing.SwingUtilities.invokeLater(() -> {
                        jTextArea_lgfc1.setText(flowData); // 显示提取的流量数据
                        // 这里可以添加存储逻辑,比如写入文件或保存到变量
                        // 示例:saveFlowData(flowData);
                    });
                }

                // 清空缓冲区,准备接收下一次的数据包
                dataBuffer = "";
            }
        }
    });
}

关键说明

  • 数据包完整性判断:如果Arduino发送的字符串没有换行符,你可以根据固定长度判断(比如示例字符串的总长度是固定的),或者让Arduino在每次发送的末尾添加一个特殊标记(比如###),然后用dataBuffer.contains("###")来判断是否完整接收。
  • 正则表达式解释:\d+\.\d+LPM表示匹配1个以上数字 + 小数点 + 1个以上数字 + LPM,刚好对应你需要的000.00LPM格式。
  • Swing线程安全:所有UI组件的更新必须在Swing事件调度线程中执行,所以用SwingUtilities.invokeLater包裹UI更新代码,避免界面卡顿或异常。
  • 数据存储:你可以在提取到flowData后,添加自己的存储逻辑,比如写入本地文件、存入数据库或者保存到类成员变量供后续使用。

内容的提问来源于stack exchange,提问作者Sudheer Mishra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 07:27:36