问题描述
我在 VS Code 中使用 platform.io 使用 Arduino Nano 33 BLE。我也在使用 ArduinoBLE 库。我创建了一个类,它将为我管理所有 ble 功能。我正在处理的第一个功能之一是 print_devices(duration),它应该扫描并打印找到的 ble 广告一段时间。它可以工作,但是由于某种原因它离开了循环,然后再次运行。
main.cpp :
#include <Arduino.h>
#include <string>
#include <bg96.hpp>
#include <ble_manager.hpp>
bg96 node = bg96();
ble_manager bluetooth = ble_manager();
uint8_t result = 0;
void setup() {
// initialize both serial ports:
node.init();
result = bluetooth.init();
Serial.begin(9600);
Serial.println("Serial Started");
}
void loop() {
//BLE PART
if (result){
Serial.println("Failed BLE");
}
Serial.println("BLE Started");
bluetooth.start_scan();
int scan_time = 5000;
bluetooth.print_devices(scan_time);
Serial.println("OWN ADDRESS");
char add[64];
bluetooth.get_address(add);
Serial.println("Delay 5 sec");
delay(5000);
//Other bg96 stuff
}
ble_manager.cpp 中的函数
void ble_manager::print_devices(int duration){
BLE.scan();
int starttime = millis();
int endtime = starttime;
while ((endtime - starttime) < duration){
Serial.print("TIME : ");
Serial.print(endtime - starttime);
Serial.print(" DURATION : ");
Serial.println(duration);
BLEDevice peripheral = BLE.available();
if (peripheral) {
// discovered a peripheral
Serial.println("discovered a peripheral");
Serial.println("-----------------------");
// print address
Serial.print("Address: ");
Serial.println(peripheral.address());
// print the local name,if present
if (peripheral.hasLocalName()) {
Serial.print("Local Name: ");
Serial.println(peripheral.localName());
}
uint8_t advertisement[64] = {0};
int adLength = peripheral.getAdvertisement(advertisement,64);
Serial.print("AD length :");
Serial.println(adLength);
int hexlen = 0;
Serial.print("RAW AD :");
for (int j = 0; j < (adLength); j++) {
uint8_t thisByte = advertisement[j];
Serial.print(thisByte,10);
Serial.print(" ");
hexlen++;
}
Serial.println();
Serial.print("RAW AD :");
for (int j = 0; j < (adLength); j++) {
uint8_t thisByte = advertisement[j];
Serial.print(thisByte,HEX);
Serial.print(" ");
}
Serial.println();
Serial.print("HEX length :");
Serial.print(hexlen);
Serial.println();
// print the RSSI
Serial.print("RSSI: ");
Serial.println(peripheral.RSSi());
Serial.println();
}
endtime = millis();
}
BLE.stopScan();
}
输出:
TIME : 4998 DURATION : 5000
TIME : 4998 DURATION : 5000
TIME : 4999 DURATION : 5000
OWN ADDRESS
4c:45:ee:de:9a:74
TIME : 0 DURATION : 536935700
TIME : 1 DURATION : 536935700
TIME : 1 DURATION : 536935700
TIME : 2 DURATION : 536935700
我不知道这是怎么发生的。似乎它在打印“OWN ADDRESS”时离开了循环,但随后又回到了 while 循环,而不是像它应该的那样继续延迟。有谁知道发生了什么? 提前致谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)