Cannot get Acc data from Nano BLE 33 Sense connection

Hi
I have read some posts regarding BLE sense Arduino connection here, but not sure there is any post related to my issue of getting data from the Acceleration sensor in my MIT app. I can successfully connect to the Arduino but cannot get data after pressing the Start button (it's crashed). I can get data successfully on my laptop and also nRF app after pressing the notification button. One topic that I am not sure is about the UUID number, but I got them from the nRF app for service and characteristics of start/stop buttons and also ACC xyz. I appreciate any help in diagnosing the issue and resolving it (I have tried both short and long formats of UUID in the start and stop buttons).

My Arduino code in IDE:
#include <ArduinoBLE.h>
#include "Arduino_BMI270_BMM150.h"

// Define BLE service and characteristics as strings to ensure compatibility
BLEService imuService("180D"); // Generic UUID for a BLE service
BLECharacteristic accelXChar("2A63", BLERead | BLENotify, 20); // Increase the size for string data
BLECharacteristic accelYChar("2A64", BLERead | BLENotify, 20);
BLECharacteristic accelZChar("2A65", BLERead | BLENotify, 20);
BLECharacteristic gyroXChar("2A66", BLERead | BLENotify, 20);
BLECharacteristic gyroYChar("2A67", BLERead | BLENotify, 20);
BLECharacteristic gyroZChar("2A68", BLERead | BLENotify, 20);

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

// Only wait for Serial if connected (useful for USB debugging, skips for power bank use)
if (Serial) {
while (!Serial);
}

// Initialize IMU
if (!IMU.begin()) {
Serial.println("Failed to initialize IMU!");
while (1);
}

// Initialize BLE
if (!BLE.begin()) {
Serial.println("Failed to start BLE!");
while (1);
}

// Set up BLE device name and service
BLE.setLocalName("Arduino_IMU");
BLE.setAdvertisedService(imuService);

// Add characteristics to the service
imuService.addCharacteristic(accelXChar);
imuService.addCharacteristic(accelYChar);
imuService.addCharacteristic(accelZChar);
imuService.addCharacteristic(gyroXChar);
imuService.addCharacteristic(gyroYChar);
imuService.addCharacteristic(gyroZChar);
BLE.addService(imuService);

// Start advertising
BLE.advertise();
Serial.println("BLE advertising with IMU service started");
}

void loop() {
BLEDevice central = BLE.central();

if (central) {
Serial.print("Connected to central: ");
Serial.println(central.address());

while (central.connected()) {
  float accelX, accelY, accelZ;
  float gyroX, gyroY, gyroZ;

  if (IMU.accelerationAvailable() && IMU.gyroscopeAvailable()) {
    IMU.readAcceleration(accelX, accelY, accelZ);
    IMU.readGyroscope(gyroX, gyroY, gyroZ);

    // Convert float values to strings using String class
    String accelXStr = String(accelX, 2);
    String accelYStr = String(accelY, 2);
    String accelZStr = String(accelZ, 2);
    String gyroXStr = String(gyroX, 2);
    String gyroYStr = String(gyroY, 2);
    String gyroZStr = String(gyroZ, 2);

    // Update BLE characteristics with string IMU data
    accelXChar.writeValue(accelXStr.c_str());
    accelYChar.writeValue(accelYStr.c_str());
    accelZChar.writeValue(accelZStr.c_str());
    gyroXChar.writeValue(gyroXStr.c_str());
    gyroYChar.writeValue(gyroYStr.c_str());
    gyroZChar.writeValue(gyroZStr.c_str());

    // Print data to Serial Monitor for verification
    Serial.print("Accel X: "); Serial.print(accelXStr);
    Serial.print(" Y: "); Serial.print(accelYStr);
    Serial.print(" Z: "); Serial.print(accelZStr);
    Serial.print(" | Gyro X: "); Serial.print(gyroXStr);
    Serial.print(" Y: "); Serial.print(gyroYStr);
    Serial.print(" Z: "); Serial.println(gyroZStr);
  }

  delay(100); // Adjust delay as needed
}

Serial.println("Disconnected from central");

}
}