断开连接时Arduino系列读取
Arduino Serial Read when disconnected
我正在开发赛车模拟器,我有问题。我有一个将数据发送到Arduino的C 程序。Arduino接收到它,解析字符串,其中一个必须显示在TFT中。我已经注意到,当C 程序完成时,Arduino仅在TFT中打印值,因此仅在Serial.read()
函数返回false时才打印值。如何获取实时数据,打印实时值?
在这里,我给您带来Arduino代码:
#include <SoftwareSerial.h>
#include <Adafruit_GFX.h>
#include <UTFTGLUE.h>
UTFTGLUE myGLCD(0x9488, A5, A4, A3, A2, A0);
char lastgear = '0';
extern uint8_t Bigfont[];
String sParams[3];
int iCount, i;
String sLine;
void setup() {
randomSeed(analogRead(5)); //.kbv Due does not like A0
pinMode(A0, OUTPUT); //.kbv mcufriend have RD on A0
digitalWrite(A0, HIGH);
// Set up the LCD
myGLCD.InitLCD();
myGLCD.clrScr();
myGLCD.setFont(BigFont);
myGLCD.setTextSize(5);
myGLCD.print(" Victor Casado", LEFT, 15);
delay(500);
myGLCD.clrScr();
myGLCD.setTextSize(24);
Serial.begin(9600);
}
void loop() {
while (Serial.available() > 0) {
// reading the line from file
sLine = Serial.readString();
// parse only if exists
if (sLine.length() > 0) {
// parse the line
iCount = StringSplit(sLine, ',', sParams, 3);
// print the extracted paramters
for (i = 0; i < iCount; i++) {
Serial.print(sParams[i]);
myGLCD.setColor(255, 255, 255);
myGLCD.print(sParams[0], 200, 75);
}
Serial.println("");
}
}
}
int StringSplit(String sInput, char cDelim, String sParams[], int iMaxParams) {
int iParamCount = 0;
int iPosDelim, iPosStart = 0;
do {
// Searching the delimiter using indexOf()
iPosDelim = sInput.indexOf(cDelim, iPosStart);
if (iPosDelim > (iPosStart + 1)) {
// Adding a new parameter using substring()
sParams[iParamCount] = sInput.substring(iPosStart, iPosDelim - 1);
iParamCount++;
// Checking the number of parameters
if (iParamCount >= iMaxParams) {
return (iParamCount);
}
iPosStart = iPosDelim + 1;
}
} while (iPosDelim >= 0);
if (iParamCount < iMaxParams) {
// Adding the last parameter as the end of the line
sParams[iParamCount] = sInput.substring(iPosStart);
iParamCount++;
}
return (iParamCount);
}
我试图更改此部分:
while (Serial.available() > 0) {
// reading the line from file
sLine = Serial.readString();
// parse only if exists
if (sLine.length() > 0) {
// parse the line
iCount = StringSplit(sLine, ',', sParams, 3);
// print the extracted paramters
for (i = 0; i < iCount; i++) {
Serial.print(sParams[i]);
myGLCD.setColor(255, 255, 255);
myGLCD.print(sParams[0], 200, 75);
}
Serial.println("");
}
}
对此,它的工作原理相同:
while (Serial.available() > 0) {
// reading the line from file
sLine = Serial.readString();
// parse only if exists
if (sLine.length() > 0) {
// parse the line
iCount = StringSplit(sLine, ',', sParams, 3);
// print the extracted paramters
for (i = 0; i < iCount; i++) {
Serial.print(sParams[i]);
}
Serial.println("");
}
myGLCD.setColor(255, 255, 255);
myGLCD.print(sParams[0], 200, 75);
}
和此:
while (Serial.available() > 0) {
// reading the line from file
sLine = Serial.readString();
// parse only if exists
if (sLine.length() > 0) {
// parse the line
iCount = StringSplit(sLine, ',', sParams, 3);
// print the extracted paramters
for (i = 0; i < iCount; i++) {
Serial.print(sParams[i]);
}
Serial.println("");
myGLCD.setColor(255, 255, 255);
myGLCD.print(sParams[0], 200, 75);
}
}
希望你能帮助我!
谢谢!
使用Serial.readString()
时,它会尝试读取直到超时为止。串行的默认超时为1秒。这意味着在读取最后一个角色后,它等待1秒。在完成之前。您可以通过在Serial.begin()
之后使用Serial.setTimeout(10);
或按照@sami建议的方式手动设置设置中的超时值,您可以使用Serial.readStringUntil("xxx")
,其中'xxx'是您发送FX的字符串的末端。' n'或' r n'如果您用线折终止字符串。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 使用新行和不使用新行读取文件
- 读取文件并输入到矢量中
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 无法找到/读取配置文件.conf-FileIOException
- 如何使用Luacneneneba API正确读取字符串和表参数
- C++将文本文件中的数据读取到结构数组中
- 正在将csv文件读取为双精度矢量
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 为什么在读取文件大小时文件IO速度会发生变化
- 正在读取二进制文件(is_open)
- 如何在c++中从文本文件中逐行读取整数
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- 独立读取-修改-写入顺序
- 从文本文件中读取时钟时间和事件时间并进行处理
- 如何从文本文件中读取值和数组
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- 断开连接时Arduino系列读取