Я не могу конкатенировать, когда pox.update() библиотеки MAX30100 находится в цикле 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

Поэтому мне нужно канкатенировать его, чтобы показать его на oled-дисплее 128x64. Более того, условие if (incomingByte == 'T') похоже не выполняется, так как на oled-дисплее не отображается символ 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="";

Код palabra.concat(incomingByte) хорошо выполняется без метода pox.update(). Что я делаю неправильно?


person Roberto    schedule 22.10.2020    source источник


Ответы (1)


Я думаю, что я решил это. Проблема возникла из-за утечки памяти моего Arduino. Когда я попытался конкатенировать палабра String, Arduino просто не сделала этого из-за утечки памяти. Если у кого-то из вас есть проблемы с обработкой строк, а Arduino просто не объединяет ваши строки, я предлагаю посетить этот сайт:

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

Теперь я не могу понять, как обращаться с c-струнами, но это вопрос времени.

Кто-нибудь из вас знает, как очистить static char palabra[15], *pSdata = palabra;?

Когда я использую строки, нужно просто написать palabra="";. Но теперь я понятия не имею, как это сделать. Я надеюсь, что вы можете мне помочь.

Привет.

person Roberto    schedule 23.10.2020