Nano 33 BLE with MAX30100

I'm trying to use the MAX30100 with the ArduinoBLE lib on a nano 33 BLE.
I can use the MAX30100 without any other sensor but when using the ArduinoBLE functionality it stops updating BPM and SpO2 values since beats are not found.

I believe the piece of code that updates the values is not being called fast enough (pox.update()) but I can't upgrade the code to separate the BLE and MAX30100 functionalities.

#include <ArduinoBLE.h>
#include "MAX30100_PulseOximeter.h"

#define REPORTING_PERIOD_MS     1000
 
PulseOximeter pox;
uint32_t tsLastReport = 0;

void onBeatDetected()
{
    Serial.println("Beat!");
}


BLEService ledService("19B10000-E8F2-537E-4F6C-D104768A1214"); // BLE LED Service

// BLE LED Switch Characteristic - custom 128-bit UUID, read and writable by central
BLEByteCharacteristic switchCharacteristic("19B10001-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);

const int ledPin = LED_BUILTIN; // pin to use for the LED

void setup() {
  Serial.begin(9600);
  while (!Serial);

  // set LED pin to output mode
  pinMode(ledPin, OUTPUT);

  // begin initialization
  if (!BLE.begin()) {
    Serial.println("starting BLE failed!");

    while (1);
  }

  if (!pox.begin()) {
        Serial.println("MAX30100 FAILED");
        for(;;);
    } else {
        Serial.println("MAX30100 ON");
    }

  // set advertised local name and service UUID:
  String address = BLE.address();
  BLE.setLocalName("HertbeatSensor");
  BLE.setAdvertisedService(ledService);

  // add the characteristic to the service
  ledService.addCharacteristic(switchCharacteristic);

  // add service
  BLE.addService(ledService);
  
  // set the initial value for the characeristic:
  switchCharacteristic.writeValue((int)0);

  // start advertising
  BLE.advertise();

  pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);
 
  // Register a callback for the beat detection
  pox.setOnBeatDetectedCallback(onBeatDetected);

  Serial.println("BLE LED Peripheral");

}

void loop() {
  // listen for BLE peripherals to connect:
  BLEDevice central = BLE.central();

  // if a central is connected to peripheral:
  if (central) {
    Serial.print("Connected to central: ");
    // print the central's MAC address:
    Serial.println(central.address());

    // while the central is still connected to peripheral:
    while (central.connected()) {
      pox.update();
      if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
          Serial.print("Heart rate:");
          Serial.print(pox.getHeartRate());
          Serial.print("bpm / SpO2:");
          Serial.print(pox.getSpO2());
          Serial.println("%");

          switchCharacteristic.writeValue((int)pox.getHeartRate());
    
          tsLastReport = millis();
      }
  
    }

    

    // when the central disconnects, print it out:
    Serial.print(F("Disconnected from central: "));
    Serial.println(central.address());
  }
}

I'm missing a wiring diagram of your setup. As I assume you use a breakout board for the MAX30100, post a link to it's schematics too! My (wild) guess is a wrong voltage on the I2C bus.

I'm not from electronics background, can you explain why there's a wrong voltage on the I2C bus when I both libs but not when I only use the MAX30100 Sensor?

Where is the link to the schematics of the breakout board you use?

You should change your code to call pox.update() as often as possible and not only if you are connected to BLE.

Yes! That solved it! Thank you so much!!