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

Processing中Serial Monitor字符串转int恒返回0问题求助

问题分析与解决

你的问题出在串口读取的字符串包含不可见的空白字符(比如Arduino发送的回车符\r),导致Processing的int()函数无法正确解析纯数字,返回默认值0。

Arduino的Serial.println()会发送\r\n(回车+换行),而readStringUntil('\n')读取到的字符串会包含前面的\r,比如实际是"494\r"而非纯"494",这种带非数字字符的字符串用int()解析就会失败。

修复步骤

  1. 先判断读取到的字符串是否为null,避免空指针异常
  2. 使用trim()方法去除字符串首尾的所有空白字符(包括\r、\n、空格等)
  3. 再将处理后的纯数字字符串转换为int类型
  4. 调整myPort.clear()的位置,避免误删未处理的串口数据

修改后的Processing代码

import processing.serial.*;

Serial myPort;
String sVal;

float w = 1023;
float h = 100;

void setup() {
  size(1023, 100);
  background(255);
  String portName = Serial.list()[2];
  myPort = new Serial(this, portName, 9600);
}

void draw() {
  if (myPort.available() > 0 ) {
    sVal = myPort.readStringUntil('\n');
    // 先判断字符串是否有效,再处理
    if (sVal != null) {
      sVal = sVal.trim(); // 去除首尾空白字符
      int val = int(sVal);
      println("i am int " + val);
      println("i am string " + sVal);
      line(val, 0, val, h);
    }
    myPort.clear(); // 处理完数据再清空缓冲区
  }
}

额外说明

  • trim()是关键:它会移除字符串开头和结尾的所有空白字符(包括不可见的控制字符),确保传给int()的是纯数字字符串
  • 不要在draw()的全局范围调用myPort.clear(),否则会清空还未处理的串口数据,导致丢包或读取不完整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:22:18