Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 而即使在满足条件后,循环仍会继续(Arduino Nano 33 BLE)_C++_Arduino_Bluetooth Lowenergy_Arduino C++ - Fatal编程技术网

C++ 而即使在满足条件后,循环仍会继续(Arduino Nano 33 BLE)

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&

我正在使用VS代码中的platform.io与Arduino Nano 33 BLE合作。我也在使用ArduinoBLE库。我创建了一个类,它将为我管理所有ble函数。我工作的第一个功能之一就是这个打印设备(duration),它应该在一定的时间内扫描和打印找到的可打印广告。它可以工作,但是由于某种原因,它离开了循环,然后再次运行

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

}
我不知道这是怎么发生的。它似乎在打印“自己的地址”时离开了循环,但随后又返回到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