I have recently purchased this Heart rate sensor and was trying to make it work. I used this MAX30100 library I found on Github. For some reason when I use any of the given examples, they seem to work well when I use a Mega2560 I have but not on the Uno or Nano. Does this have to do with the processor? I don't think so because the README on Github mentions that they tested it on an Uno. But if it is so, how could I change the code to make it work with the Uno and nano?
Example Code I used:
// This example can be used to test connectivity and operation of the sensor
// check the README file on the repo's root for a troubleshooting guide in casem
// any of the tests running fail
#include <Wire.h>
#include "MAX30100.h"
MAX30100 sensor;
void setup()
{
Serial.begin(9600);
Serial.print("Initializing MAX30100..");
if (!sensor.begin()) {
Serial.print("FAILED: ");
uint8_t partId = sensor.getPartId();
if (partId == 0xff) {
Serial.println("I2C error");
} else {
Serial.print("wrong part ID 0x");
Serial.print(partId, HEX);
Serial.print(" (expected: 0x");
Serial.println(EXPECTED_PART_ID, HEX);
}
// Stop here
for(;;);
} else {
Serial.println("Success");
}
Serial.print("Enabling HR/SPO2 mode..");
sensor.setMode(MAX30100_MODE_SPO2_HR);
Serial.println("done.");
Serial.print("Configuring LEDs biases to 50mA..");
sensor.setLedsCurrent(MAX30100_LED_CURR_50MA, MAX30100_LED_CURR_50MA);
Serial.println("done.");
delay(1000);
Serial.print("Lowering the current to 7.6mA..");
sensor.setLedsCurrent(MAX30100_LED_CURR_7_6MA, MAX30100_LED_CURR_7_6MA);
Serial.println("done.");
delay(1000);
Serial.print("Shutting down..");
sensor.shutdown();
Serial.println("done.");
delay(1000);
Serial.print("Resuming normal operation..");
sensor.resume();
delay(500);
Serial.println("done.");
uint32_t tsTempSampStart = millis();
Serial.print("Sampling die temperature..");
sensor.startTemperatureSampling();
while(!sensor.isTemperatureReady()) {
if (millis() - tsTempSampStart > 1000) {
Serial.println("ERROR: timeout");
// Stop here
for(;;);
}
}
float temperature = sensor.retrieveTemperature();
Serial.print("done, temp=");
Serial.print(temperature);
Serial.println("C");
if (temperature < 5) {
Serial.println("WARNING: Temperature probe reported an odd value");
} else {
Serial.println("All test pass.");
}
Serial.println();
Serial.println("Press any key to go into sampling loop mode");
while (!Serial.available());
sensor.resetFifo();
}
void loop()
{
uint16_t ir, red;
sensor.update();
while (sensor.getRawValues(&ir, &red)) {
Serial.print("IR=");
Serial.print(ir);
Serial.print(" RED=");
Serial.println(red);
}
}
-
What code are you using? Please show us. Also: Have you connected it correctly? As I remember the I2C hardware is on different pins for Uno/Nano and Megachrisl– chrisl2019年11月12日 08:10:05 +00:00Commented Nov 12, 2019 at 8:10
-
Also: What does not work well on Uno/Nano? What error do you get? Have you checked for the result of the tester example of the library?chrisl– chrisl2019年11月12日 08:20:59 +00:00Commented Nov 12, 2019 at 8:20
-
I have added the example I was using in the question. For the connections, I simply connected Vin to 3.3V, SDA to SDA, SCL to SCL and GND to GND.Prateek Dhanuka– Prateek Dhanuka2019年11月12日 08:56:04 +00:00Commented Nov 12, 2019 at 8:56
-
The main difference is that Arduino mega has pull up resistors on SCL/SDA lines.KIIV– KIIV2019年11月12日 09:11:21 +00:00Commented Nov 12, 2019 at 9:11
-
Please test with the tester example of the library. It might show, what problem we have here exactly. Have you tried adding pullup resistors to the lines as mentioned in the troubleshooting section of the libraries readme?chrisl– chrisl2019年11月12日 10:22:40 +00:00Commented Nov 12, 2019 at 10:22
1 Answer 1
I added pull-up resistors to the board and it started working. Turns out that the boards weren't well designed and the I2C lines were pulled up to 1.8V instead of Vin. By removing the pull-ups and adding pull-ups to Vin, the circuit started functioning. The circuit worked with Mega because it has in-built Pull-up Resistors.
-
And this can be done because those pins can be pulled up to 6V (absolute max).KIIV– KIIV2019年11月12日 11:26:37 +00:00Commented Nov 12, 2019 at 11:26
Explore related questions
See similar questions with these tags.