当MAX30100库的pox.update在Arduino循环中时无法连接

问题描述

社区的朋友们。我花了大量时间尝试解决此问题,希望您能为我提供帮助。 我正在使用https://github.com/oxullo/Arduino-MAX30100链接中的库来实现我的项目。 arduino代码执行得很好,但是当我尝试从连接到HC-05的串行端口接收数据时,如果pox.update()存在于循环中,则无法连接数据,则接收到的数据是喜欢:

R
o
b
e
r
t
o
 
A
n
d
r
e
s

因此,我需要对其进行分类以在128x64分辨率的显示器中显示它。此外,if (incomingByte == 'T')条件似乎未执行,因为它的显示不显示getStringfromProgMem(3)字符。循环代码为:

  void loop() {
  if (Serial.available() > 0) {
    incomingByte = Serial.read();
    if (incomingByte == 'T') {
      palabra = getStringfromProgMem(3);
      c = 0;
    } else {
      palabra.concat(incomingByte); 
    }
  }
  pox.update();
  display.cleardisplay();
  estado = digitalRead(STATE);
  estado ? (enlace()) : (noenlace());
  unsigned long tiempoActual = millis();
  if (tiempoActual - tiempoAnterior >= intervaloEvento) {
    rate = pox.getHeartRate();
    spo = pox.getSpO2();
    if (rate && palabra != getStringfromProgMem(3)) {
      c++;
    }
    if (c == 60) {
      c = 0;
    }
    /*Serial.print(rate);
    Serial.print(',');
    Serial.print(spo);
    Serial.print(',');
    Serial.println(c);*/
    tiempoAnterior = tiempoActual;
  }
  mostrar(rate,15,35);
  mostrar(spo,105,35);
  mostrar(getStringfromProgMem(0),10,52);
  mostrar(getStringfromProgMem(1),100,52);

  /*outputValue = (VERF * analogRead(ANALOG)) / 1024;
    smoothedVal = smoothedVal + ((outputValue - smoothedVal) / SAMPLES);
    comparacion(smoothedVal);*/
  //
  display.display();
}

代码仅在oled显示屏中显示一个字母,而忽略其他字母。我也在使用此库:

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "MAX30100_pulseOximeter.h"
#include <avr/pgmspace.h>

然后将变量“ incomingByte”和“ palabra”声明为全局变量

char incomingByte;
String palabra="";

没有{pox.update()“方法代码palabra.concat(incomingByte)执行得很好。我在做什么错了?

解决方法

我认为我已经解决了。该问题是由于我的Arduino的内存泄漏而产生的。当我尝试连接字符串“ palabra”时,由于内存泄漏,Arduino根本没有这么做。如果您中的任何人在处理字符串时遇到麻烦,而Arduino根本没有将您的字符串连接起来,我建议您访问此网站:

https://www.best-microcontroller-projects.com/arduino-string.html

现在我无法解决如何处理c字符串的问题,但这是时间的问题。

你们每个人都有一个如何清洁static char palabra[15],*pSdata = palabra;的想法吗?

当我使用字符串时,只是写palabra="";。但是现在,我不知道该怎么做。我希望你能帮助我。

问候。