我正在尝试编写将命令文本存储在串行终端的{和}之间的代码。到目前为止,我有:
byte index = 0; // Index into array; where to store the character
char cmdArr[10];
boolean startOfLine = false;
boolean endOfLine = false;
void setup()
{
Serial.begin(38400);
}
void serialEvent()
{
while (Serial.available())
{
char cmd = (char)Serial.read();
if (cmd == '{')
{
startOfLine = true;
}
if (cmd == '}')
{
endOfLine = true;
//cmdArr[index] = '\0'; //null terminate the C string; I'm not sure if this is needed
}
if (startOfLine && cmd != '{' && cmd != '}')
{
cmdArr[index++] = cmd;
}
if (startOfLine && endOfLine)
{
int i;
for (i = 0; i < 10; i++)
{
//Do something with the command
}
startOfLine = false;
endOfLine = false;
break;
}
}
}
void loop()
{
}
我能够遍历cmdArr以打印出数组值。例如,现在,命令就像这样存储:char cmdArr [10] = {'p','h','c','\ 0'};是否可以存储命令,如char cmdArr [10] = {“phc”};?另外,我如何清除/清空该命令以准备下一个命令?
似乎正在运作的新代码。我使用字符串,因为它似乎是最简单的方法:
String cmdData; //Store the complete command on one line to send to sensor board.
boolean startOfLine = false;
boolean endOfLine = false;
void setup()
{
Serial.begin(38400);
Serial3.begin(38400);
}
void serialEvent()
{
while (Serial.available())
{
char cmd = (char)Serial.read();
if (cmd == '{')
{
startOfLine = true;
}
if (cmd == '}')
{
endOfLine = true;
}
if (startOfLine && cmd != '{' && cmd != '}')
{
//Serial.print("Send command");
cmdData += cmd;
}
if (startOfLine && endOfLine)
{
startOfLine = false;
endOfLine = false;
cmdData += '\r';
Serial3.print(cmdData);
cmdData = "";
}
}
}
void serialEvent3()
{
char cmd3 = (char)Serial3.read();
Serial.print(cmd3);
}
void loop()
{
}
答案 0 :(得分:1)
cmdArr是一个连续的内存块。从某种意义上说,数据已经存储在那里作为“phc \ 0”。您应该能够使用cmdArr作为指针,以便能够将数据作为字符串打印而不是逐个访问字符(您也可以使用指针逐个访问字符)。 在您的解决方案中,我认为您不需要清除阵列。将索引设置为0就足够了,并确保在您编写所有字符时使用\ 0终止字符串(您已经在做什么)。 C中的字符串为零终止。如果要在循环中逐个处理内容,则需要在遇到零时退出循环。