Arduino Nano + HC-05: AT+INQ给出损坏的输出



我正在使用Arduino Nano + HC-05蓝牙+ ENC28J60以太网模块。使用JeeLabs.net的EtherCard.h。我从蓝牙模块读取有一些问题。

蓝牙模块设置为AT模式(用夹子按住按钮/将5V输入引脚34)都试过了)

以下是我的配置:

ROLE=1
CMODE=1
INQM=1,5,23

这是loop()及其相关函数

static uint32_t timer;
void loop () {
  ether.packetLoop(ether.packetReceive());
  if (millis() >= timer) {
    if (BTScan()) {
      sendRequest(); // Send HTTP POST with `deviceBT` using EtherCard
    }
  }
}
String deviceBT = "";
bool BTScan() {
  bluetooth.listen();
  if (bluetooth.available()) {
    deviceBT = "";
    String readstr = bluetooth.readString();
    readstr.trim();
    if (readstr == PSTR("ERROR:(16)")) {
      Serial.println(F("BLUETOOTH NOT INITIALIZEDnBLUETOOTH INIT:"));
      bluetooth.println(F("AT+INIT"));
      if (bluetooth.find(F("OK"))) Serial.println(F("OK"));
    } else if (readstr.length() > 0) {
      for (int i = 0; i < 2; i++) {
        digitalWrite(LED_PIN, HIGH); delay(100);
        digitalWrite(LED_PIN, LOW);  delay(200);
      }
      if (readstr.indexOf(F("+INQ:")) > -1) {
        Serial.println(F("BLUETOOTH FOUND:"));
        Serial.println(readstr);
        deviceBT = readstr;
        return true;
      }
    }
  }
  Serial.println(F("BLUETOOTH INQUIRE START:"));
  bluetooth.println(F("AT+INQ"));
  timer = millis() + 5000;
  return false;
}

假设我的蓝牙ID是303A:64:9A65CD程序通过串行响应。

BLUETOOTH INQUIRE START:
BLUETOOTH FOUND:
OK
+INQ:303A:è4:9A<5CD,2010C,7FFC
// sometimes
BLUETOOTH FOUND:
gK
+INQ:303A:6::9A85F¢,2010C,7FFF
// some other time
BLUETOOTH FOUND:
+INQ:303A:64:9C<5FD,20˜0C,7FFF

蓝牙在另一个没有以太网部分的程序中工作得很好,物理安装都是一样的。

我的所有草图使用了17,664字节(57%),全局变量使用了984字节(48%)

请帮助。我的代码有什么问题吗?

我想我找到了一个变通办法,也许这就是解决办法。

loop()函数中,我在调用ether.packetLoop()后添加了500ms的一点延迟,并且似乎可以工作。

不确定这是否有任何副作用,因为我是这种编程的绝对新手。

void loop () {
  ether.packetLoop(ether.packetReceive());
  delay(500); // Add 500ms delay to the loop
  if (millis() >= timer) {
    if (BTScan()) {
      sendRequest(); // Send HTTP POST with `deviceBT` using EtherCard
    }
  }
}

最新更新