@Koepel @Idahowalker THANKS FOR YOUR HELP TILL NOW!!!!
I HAVE DONE THE ABOVE TASK AND IT WORKS COMPLETELY FINE BUT NOW I'VE ADDED GSM MODULE AND IT WORKS FINE BUT THE PROBLEM IS AGAIN PULSE OXI SENSOR IS NOT WORKING.
NOW I'VE CONNECTED 2 I2C DEVICES - PULSE OXI AND ACCELEROMETER AND 2 UART DEVICES - GSM AND GPS. SO THE PROBLEM IS AGAIN PULSE OXI SENSOR IS NOT WORKING.
WILL YOU PLEASE HELP ME WITH THIS. THIS IS THE FINAL STEP FOR THE PROJECT
HERE IS THE PROGRAM -
#include <TinyGPS++.h>
#include "MAX30100_PulseOximeter.h"
#include <Blynk.h>
#include <HardwareSerial.h>
#include <WiFi.h>
#include <Wire.h>
#include <BlynkSimpleEsp32.h>
#define REPORTING_PERIOD_MS 1000
#define BLYNK_PRINT Serial
#define rxPin 4
#define txPin 2
HardwareSerial sim800(1);
const int MPU_addr=0x68;
int16_t accelX, accelY, accelZ, gyroX, gyroY, gyroZ;
float gForceX, gForceY, gForceZ,rotX, rotY, rotZ,Tmp;
uint32_t tsLastReport = 0;
PulseOximeter pox;
float BPM, SpO2;
float latitude , longitude;
String latitude_string , longitiude_string;
char auth[] = "VUjbOe139IPotsyC2Sjx-MQbB54al9s0";
WidgetMap myMap(V0);
WiFiClient client;
TinyGPSPlus gps;
HardwareSerial SerialGPS(2);
void onBeatDetected()
{
Serial.println("Beat Detected!");
}
void setup()
{
Serial.begin(115200);
Blynk.begin(auth, "TP-Link_380B", "installation*500");
Wire.begin();
Wire.beginTransmission(MPU_addr);
Wire.write(0x6B); // PWR_MGMT_1 register
Wire.write(0); // set to zero (wakes up the MPU-6050)
Wire.endTransmission(true);
SerialGPS.begin(9600, SERIAL_8N1, 16, 17);
sim800.begin(9600, SERIAL_8N1, rxPin, txPin);
Serial.println("SIM800L serial initialize");
sim800.print("AT+CMGF=1\r"); //SMS text mode
delay(1000);
pinMode(19, OUTPUT);
Serial.print("Initializing Pulse Oximeter..");
if (!pox.begin())
{
Serial.println("FAILED");
for(;;);
}
else
{
Serial.println("SUCCESS");
pox.setOnBeatDetectedCallback(onBeatDetected);
}
// The default current for the IR LED is 50mA and it could be changed by uncommenting the following line.
pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);
Blynk.virtualWrite(V0, "clr");
}
void loop()
{
Wire.beginTransmission(MPU_addr);
Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU_addr,14,true); // request a total of 14 registers
accelX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
accelY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
accelZ=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
Tmp=Wire.read()<<8|Wire.read(); // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
gyroX=Wire.read()<<8|Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
gyroY=Wire.read()<<8|Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
gyroZ=Wire.read()<<8|Wire.read();
gForceX = (accelX-2050) / 16384.0;
gForceY = (accelY-77) / 16384.0;
gForceZ = (accelZ-1947) / 16384.0;
rotX = (gyroX+270) / 131.0;
rotY = (gyroY-351) / 131.0;
rotZ = (gyroZ+136) / 131.0;
// calculating Amplitute vactor for 3 axis
float Raw_Amp = pow(pow(gForceX,2)+pow(gForceY,2)+pow(gForceZ,2),0.5);
int Amp = Raw_Amp * 10; // Mulitiplied by 10 bcz values are between 0 to 1
//Serial.println(Amp);
angleChange = pow(pow(rotX,2)+pow(rotY,2)+pow(rotZ,2),0.5);
if (SerialGPS.available() > 0)
{
if (gps.encode(SerialGPS.read()))
{
if (gps.location.isValid())
{
latitude = gps.location.lat();
latitude_string = String(latitude , 6);
longitude = gps.location.lng();
longitiude_string = String(longitude , 6);
}
}
}
pox.update();
BPM = pox.getHeartRate();
SpO2 = pox.getSpO2();
if (!sim800.available()){ //Displays on the serial monitor if there's a communication from the module
//Serial.write(sim800l.read());
Serial.println("SIM800L INITIALISATION FAILED!!!");
for(;;);
}
if (millis() - tsLastReport > REPORTING_PERIOD_MS)
{
Blynk.run();
Blynk.virtualWrite(V0, 1, latitude, longitude, "Location");
Blynk.virtualWrite(V3, BPM);
Blynk.virtualWrite(V4, SpO2);
Serial.println(Amp);
Serial.println(angleChange);
Serial.print("Heart rate:");
Serial.print(BPM);
Serial.print(" bpm / SpO2:");
Serial.print(SpO2);
Serial.println(" %");
Serial.print("Latitude = ");
Serial.println(latitude_string);
Serial.print("Longitude = ");
Serial.println(longitiude_string);
tsLastReport = millis();
}
}
void sendSMS()
{
Serial.println("Sending SMS..."); //Show this message on serial monitor
//sim800l.print("AT+CMGF=1\r"); //Set the module to SMS mode
delay(100);
sim800.print("AT+CMGS=\"+919182932597\"\r"); //Your phone number don't forget to include your country code, example +212123456789"
delay(500);
if (!sim800.print("SIM800l is working")){Serial.println("SIM800L INITIALISATION FAILED!!!");
for(;;);}
//This is the text to send to the phone number, don't make it too long or you have to modify the SoftwareSerial buffer
delay(500);
sim800.print((char)26);// (required according to the datasheet)
delay(500);
sim800.println();
Serial.println("Text Sent.");
delay(500);
}