checkForBeat function is not working
I don't understand what you mean.
I think you should reread the forum guidelines to see how to properly ask a question and some good information on making a good post.
You must formulate your questions clearly, and answer the questions of others in detail. You must always show the full code. This code should match what you are loading into the controller.
Without these conditions, the discussion has little meaning. No one will ask you hundreds of questions to get the whole picture out of you.
If English is not your native language, use google translate.
sensor data bpm and avg_bpm not updating shows zero continuously @lahowalker
// MAX30100 - Version: Latest
#include <MAX30100.h>
#include "thingProperties.h"
#include <Wire.h>
#include "MAX30105.h"
#include "heartRate.h"
MAX30105 particleSensor;
const byte RATE_SIZE = 4; //Increase this for more averaging. 4 is good.
byte rates[RATE_SIZE]; //Array of heart rates
byte rateSpot = 0;
long lastBeat = 0; //Time at which the last beat occurred
void setup() {
// Initialize serial and wait for port to open:
Serial.begin(9600);
// This delay gives the chance to wait for a Serial Monitor without blocking if none is found
delay(1500);
if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) //Use default I2C port, 400kHz speed
{
Serial.println("MAX30105 was not found. Please check wiring/power. ");
while (1);
}
Serial.println("Place your index finger on the sensor with steady pressure.");
particleSensor.setup(); //Configure sensor with default settings
particleSensor.setPulseAmplitudeRed(0x0A); //Turn Red LED to low to indicate sensor is running
particleSensor.setPulseAmplitudeGreen(0); //Turn off Green LED
// Defined in thingProperties.h
initProperties();
// Connect to Arduino IoT Cloud
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
/*
The following function allows you to obtain more information
related to the state of network and IoT Cloud connection and errors
the higher number the more granular information you’ll get.
The default is 0 (only errors).
Maximum is 4
*/
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
}
void loop() {
ArduinoCloud.update();
long irValue = particleSensor.getIR();
Serial.print( "irValue ");
Serial.print( irValue );
Serial.print( " checkForBeat(irValue) " );
Serial.print( checkForBeat(irValue) );
Serial.println();
if (checkForBeat(irValue) == true)
{
Serial.print( "We sensed a beat! " );
long delta = millis() - lastBeat;
lastBeat = millis();
float bpm = 60 / (delta / 1000.0);
if (bpm < 255 && bpm > 20)
{
rates[rateSpot++] = (byte)bpm; //Store this reading in the array
rateSpot %= RATE_SIZE; //Wrap variable
//Take average of readings
float avg_bpm = 0.0;
for (byte x = 0 ; x < RATE_SIZE ; x++)
avg_bpm += rates[x];
avg_bpm /= RATE_SIZE;
}
}
delay(1000);
Serial.print("IR=");
Serial.print(irValue);
Serial.print(", BPM=");
Serial.print(bpm);
Serial.print(", Avg BPM=");
Serial.print(avg_bpm);
if (irValue < 50000)
Serial.print(" No finger?");
Serial.println();
}
/*
Since Bpm is READ_WRITE variable, onBpmChange() is
executed every time a new value is received from IoT Cloud.
*/
void onBpmChange() {
// Add your code here to act upon Bpm change
}
/*
Since AvgBpm is READ_WRITE variable, onAvgBpmChange() is
executed every time a new value is received from IoT Cloud.
*/
void onAvgBpmChange() {
// Add your code here to act upon AvgBpm change
}
o/p >
irValue 82237 checkForBeat(irValue) 0
IR=82237, BPM=0.00, Avg BPM=0.00
because
is false
Your sensor doesn't detects heartbeats. You were told about this 2 weeks ago.
i know that but how can i resolve this
The library
"MAX30105.h"
has some example sketches. Did you try it? Are examples works?
the example code is working properly which is
/*
Optical Heart Rate Detection (PBA Algorithm) using the MAX30105 Breakout
By: Nathan Seidle @ SparkFun Electronics
Date: October 2nd, 2016
https://github.com/sparkfun/MAX30105_Breakout
This is a demo to show the reading of heart rate or beats per minute (BPM) using
a Penpheral Beat Amplitude (PBA) algorithm.
It is best to attach the sensor to your finger using a rubber band or other tightening
device. Humans are generally bad at applying constant pressure to a thing. When you
press your finger against the sensor it varies enough to cause the blood in your
finger to flow differently which causes the sensor readings to go wonky.
Hardware Connections (Breakoutboard to Arduino):
-5V = 5V (3.3V is allowed)
-GND = GND
-SDA = A4 (or SDA)
-SCL = A5 (or SCL)
-INT = Not connected
The MAX30105 Breakout can handle 5V or 3.3V I2C logic. We recommend powering the board with 5V
but it will also run at 3.3V.
*/
#include <Wire.h>
#include "MAX30105.h"
#include "heartRate.h"
MAX30105 particleSensor;
const byte RATE_SIZE = 4; //Increase this for more averaging. 4 is good.
byte rates[RATE_SIZE]; //Array of heart rates
byte rateSpot = 0;
long lastBeat = 0; //Time at which the last beat occurred
float beatsPerMinute;
int beatAvg;
void setup()
{
Serial.begin(115200);
Serial.println("Initializing...");
// Initialize sensor
if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) //Use default I2C port, 400kHz speed
{
Serial.println("MAX30105 was not found. Please check wiring/power. ");
while (1);
}
Serial.println("Place your index finger on the sensor with steady pressure.");
particleSensor.setup(); //Configure sensor with default settings
particleSensor.setPulseAmplitudeRed(0x0A); //Turn Red LED to low to indicate sensor is running
particleSensor.setPulseAmplitudeGreen(0); //Turn off Green LED
}
void loop()
{
long irValue = particleSensor.getIR();
if (checkForBeat(irValue) == true)
{
//We sensed a beat!
long delta = millis() - lastBeat;
lastBeat = millis();
beatsPerMinute = 60 / (delta / 1000.0);
if (beatsPerMinute < 255 && beatsPerMinute > 20)
{
rates[rateSpot++] = (byte)beatsPerMinute; //Store this reading in the array
rateSpot %= RATE_SIZE; //Wrap variable
//Take average of readings
beatAvg = 0;
for (byte x = 0 ; x < RATE_SIZE ; x++)
beatAvg += rates[x];
beatAvg /= RATE_SIZE;
}
}
Serial.print("IR=");
Serial.print(irValue);
Serial.print(", BPM=");
Serial.print(beatsPerMinute);
Serial.print(", Avg BPM=");
Serial.print(beatAvg);
if (irValue < 50000)
Serial.print(" No finger?");
Serial.println();
}
Your sensor does not detect hearbeats.
You can't.
What a complete waste of time.
Get a heartbeat sensor like this one.
OP wrote that the library example works with your sensor. So it seems to me that he should rework his code...
...but judging by the way he answers in the thread - there is little hope for this.
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.