Hi! I'm trying to use Arduino IoT Cloud but have some problems with the serial monitor. I'm using an Arduino Uno R4 Wifi with a pulse heart rate (DAOKAI MAX30102). The sketch is ok and in the Arduino IDE also the serial monitor works in the right way, but when I open the serial monitor in the IoT Cloud, I see that, if there's nothing on the sensor it prints -1 (and it's perfect), but, when I try to use the sensor, it prints 0. I've tried to use an Integer Number variable and a Heart Rate variable, but there's always the same problem. Can anyone help me?
This is the script:
#include <MAX30105.h>
#include <heartRate.h>
#include <spo2_algorithm.h>
#include "thingProperties.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;
unsigned long int last_beat = 0;
void setup() {
// Initialize serial and wait for port to open:
Serial.begin(115200);
Serial.println("Initializing...");
// Initialize sensor
if (!particleSensor.begin(Wire,I2C_SPEED_FAST)) {
Serial.println("MAX30102 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();
// Your code here
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;
}
}
if(irValue >= 50000)
Serial.println(beatAvg);
if (irValue < 50000)
{
Serial.println(-1);
}
}
/*
Since BeatAvg is READ_WRITE variable, onBeatAvgChange() is
executed every time a new value is received from IoT Cloud.
*/
void onBeatAvgChange() {
// Add your code here to act upon BeatAvg change
}