如何解决即使在满足条件后循环仍在继续Arduino Nano 33 BLE
我在 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 举报,一经查实,本站将立刻删除。