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

从Arduino串口读取起始字符,基于安卓输入实现四功能区分的技术咨询

优化安卓-Arduino串口字符串识别的方案

嘿,我注意到你正在尝试通过安卓设备给Arduino发送特定字符串(st/sp/cc/cb)来触发不同功能,但现有代码还有几个关键问题需要调整,才能让它真正跑起来!

现有代码的核心问题

你的代码里缺少串口输入读取逻辑——inStr变量一直是空的,所以那几个if判断永远不会被触发。另外多个独立的if判断也会导致不必要的重复检查,效率不高。

优化后的完整代码

// 存储输入的字符串
String inStr = "";
char inChar;
int x = 0;

void setup() {
  // 初始化串口波特率,和安卓端保持一致
  Serial.begin(9600);
}

void loop() {
  // 检查串口是否有可用数据
  while (Serial.available() > 0) {
    inChar = Serial.read();
    // 假设安卓端发送字符串时以换行符'\n'作为结束标志(大部分串口APP默认如此)
    if (inChar != '\n') {
      // 将读取到的字符添加到输入字符串中
      inStr += inChar;
    } else {
      // 当读取到结束符时,开始匹配命令
      processCommand(inStr);
      // 重置输入字符串,准备接收下一次命令
      inStr = "";
      x = 0;
    }
  }
}

// 单独的命令处理函数,让代码更清晰
void processCommand(String cmd) {
  // 用else if避免重复判断,提升效率
  if (cmd.equals("st")) {
    Serial.println("Received command: st - 执行启动操作");
    // 在这里添加st对应的功能代码,比如控制电机启动
    // motor.start();
  } else if (cmd.equals("sp")) {
    Serial.println("Received command: sp - 执行停止操作");
    // 添加sp对应的功能代码
    // motor.stop();
  } else if (cmd.equals("cc")) {
    Serial.println("Received command: cc - 执行顺时针操作");
    // 添加cc对应的功能代码
    // motor.rotateClockwise();
  } else if (cmd.equals("cb")) {
    Serial.println("Received command: cb - 执行逆时针操作");
    // 添加cb对应的功能代码
    // motor.rotateCounterClockwise();
  } else {
    // 处理未知命令的情况
    Serial.print("Unknown command: ");
    Serial.println(cmd);
  }
}

关键优化点说明

  • 添加串口读取逻辑:通过Serial.available()检查是否有数据,逐个字符读取直到遇到结束符(这里用\n,你可以根据安卓APP的设置调整,比如有些APP用\r或者自定义结束符)。
  • 分离命令处理函数:把命令判断逻辑放到单独的processCommand函数里,让代码结构更清晰,后期扩展新命令也更方便。
  • 使用equals()比较字符串:Arduino的String类推荐用equals()方法做相等判断,比==更可靠(避免内存地址对比的问题)。
  • 增加错误处理:添加了未知命令的分支,方便调试时排查问题。

安卓端注意事项

确保你的安卓串口APP发送字符串时,末尾添加了换行符(或者和代码里设置的结束符一致),否则Arduino会一直等待结束符,无法触发命令处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:23:30