Hi All,
Let me explain first what is the problem with my coding. Actually, i try to make a project to detect heart rate,spo2 and temperature using the arduino nano. The sensor i use for heart rate and spo2 is MAX30100 and for the temperature sensor i use LM35. I done compare all this coding and is work properly. The problem is when i try to combine the oled sendor with all the main sensor(Max30100 and LM35) the data for heart rate and spo2 cant detect and only show the 0 value on the oled screen. There is no error for my coding but when i put the coding for display.display(); the max sensor cant detect.
Below is the coding:
#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(4);
#define REPORTING_PERIOD_MS 5000
PulseOximeter pox;
int temppin = A1; //<---------This is the PIN the LM53 (Temperature Sensor)
float temp = 0;
int Buzz = A2; //<---------This is the PIN for (HYDZ BUZZER)
uint32_t tsLastReport = 0;
void onBeatDetected()
{
Serial.println("Beat!");
}
void setup()
{
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
Serial.begin(115200);
Serial.print("Initializing pulse oximeter..");
pinMode(Buzz, OUTPUT);
digitalWrite (Buzz, HIGH); //(No sound at starting)
if (!pox.begin())
{
Serial.println("FAILED");
for (; ; );
}
else
{
Serial.println("SUCCESS");
}
// The default current for the IR LED is 50mA and it could be changed
// by uncommenting the following line. Check MAX30100_Registers.h for all the
// available options.
// pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);
// Register a callback for the beat detection
pox.setOnBeatDetectedCallback(onBeatDetected);
}
void loop()
{
temp = analogRead(temppin);
temp = temp * 0.48828125;
delay(10);
display.clearDisplay();
// Make sure to call update as fast as possible
pox.update();
// Asynchronously dump heart rate and oxidation levels to the serial
// For both, a value of 0 means "invalid"
if (millis() - tsLastReport > REPORTING_PERIOD_MS)
{
Serial.print("Heart rate:");
Serial.print(pox.getHeartRate());
Serial.print("bpm / SpO2:");
Serial.print(pox.getSpO2());
Serial.println("%");
Serial.print("TEMPERATURE = ");
Serial.print(temp);
Serial.print("*C");
Serial.println();
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.print("Heart rate:");
display.setTextColor(WHITE);
display.setCursor(87, 0);
display.print(pox.getHeartRate());
//display.print(millis()/1000);
display.setTextColor(WHITE);
display.setCursor(0, 12);
display.print("Bpm / SpO2:");
display.setTextColor(WHITE);
display.setCursor(87, 12);
display.print(pox.getSpO2());
display.setTextColor(WHITE);
display.setCursor(105, 12);
display.println("%");
display.setTextColor(WHITE);
display.setCursor(0, 24);
display.print("TEMPERATURE:");
display.setTextColor(WHITE);
display.setCursor(87, 24);
display.print(temp);
display.setTextColor(WHITE);
display.setCursor(117, 24);
display.print("C");
display.println();
display.display();
tsLastReport = millis();
if ( temp > 37 || ((pox.getSpO2() < 95) && !((pox.getSpO2() < 25))) || (pox.getHeartRate() > 100) || ((pox.getHeartRate() < 60) && !((pox.getHeartRate() < 39))) )
{ digitalWrite(Buzz, LOW);//bunyi
}
else
{ digitalWrite (Buzz, HIGH);//tak bunyi
}
tsLastReport = millis();
}
}