Valori errati dal serial monitor

Ciao! Sto provando a usare un cardiofrequenzimetro (DAOKAI MAX30102) con un Arduino Uno R4 Wifi tramite l'IoT Cloud. Avevo provato lo script prima sull'IDE un paio di giorni fa e sembrava essere tutto ok, ma quando l'ho poi portato sull'IoT Cloud, ho notato dal serial monitor che, quando non c'è nulla sul sensore, viene stampato -1 (che è corretto), ma quando metto il dito sul sensore, viene stampato 0 oppure un numero a caso e sempre lo stesso (quindi una volta stampa sempre 7, una volta sempre 22 e così via). Pensavo potesse essere un problema del Cloud o della variabile che avevo scelto (non essendo ancora pratica con il Cloud). Ieri tuttavia, riprovando lo script sull'IDE, ho visto che anche lì ha cominciato a dare quel problema. A quel punto ho cambiato i cavi, il sensore, ma senza risultati. Non riesco davvero a capire quale possa essere il motivo. Vi giro qui lo script presente sull'IoT Cloud, dove sto usando la variabile int beatAvg.

#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() {
  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
}

Pare ci sia un problema molto simile in un thread aperto nella sezione inglese.
Puoi provare a seguire anche quello.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.