【问题标题】:Arduino: How store values in a char array in one line then clear/empty a char array?Arduino:如何在一行中将值存储在 char 数组中,然后清除/清空 char 数组?
【发布时间】:2012-06-08 20:02:52
【问题描述】:

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

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

【问题讨论】:

  • cmdArr[10] = "phc\0" 可能有效。另外,cmdArr 可以和&amp;(cmdArr[0]) 一样使用;两者都是 char* 类型,它与 C 中的“真实”字符串一样接近。处理字符串的操作,如 strcmp(),将把 char* 作为代表“字符串”变量的输入。

标签: arrays serial-port char arduino


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    相关资源
    最近更新 更多