I am using max30100 as heart rate sensor and mpu6050 as 3 axis accelerometer. Both sensors are working separately but as i merged the code for both and tried to save data in firebase, MPU6050 was working properly wheres MAX30100 was successfully initialised but giving output as 0 everytime.
Please help me in this issue.
#include <math.h>
#include <WiFi.h>
#include <Firebase_ESP_Client.h>
#include "addons/TokenHelper.h" //Provide the token generation process info.
#include "addons/RTDBHelper.h" //Provide the RTDB payload printing info and other helper functions.
#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#define SDA_2 33
#define SCL_2 32
#define POX_REPORTING_PERIOD_MS 1000
#define WIFI_SSID "iPhone 13 Pro"
#define WIFI_PASSWORD "password"
#define API_KEY "AIzaSyAlYbgA4MNsmk2qWLS1t3xLeVYA12gUH5YDS" // Insert Firebase project API Key
#define DATABASE_URL "https://sleep-tracker-cDff8f-default-rtdb.firebaseio.com/" // Insert RTDB URLefine the RTDB URL */
#define USER_EMAIL "email@gmail.com"
#define USER_PASSWORD "email@2019"
FirebaseData FirebaseData; //Firebase data object
FirebaseAuth auth; //Firebase authentication object
FirebaseConfig config; //Firebase configuration object
FirebaseJson json;
TaskHandle_t PostToFirebase;
bool signupOK = true;
// Start Function Declaration
void SendReadingsToFirebase();
void InitializeWifi();
void SignUpToFirebase();
void InitializePOX();
// End Function Declaration
PulseOximeter pox;
TaskHandle_t GetReadings;
uint8_t _spo2;
uint8_t _heartRate;
uint32_t poxLastReport = 0;
uint32_t prevMillis = 0;
Adafruit_MPU6050 mpu;
//TaskHandle_t GetAReadings;
void setup() {
Serial.begin(115200); //Begin serial communication
Wire.begin();
Wire1.begin(SDA_2, SCL_2);
InitializeWifi();
SignUpToFirebase();
InitializeSensors();
xTaskCreatePinnedToCore(SensorReadings, "GetReadings", 2000, NULL, 1, &GetReadings, 0);
//xTaskCreatePinnedToCore(ASensorReadings, "GetAReadings", 1724, NULL, 0, &GetAReadings, 0);
xTaskCreatePinnedToCore(SendReadingsToFirebase, "PostToFirebase", 6268, NULL, 0, &PostToFirebase, 1);
}
//void ASensorReadings(void * parameter)
//{
//for(;;)
//{
//sensors_event_t a, g, temp;
//mpu.getEvent(&a, &g, &temp);
//Serial.print("Acceleration X: ");
//Serial.print(a.acceleration.x);
//Serial.print(", Y: ");
//Serial.print(a.acceleration.y);
//Serial.print(", Z: ");
//Serial.print(a.acceleration.z);
//Serial.println(" m/s^2");
//Serial.print("Rotation X: ");
//Serial.print(g.gyro.x);
//Serial.print(", Y: ");
//Serial.print(g.gyro.y);
//Serial.print(", Z: ");
//Serial.print(g.gyro.z);
//Serial.println(" rad/s");
//Serial.print("Temperature: ");
//Serial.print(temp.temperature);
//Serial.println(" degC");
//Serial.println("");
//delay(10000);
//}
//}
void SensorReadings(void * parameter)
{
for(;;)
{
// Read from the sensor
pox.update();
if (millis() - poxLastReport > POX_REPORTING_PERIOD_MS) {
_heartRate = round(pox.getHeartRate());
_spo2 = round(pox.getSpO2());
Serial.print("Heart rate:");
Serial.print(_heartRate);
Serial.print("bpm / SpO2:");
Serial.print(_spo2);
Serial.println("%");
//mpu.reset();
delay(5000);
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
Serial.print("Acceleration X: ");
Serial.print(a.acceleration.x);
poxLastReport = millis();
}
// Memory Sizing
//if (millis() - prevMillis > 6000)
//{
//unsigned long remainingStack = uxTaskGetStackHighWaterMark(NULL);
//Serial.print("Free stack: ");
//Serial.print(remainingStack);
//prevMillis = millis();
//}
// End Memory Sizing
}
}
void SendReadingsToFirebase(void * parameter)
{
// Serial.printf("working");
for(;;)
{
if (Firebase.ready() && signupOK){
Serial.printf("", Firebase.RTDB.setInt(&FirebaseData, F("/test/BP"), _heartRate) ? "ok" : FirebaseData.errorReason().c_str());
Serial.printf("", Firebase.RTDB.getInt(&FirebaseData, F("/test/BP")) ? String(FirebaseData.to<int>()).c_str() : FirebaseData.errorReason().c_str());
Serial.printf("", Firebase.RTDB.setInt(&FirebaseData, F("/test/SpO2"), _spo2) ? "ok" : FirebaseData.errorReason().c_str());
Serial.printf("", Firebase.RTDB.getInt(&FirebaseData, F("/test/SpO2")) ? String(FirebaseData.to<int>()).c_str() : FirebaseData.errorReason().c_str());
}
}
}
void InitializeWifi()
{
// Wifi Initialize ...
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED){
Serial.print(".");
delay(300);
}
Serial.println();
Serial.print("Connected with IP: ");
Serial.println(WiFi.localIP());
Serial.println();
}
void SignUpToFirebase()
{
/* Assign the api key (required) */
config.api_key = API_KEY;
/* Assign the RTDB URL (required) */
config.database_url = DATABASE_URL;
auth.user.email = USER_EMAIL;
auth.user.password = USER_PASSWORD;
/* Sign up */
/* Assign the callback function for the long running token generation task */
config.token_status_callback = tokenStatusCallback; //see addons/TokenHelper.h
Firebase.begin(&config, &auth);
Firebase.reconnectWiFi(true);
}
void InitializeSensors()
{
Serial.print("Initializing pulse oximeter..");
// Initialize sensor
if (!pox.begin()) {
Serial.println("FAILED");
for(;;);
} else {
Serial.println("SUCCESS");
}
// Configure sensor to use 7.6mA for LED drive
//pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);
//Serial.println("Adafruit MPU6050 test!");
// Try to initialize!
if (!mpu.begin(0x68,&Wire1)) {
Serial.println("Failed to find MPU6050 chip");
while (1) {
delay(10);
}
}
Serial.println("MPU6050 Found!");
mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
Serial.print("Accelerometer range set to: ");
switch (mpu.getAccelerometerRange()) {
case MPU6050_RANGE_2_G:
//Serial.println("+-2G");
break;
case MPU6050_RANGE_4_G:
//Serial.println("+-4G");
break;
case MPU6050_RANGE_8_G:
//Serial.println("+-8G");
break;
case MPU6050_RANGE_16_G:
//Serial.println("+-16G");
break;
}
mpu.setGyroRange(MPU6050_RANGE_500_DEG);
Serial.print("Gyro range set to: ");
switch (mpu.getGyroRange()) {
case MPU6050_RANGE_250_DEG:
//Serial.println("+- 250 deg/s");
break;
case MPU6050_RANGE_500_DEG:
//Serial.println("+- 500 deg/s");
break;
case MPU6050_RANGE_1000_DEG:
//Serial.println("+- 1000 deg/s");
break;
case MPU6050_RANGE_2000_DEG:
//Serial.println("+- 2000 deg/s");
break;
}
mpu.setFilterBandwidth(MPU6050_BAND_5_HZ);
Serial.print("Filter bandwidth set to: ");
switch (mpu.getFilterBandwidth()) {
case MPU6050_BAND_260_HZ:
//Serial.println("260 Hz");
break;
case MPU6050_BAND_184_HZ:
//Serial.println("184 Hz");
break;
case MPU6050_BAND_94_HZ:
//Serial.println("94 Hz");
break;
case MPU6050_BAND_44_HZ:
//Serial.println("44 Hz");
break;
case MPU6050_BAND_21_HZ:
//Serial.println("21 Hz");
break;
case MPU6050_BAND_10_HZ:
//Serial.println("10 Hz");
break;
case MPU6050_BAND_5_HZ:
//Serial.println("5 Hz");
break;
}
}
void loop()
{
delay(1);
}
Your topic has been moved to a more suitable location on the forum. Introductory Tutorials is for tutorials that e.g. you write, not for questions. Feel free to write a tutorial once you have solved your problem ![]()
Your problem has been seen here in the past. Try Google on the 3 major parts involved.
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.