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");
}
}