I am using two sensors max30100 and mlx90614 (also 16x2 i2c display) all are connected to the common SDA and SCL for communication. When i try max30100 it is working correctly but if i connect with other sensor it is showing as 0 value for both bpm and O2. (if i test max30100 separately then it is working fine) I have also attached the source code and libraries used.
#include<Wire.h>
#include<LiquidCrystal_I2C.h>
#include<Adafruit_MLX90614.h>
#include "MAX30100_PulseOximeter.h"
#define REPORTING_PERIOD_MS 1000
LiquidCrystal_I2C lcd(0x27, 16, 2);
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
PulseOximeter pox;
uint8_t bm280_address = 0x76;
uint8_t max30100_address = 0x57;
uint8_t irmlx90614_address = 0x5A;
float temperature;
uint8_t heart_rate;
uint8_t oxygen_level;
int i = 0;
#define T_R_LED 5
#define T_G_LED 4
#define T_B_LED 3
#define O_R_LED 10
#define O_G_LED 9
#define O_B_LED 8
#define BUZZER 13
void onBeatDetected()
{
Serial.println("Beat!");
}
void setup() {
Serial.begin(115200);
pinMode(T_R_LED, OUTPUT);
pinMode(T_G_LED, OUTPUT);
pinMode(T_B_LED, OUTPUT);
pinMode(O_R_LED, OUTPUT);
pinMode(O_G_LED, OUTPUT);
pinMode(O_B_LED, OUTPUT);
pinMode(BUZZER, OUTPUT);
Serial.println("Initalize Contactless - Temperature Sensor");
if (!mlx.begin()) {
Serial.println("Failed");
}
else {
Serial.println("Success");
}
Serial.println("Initalize Oximeter Sensor");
if (!pox.begin()) {
Serial.println("Failed");
}
else {
Serial.println("Success");
}
pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);
pox.setOnBeatDetectedCallback(onBeatDetected);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("System is Ready");
Serial.println("System is ready to read values");
digitalWrite(T_G_LED, HIGH);
digitalWrite(O_R_LED, HIGH);
}
void loop() {
delay(2000);
temperature = mlx.readObjectTempC();
if (temperature >= 31.0) {
Serial.print(temperature);
Serial.println(" C");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(temperature);
lcd.setCursor(0, 1);
lcd.print("Not Normal");
digitalWrite(BUZZER, HIGH);
delay(5000);
digitalWrite(BUZZER, LOW);
readOxiValues();
}
else
{
Serial.print(temperature);
Serial.print(" C");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(temperature);
lcd.setCursor(0, 1);
lcd.print("Normal");
}
}
void readOxiValues()
{
delay(5000);
Serial.println("Reading Oximeter Values");
digitalWrite(T_G_LED, LOW);
digitalWrite(T_R_LED, HIGH);
digitalWrite(O_R_LED, LOW);
digitalWrite(O_G_LED, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Keep Hand");
lcd.setCursor(0, 1);
lcd.print("for 15 Seconds");
digitalWrite(BUZZER, LOW);
while (i < 1500)
{
pox.update();
heart_rate = pox.getHeartRate();
oxygen_level = pox.getSpO2();
Serial.print("Heart Rate ");
Serial.print(pox.getHeartRate());
Serial.print(" bpm / SPO2 ");
Serial.print(pox.getSpO2());
Serial.print(" %");
i = i + 1;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(String("Heart Beat: ") + String(heart_rate));
lcd.setCursor(0, 1);
lcd.print(String("SPo2: ") + String(oxygen_level));
if (heart_rate > 60 and oxygen_level >= 95)
{
Serial.println("Person Allowed");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Allowed");
}
else
{
Serial.println("Person Not Allowed");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Not Allowed");
digitalWrite(BUZZER, HIGH);
delay(4000);
digitalWrite(BUZZER, LOW);
}
digitalWrite(T_G_LED, HIGH);
digitalWrite(T_R_LED, LOW);
digitalWrite(O_R_LED, HIGH);
digitalWrite(O_G_LED, LOW);
}
I also followed the steps given in the url but that also not working.
Kindly help me.
