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

如何在Arduino代码中拆分HC-06接收的App Inventor发送的数值

问题根因

你当前收到的59,1,59,2...序列是两个问题共同导致的:

  1. App Inventor侧将分号、数值拆分为单个字节逐个发送,分号的ASCII码对应十进制59,因此会穿插在数值序列中
  2. 数值是直接按原始数值字节发送(例如数值1发送的是字节0x01),而非字符形式的ASCII码(例如字符'1'对应ASCII码49),导致Arduino侧无法按字符串规则解析拆分
修复方案

1. App Inventor侧修改

  • 将每个要发送的数值先转换为文本类型,再用分号作为分隔符拼接为完整字符串,格式参考:1;2;3;4;5;6;(末尾额外加一个分号作为结束标记,避免最后一个数值无法被正确识别)
  • 选择发送文本/字符串类型的整段数据,不要拆分为单个字节逐个发送,不要直接发送原始数值字节

2. Arduino侧解析代码

使用内置的readStringUntil()方法按分号拆分字符串,再转换为int类型即可:

// 定义接收变量
int A, B, C, D, E, F;
// HC-06默认波特率为9600,若修改过波特率请同步修改
const int BAUD_RATE = 9600;

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

void loop() {
  // 等待串口接收到完整数据(长度满足6个数值+分隔符的最小长度)
  if (Serial.available() >= 11) {
    // 按分号依次读取每个数值并转成int
    A = Serial.readStringUntil(';').toInt();
    B = Serial.readStringUntil(';').toInt();
    C = Serial.readStringUntil(';').toInt();
    D = Serial.readStringUntil(';').toInt();
    E = Serial.readStringUntil(';').toInt();
    F = Serial.readStringUntil(';').toInt();

    // 测试输出,按需修改为你的业务逻辑
    Serial.print("A="); Serial.println(A);
    Serial.print("B="); Serial.println(B);
    Serial.print("C="); Serial.println(C);
    Serial.print("D="); Serial.println(D);
    Serial.print("E="); Serial.println(E);
    Serial.print("F="); Serial.println(F);

    // 清空串口缓存,避免残留数据影响下一次接收
    while (Serial.available()) {
      Serial.read();
    }
  }
}
验证注意事项
  • 确保HC-06模块的实际波特率和Arduino串口初始化的波特率一致
  • 若需要发送大于9的数值,该方案依然可以正常解析,无需额外修改
  • 若出现解析错位,可以在两次发送之间加100ms以上的间隔,避免多组数据粘连

内容的提问来源于stack exchange,提问作者André Fabris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:06:03