HC05蓝牙模块与Pololu A-Star 32U4 Prime SV连接故障求助
HC05蓝牙模块连接Pololu A-Star 32U4 Prime SV故障排查与修复
核心问题分析
你的代码和接线存在几个关键问题,和库无关,主要是引脚冲突、逻辑错误导致的:
- 引脚冲突:A-Star 32U4的0(RX)、1(TX)引脚是硬件USB串口,用于和电脑通信上传程序、调试。用
SoftwareSerial绑定这两个引脚会和硬件串口功能冲突,而且32U4本身支持多硬件串口,没必要用软件串口。 - 代码注释与实际配置矛盾:注释写的是用引脚7(RX)、6(TX),但实际初始化
SoftwareSerial btSerial(0, 1);用了0和1,逻辑混乱。 - 电机驱动休眠逻辑错误:
loop()里每次执行都会调用md.disableDrivers()并延迟500ms,导致电机刚启动就被强制休眠,根本无法持续工作。
修复步骤
1. 调整蓝牙模块接线
放弃0/1引脚,改用其他空闲数字引脚,比如引脚7(HC05的TX接控制器RX)、引脚6(HC05的RX接控制器TX),注意HC05的VCC接3.3V(不要接5V,会烧模块),GND共地。
2. 修改代码
以下是修正后的代码,解决了上述所有问题:
#include "DualG2HighPowerMotorShield.h" #include <SoftwareSerial.h> DualG2HighPowerMotorShield24v18 md; // 改用引脚7(RX)、6(TX)对应HC05的TX、RX SoftwareSerial btSerial(7, 6); char command; void stopIfFault() { if (md.getM1Fault() || md.getM2Fault()) { md.disableDrivers(); while (1); } } void setup() { btSerial.begin(9600); md.init(); md.calibrateCurrentOffsets(); delay(10); md.enableDrivers(); // 初始化时就启用驱动,不需要每次循环开关 } void loop() { stopIfFault(); if (btSerial.available()) { command = btSerial.read(); switch(command) { case 'N': // 前进 md.setM1Speed(255); md.setM2Speed(255); break; case 'S': // 后退 md.setM1Speed(-255); md.setM2Speed(-255); break; case 'E': // 左转 md.setM1Speed(-255); md.setM2Speed(255); break; case 'W': // 右转 md.setM1Speed(255); md.setM2Speed(-255); break; case '0': // 停止 md.setM1Speed(0); md.setM2Speed(0); break; } } }
3. 额外验证项
- 确认HC05的波特率是9600,和代码中
btSerial.begin(9600)一致,可以通过AT指令校准波特率。 - 检查电机驱动的供电是否正常,接线是否正确(电机线对应M1、M2接口)。
- 上传代码时,确保HC05模块没有接在0/1引脚上,避免上传失败,上传完成后再连接蓝牙模块。
内容的提问来源于stack exchange,提问作者xphagex
相关产品推荐
相关产品推荐

