Arduino:如何在一行中的char数组中存储值然后清除/清空一个char数组?

时间:2012-06-04 18:46:22

标签: arrays serial-port char arduino

我正在尝试编写将命令文本存储在串行终端的{和}之间的代码。到目前为止,我有:

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()
{ 
}

1 个答案:

答案 0 :(得分:1)

cmdArr是一个连续的内存块。从某种意义上说,数据已经存储在那里作为“phc \ 0”。您应该能够使用cmdArr作为指针,以便能够将数据作为字符串打印而不是逐个访问字符(您也可以使用指针逐个访问字符)。 在您的解决方案中,我认为您不需要清除阵列。将索引设置为0就足够了,并确保在您编写所有字符时使用\ 0终止字符串(您已经在做什么)。 C中的字符串为零终止。如果要在循环中逐个处理内容,则需要在遇到零时退出循环。