即使在满足条件后循环仍在继续(Arduino Nano 33 BLE)

时间:2021-04-14 13:53:31

标签: c++ arduino bluetooth-lowenergy arduino-c++

我在 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 循环,而不是像它应该的那样继续延迟。有谁知道发生了什么? 提前致谢!

0 个答案:

没有答案