问题描述
社区的朋友们。我花了大量时间尝试解决此问题,希望您能为我提供帮助。 我正在使用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="";
。但是现在,我不知道该怎么做。我希望你能帮助我。
问候。