Integrate fall detector sms(arduino) with bluetooth(using mit app inventor)

Hi, I need help to integrate these two codes, the first code is used to detect falls and send an SMS to a recipient number, the second code is used so that through Bluetooth, I can use the mit app inventor to send the number that I I want to send the sms and the message to be sent

I tried everything to integrate these two codes, but it's not working.I need help

the codes are below:

the first code:

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_MPU6050.h>
#include <SoftwareSerial.h>
#include <String.h>
#include <EEPROM.h>

//----------------------------------------------------------------------------------//

#define TRIGGER_PIN 9 // Pinagem do sensor ultrassônico
#define ECHO_PIN 10 // Pinagem do sensor ultrassônico
#define GSM_RX 7 // Pinagem do módulo GSM SIM900A
#define GSM_TX 8 // Pinagem do módulo GSM SIM900A
#define THRESHOLD_DISTANCE 10 // Valor de distância para detecção de presença
#define FALL_THRESHOLD_X 5 // Valor de aceleração no eixo X para detecção de queda
#define MAX_DISTANCE_PRESENCE 10 // Distância máxima para considerar a presença (ajuste conforme necessário)

//----------------------------------------------------------------------------------//

SoftwareSerial gsmSerial(GSM_RX, GSM_TX); // Comunicação com o módulo GSM via SoftwareSerial
Adafruit_MPU6050 mpu; // Objeto para interagir com o sensor MPU6050

bool presenceDetected = false;
unsigned long lastPresenceTime = 0;
const unsigned long presenceInterval = 5000; // Intervalo mínimo entre detecções de presença (5 segundos)

// Declaração das funções
bool detectPresence();
bool checkUltrasonicSensor();
bool checkMPU6050();
int detectFall();

//---------------------------------------// DEFINIÇÃO DE FUNCIONAMENTO DE CADA FUNÇÃO //---------------------------------------//

// Função para detectar presença usando o sensor ultrassônico
bool detectPresence() {
  digitalWrite(TRIGGER_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIGGER_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGGER_PIN, LOW);
  long duration = pulseIn(ECHO_PIN, HIGH);

  // Verifica se houve timeout durante a leitura do sinal de eco
  if (duration == 0) {
    Serial.println("Erro no sensor ultrassônico. Verifique a conexão.");
    return false;
  }

  float echoDistance = (duration / 2.0) / 29.1;   // Calcula a distância com base na duração do pulso de eco
  return echoDistance < MAX_DISTANCE_PRESENCE;   // Retorna verdadeiro se a distância estiver abaixo do valor definido para considerar a presença
}

// Função para verificar o funcionamento do sensor ultrassônico
bool checkUltrasonicSensor() {
  digitalWrite(TRIGGER_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIGGER_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGGER_PIN, LOW);

  long duration = pulseIn(ECHO_PIN, HIGH);

  // Verifica se houve timeout durante a leitura do sinal de eco
  if (duration == 0) {
    Serial.println("Erro no sensor ultrassônico. Verifique a conexão.");
    return false;
  }


  // Calcula a distância com base na duração do pulso de eco
  float echoDistance = (duration / 2.0) / 29.1;


  // Retorna verdadeiro se a distância estiver abaixo do limiar para considerar a presença
  return echoDistance < MAX_DISTANCE_PRESENCE;
}

// Função para verificar o funcionamento do sensor MPU6050
bool checkMPU6050() {
  sensors_event_t accel, gyro, temp;
  if (!mpu.getEvent(&accel, &gyro, &temp)) {
    return false;
  }

  float accelerationX = accel.acceleration.x;
  /*Serial.print("Aceleracao no eixo X: ");
  Serial.println(accelerationX);*/
  return true; // Retorna verdadeiro se o sensor MPU6050 estiver funcionando corretamente
}

// Função para detectar a queda com base na aceleração no eixo X
int detectFall() {
  sensors_event_t accel, gyro, temp;
  if (!mpu.getEvent(&accel, &gyro, &temp)) {
    Serial.println("Erro ao ler eventos do MPU6050. Verifique a conexão do sensor.");
    return 0;
  }

  float accelerationX = accel.acceleration.x;
  return abs(accelerationX);   // Retorna o valor absoluto da aceleração no eixo X
}

//----------------------------------------------------------------------------------//

void setup() {
  Serial.begin(9600); // Inicialização da comunicação serial com o monitor serial
  Serial.println("");
  Serial.println("Bem-vindo(a) ao projeto N.I.N.A.! Por favor, aguarde a inicialização do sistema!");
  Serial.println("");
  delay(1000);

  Serial.println("Iniciando o módulo GSM...");
  gsmSerial.begin(9600); // Inicialização da comunicação serial com o módulo GSM
  delay(5);
  gsmSerial.println("AT+CMGF=1"); // Configura o modo de mensagem para texto
  delay(1000);
  Serial.println("Módulo GSM inicializado!");
  delay(1000);

  // Inicialização do sensor MPU6050 e teste de funcionamento
  Serial.println("Iniciando o chip MPU6050...");
  if (!mpu.begin()) {
    Serial.println("Erro ao iniciar o chip MPU6050, verifique a conexão e tente novamente.");
    while (1); // Em caso de falha, entra em um loop infinito
  }
  else {
    Serial.println("Chip MPU6050 inicializado!");
  }

  Serial.println("Configurando faixa de aceleração do MPU6050...");
  mpu.setAccelerometerRange(MPU6050_RANGE_16_G); // Configuração da faixa de aceleração do MPU6050
  Serial.println("Faixa de aceleração do MPU6050 configurada!");

  Serial.println("Configurando sensor ultrassônico...");
  pinMode(TRIGGER_PIN, OUTPUT); // Configuração do pino de trigger do sensor ultrassônico como saída
  pinMode(ECHO_PIN, INPUT); // Configuração do pino de echo do sensor ultrassônico como entrada
  Serial.println("Sensor Ultrassônico Configurado!");

  Serial.println("");
  Serial.println("Inicialização realizada com sucesso! Aguardando detecção de presença...");
  Serial.println("");
  Serial.println("XXXXXXXX");
  delay(1000);
}

//----------------------------------------------------------------------------------//

void loop() {
  unsigned long currentMillis = millis();

  // Verifica se é o momento adequado para detectar presença
  if (currentMillis - lastPresenceTime >= presenceInterval) {
   
    // Verifica se a presença foi detectada pelo sensor ultrassônico
    if (detectPresence()) {
      long duration, echoDistance;

      // Gera um pulso para o sensor ultrassônico
      digitalWrite(TRIGGER_PIN, LOW);
      delayMicroseconds(2);
      digitalWrite(TRIGGER_PIN, HIGH);
      delayMicroseconds(10);
      digitalWrite(TRIGGER_PIN, LOW);

      // Mede a duração do pulso de eco
      duration = pulseIn(ECHO_PIN, HIGH);

      // Verifica se houve timeout durante a leitura do sinal de eco
      if (duration == 0) {
        Serial.println("Timeout durante a leitura do sinal de eco. Verifique a conexão do sensor ultrassônico.");
        delay(2000); // Aguarda 2 segundos antes de tentar novamente
        return;
      }

      // Calcula a distância com base na duração do pulso de eco
      float distance = (duration / 2.0) / 29.1;

      // Verifica se a distância está abaixo do valor desejado para considerar a presença (THRESHOLD_DISTANCE é definida no começo do código)
      if (distance < THRESHOLD_DISTANCE) {
        Serial.println("");
        Serial.println("Presença detectada! Sistema em alerta para possíveis impactos...");

        while(distance < THRESHOLD_DISTANCE) {

          //--------------------------------------------//

          long duration, echoDistance;

         // Gera um pulso para o sensor ultrassônico
          digitalWrite(TRIGGER_PIN, LOW);
          delayMicroseconds(2);
          digitalWrite(TRIGGER_PIN, HIGH);
          delayMicroseconds(10);
         digitalWrite(TRIGGER_PIN, LOW);

          // Mede a duração do pulso de eco
         duration = pulseIn(ECHO_PIN, HIGH);

          // Verifica se houve timeout durante a leitura do sinal de eco
          if (duration == 0) {
           Serial.println("Timeout durante a leitura do sinal de eco. Verifique a conexão do sensor ultrassônico.");
           delay(2000); // Aguarda 2 segundos antes de tentar novamente
            return;
          }

          // Calcula a distância com base na duração do pulso de eco
          distance = (duration / 2.0) / 29.1;

          //-----------------------------------------------//

          // Verifica se o sensor MPU6050 está funcionando corretamente
          if (!checkMPU6050()) {
          delay(2000); // Aguarda 2 segundos antes de tentar novamente
          return;
          }

          // Detecta a queda com base na aceleração no eixo X
          int fallValueX = detectFall();

          // Se a queda for detectada, envia uma mensagem SMS
          if (fallValueX > FALL_THRESHOLD_X) {
      
          Serial.println("Queda detectada! Enviando SMS!");
          gsmSerial.print("AT+CMGS=\"");
          gsmSerial.print("+5512992580220");
          gsmSerial.println("\"");
          delay(1000);
          gsmSerial.print("Queda detectada!");
          delay(100);
          gsmSerial.write(26); // Envio do caractere de controle (Ctrl-Z)
          delay(5000);
          Serial.println("Mensagem enviada com sucesso!");
          delay(1000);
          lastPresenceTime = currentMillis; // Atualiza o tempo da última detecção de presença
          }

          if (distance > THRESHOLD_DISTANCE) {
            Serial.println("Presença não detectada. Sistema de alertas suspenso.");
          }
        }
      } 
    }
  }
}

the second code:

#include <SoftwareSerial.h>
#include <EEPROM.h>

#define BT_Rx 0
#define BT_Tx 1

SoftwareSerial BTSerial(BT_Rx, BT_Tx);
String BlSent;
String NumeroSalvo;
String SMSmessage;

void CallNumb() {
  NumeroSalvo = "";
  BlSent = "";
  while (BTSerial.available()) {
    char c = BTSerial.read();
    BlSent += c;
    delay (5);
  }
  NumeroSalvo = BlSent;
  writeStringToEEPROM(0, NumeroSalvo);
}

void SMSm() {
  SMSmessage = "";
  BlSent = "";
  while (BTSerial.available()) {
    char s = BTSerial.read();
    BlSent += s;
    delay (5);
  }
  SMSmessage = BlSent;
  writeStringToEEPROM(100, SMSmessage);
}


void writeStringToEEPROM(int startAddress, const String &data) {
  for (int i = 0; i < data.length(); i++) { //declara variável; o loop continuará enquanto essa condição for verdadeira; (nesse caso) a cada término do loop i aumentará em 1
    EEPROM.write(startAddress + i, data[i]);
  }
  EEPROM.write(startAddress + data.length(), '\0'); // Adiciona o caractere nulo no final para indicar o término da string
}

String readStringFromEEPROM(int startAddress) {
  String result = "";
  char character = EEPROM.read(startAddress);
  int i = 0;
  while (character != '\0') {
    result += character;
    i++;
    character = EEPROM.read(startAddress + i);
  }
  return result;
}

void setup() {
  Serial.begin(9600);
  BTSerial.begin(9600);
  if (readStringFromEEPROM(100) == "") {
    writeStringToEEPROM(100, "Sofri um acidente! Preciso de ajuda imediata!");
  }
  if (readStringFromEEPROM(0) == ""){
    writeStringToEEPROM(0, "Pendente.");
  }
}

void loop() {

  if (BTSerial.available()) {
    if (BTSerial.read() != '+') {
      SMSm();
    }
    else {
      CallNumb();
    }
  } 

  if (readStringFromEEPROM(0).length() > 0 || readStringFromEEPROM(100).length() > 0) {
    Serial.println("Número de telefone salvo: " + readStringFromEEPROM(0));
    Serial.println("Recado salvo como: " + readStringFromEEPROM(100));
    delay(5000);
  } else {
    Serial.println("ERRO DESCONHECIDO");
  }
}