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

如何在Android Things上获取LV-MaxSonar LV-EZ0测距仪的标准输出?

问题排查与解决思路

看起来你遇到的核心问题是传感器没进入预期的串口ASCII输出模式,再加上读取代码里的多余字节干扰,导致读不到符合规格的R+三位数字+回车格式数据。下面是具体的排查和修复步骤:

1. 优先检查传感器的模式引脚配置

LV-MaxSonar LV-EZ0的输出模式是由**Mode引脚(Pin 4)**决定的:

  • 要启用你需要的串口ASCII输出,必须把Mode引脚连接到Vcc(高电平)
  • 如果这个引脚悬空、接GND或者接线错误,传感器会自动切换到其他输出模式(比如模拟电压或脉冲宽度输出),这时候你从串口读到的就是对应模式的原始数值,而非预期的ASCII字符串——这和你现在看到的“数值随距离变化但格式完全不对”的现象完全吻合

赶紧确认一下Mode引脚的接线,确保它已经正确连到树莓派的3.3V或5V引脚(传感器兼容两种电平逻辑)。

2. 移除读取代码中的多余字节

你的readUartBuffer方法里,自行添加了bout.write(23)和bout.write(0),这会把无关字节混入原始串口数据,干扰你对真实输出的判断。修改后的代码应该只读取传感器的原始输出:

public void readUartBuffer(UartDevice uart) throws IOException {
    ByteArrayOutputStream bout = new ByteArrayOutputStream();
    final int maxCount = 1024;
    byte[] buffer = new byte[maxCount];
    int total = 0;
    int cycles = 0;
    int count;

    // 去掉多余的前置/后置字节写入
    while ((count = uart.read(buffer, buffer.length)) > 0) {
        bout.write(buffer, 0, count);
        total += count;
        cycles++;
    }

    byte[] buf = bout.toByteArray();
    String bufStr = Arrays.toString(buf);
    // 新增ASCII字符串转换,方便直接观察输出内容
    String asciiOutput = new String(buf, StandardCharsets.US_ASCII);
    Log.d(TAG, "Received " + total + " bytes in " + cycles + " cycles: \nRaw Bytes: " + bufStr + "\nASCII: " + asciiOutput);
}

3. 额外的硬件接线检查

  • 确认UART引脚交叉连接:树莓派的RX引脚要接传感器的TX引脚(Pin 5),如果只是读取数据,树莓派的TX可以不用接传感器的RX
  • 传感器供电要稳定:建议用树莓派的5V引脚给传感器供电,避免3.3V供电可能出现的电压不足问题

验证方式

调整完接线和代码后重新运行,正常情况下你应该能看到类似R045\r(对应45英寸)的ASCII输出。如果还是有问题,可以用树莓派上的minicom工具直接读取UART端口,先排除代码层面的问题,确认硬件输出是否正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:24:56