C++ 而即使在满足条件后,循环仍会继续(Arduino Nano 33 BLE)
我正在使用VS代码中的platform.io与Arduino Nano 33 BLE合作。我也在使用ArduinoBLE库。我创建了一个类,它将为我管理所有ble函数。我工作的第一个功能之一就是这个打印设备(duration),它应该在一定的时间内扫描和打印找到的可打印广告。它可以工作,但是由于某种原因,它离开了循环,然后再次运行 main.cpp:C++ 而即使在满足条件后,循环仍会继续(Arduino Nano 33 BLE),c++,arduino,bluetooth-lowenergy,arduino-c++,C++,Arduino,Bluetooth Lowenergy,Arduino C++,我正在使用VS代码中的platform.io与Arduino Nano 33 BLE合作。我也在使用ArduinoBLE库。我创建了一个类,它将为我管理所有ble函数。我工作的第一个功能之一就是这个打印设备(duration),它应该在一定的时间内扫描和打印找到的可打印广告。它可以工作,但是由于某种原因,它离开了循环,然后再次运行 main.cpp: #include <Arduino.h> #include <string> #include <bg96.hpp&
#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
}
我不知道这是怎么发生的。它似乎在打印“自己的地址”时离开了循环,但随后又返回到while循环,而不是继续延迟。有人知道发生了什么吗?
提前谢谢 您在
循环
内部打印自己的地址
,而不是ble_管理器::打印设备
,因此您正在退出该功能。这意味着你很可能在蓝牙方面有问题代码>就是调用ble\u manager::print\u devices
@NathanOliver你说得对,当我删除get\u地址时,它不会重新启动。我还是不明白为什么,但是谢谢!get\u address
是做什么的?您可能在get\u address
中错误地调用了print\u设备。查看内部get_address
并进行检查。它是这样做的:uint8_t ble_管理器::get_address(char*address){String str_address=ble.address();strcpy(address,str_address.c_str());}所以很奇怪,我仍然试图在不引起while循环错误的情况下获取地址
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