Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何从Serial.read()中检索字符串值;_C_Arrays_String_Arduino_Arduino Ide - Fatal编程技术网

C 如何从Serial.read()中检索字符串值;

C 如何从Serial.read()中检索字符串值;,c,arrays,string,arduino,arduino-ide,C,Arrays,String,Arduino,Arduino Ide,我试图发送一条包含多个字符串值的SMS,然后Arduino板将以串行.read()的形式接收它;指挥部。例如,如果我想向董事会发送以下短信,“用户名电话号码电子邮件”。然后,代码将接收SMS并将其划分为不同的字符串值,然后我可以在代码中使用这些字符串值 到目前为止,我已经能够完成所有这些,我目前面临的问题是,我似乎可以以字符串值的形式接收文本消息,这意味着电路板不是以字符串的形式接收它,而是以char[]的形式接收它 结果,当我试图打印出值时,得到以下输出 > 1: U 2: 3: 1

我试图发送一条包含多个字符串值的SMS,然后Arduino板将以串行.read()的形式接收它;指挥部。例如,如果我想向董事会发送以下短信,“用户名电话号码电子邮件”。然后,代码将接收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]) : "";
}
void setup()
{ 
Serial.begin(9600);
}
void循环()
{
如果(Serial.available()>0)
{
字符串[100];
焦比特里德;
int availableBytes=Serial.available();

对于(int i=0;i调用
loop()
时,您的代码假设/要求串行端口上的所有数据都已可用。可能不是这样

从您发布的代码来看,似乎您必须重复调用
loop()
函数。这与每次读取时实际只有少量数据的可能性相结合,导致您显示的输出

是否有可用于确定SMS记录结束的终止字符(如新行)?是否可以添加一个?如果是,则可以使用从串行端口读取输入,直到看到终止符(或超时或缓冲区已满)。在
getValue()

查找中对其进行分析之前,您可能需要调用此函数几次以累积完整的SMS记录