【问题标题】:How to retrieve a String value from Serial.read();如何从 Serial.read() 中检索字符串值;
【发布时间】:2014-07-21 03:22:47
【问题描述】:

我正在尝试发送包含多个值作为字符串的短信,然后 Arduino 板将作为 Serial.read() 接收该短信;命令。例如,如果我将以下 SMS 发送到董事会,“用户名电话号码电子邮件”。然后代码将接收 SMS 并将其划分为不同的字符串值,然后我可以在代码中使用这些值。

到目前为止,我已经能够做到所有这些,我目前面临的问题是,我似乎可以将文本消息作为字符串值接收,这意味着董事会没有将其作为字符串接收,而是将其作为 char[] 接收。

结果,当我尝试打印该值时,我得到以下输出,

> 1: U
2: 
3: 
1: s
2: 
3: 
1: e
2: 
3: 
1: r
2: 
3: 
1: n
2: 
3: 
1: ame
2: PhoneNu
3: 
1: mber
2: Email
3: 

我想要的是得到这个输出,

1:UserName 
2:PhoneNumber 
3:Email

以下是我正在使用的代码:

void setup()
{ 
  Serial.begin(9600); 
}

void loop()
{
  if(Serial.available()>0)
  {
char string[100];
char byteRead;

int availableBytes = Serial.available();
for(int i=0; i<availableBytes; i++)
{
    string[i] = Serial.read();
    string[i+1] = '\0'; // Append a null
} 

String dj = string;
  //char inchar=Serial.read();
  String split= dj;
  String word1 = getValue(split, ' ', 0);
  Serial.println("1: "+word1);
  String word2 = getValue(split, ' ', 1);
  Serial.println("2: "+word2);
  String word3 = getValue(split, ' ', 2);
  Serial.println("3: "+word3);
  }
}
 String getValue(String data, char separator, int index)
{
  int found = 0;
  int strIndex[] = {0, -1};
  int maxIndex = data.length()-1;

  for(int i=0; i<=maxIndex && found<=index; i++){
    if(data.charAt(i)==separator || i==maxIndex){
        found++;
        strIndex[0] = strIndex[1]+1;
        strIndex[1] = (i == maxIndex) ? i+1 : i;
    }
  }

  return found>index ? data.substring(strIndex[0], strIndex[1]) : "";
}

我希望用户名进入字符串 1,电话号码进入字符串 2,电子邮件进入字符串 3。

谢谢!! :D

【问题讨论】:

标签: c arrays string arduino arduino-ide


【解决方案1】:

当您调用loop() 时,您的代码假定/要求所有数据都已在串行端口上可用。可能不是。

从您发布的代码看来,您必须重复调用 loop() 函数。再加上每次读取时实际上只有少量数据可用的可能性,就会产生您显示的输出。

是否有可用于确定 SMS 记录结尾的终止字符(例如换行符)?可以加一个吗?如果是这样,那么您可以使用readBytesUntil() 从串行端口读取输入,直到您看到终止符(或超时或缓冲区已满)。您可能需要调用几次以累积完整的 SMS 记录,然后再将其解析为 getValue()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    相关资源
    最近更新 更多