在Arduino中读取多个字符串

时间:2014-07-20 09:27:23

标签: c serial-port arduino

我基本上是尝试通过串口读取字符串。我使用了" Serial.readstringUntil"读取字符串然后与某些数据进行比较的语法。我成功地做到了。现在在同一个程序中,我想再次读取另一个字符串,然后将其与其他一些数据进行比较。但它失败了,因为在先前加载的字符串之间进行了比较。可能是什么问题。不是亲!抱歉。 这是代码。

int x;
String str;
String data="on";
String data2="off";
void calfunc();
void setup()
{
  Serial.begin(9600);
  pinMode(5, OUTPUT);
  pinMode(13, OUTPUT);

  Serial.println("Enter");


}
void loop() 
{
  if(Serial.available() > 0)
  {
    str = Serial.readStringUntil(' ');
    //x = Serial.parseInt();
    //Serial.println(str);
    if(str.equals (data))
    {
      Serial.println("Access Granted. ");
      calfunc();
    }
    else if(str.equals(data2))
    {
      digitalWrite(5, HIGH);
      digitalWrite(13, HIGH);
      Serial.println("Access Denied");
    }
  }
  delay(100);
}

void calfunc(){
  digitalWrite(5, LOW);
  digitalWrite(13, LOW);


  Serial.println("For Temperature press 1");
  Serial.println("For Moisture press 2");
  delay(100);

  char a=Serial.read();
  if(a=='1')
  {
    Serial.println(analogRead(A0));
  }
  else if(a=='2')
  {
    Serial.println(analogRead(A1));
  }
  else
  {
    Serial.println("Wrong Choice");
    delay(500);
    return;
  }
  return;
}

1 个答案:

答案 0 :(得分:0)

您好我注意到您在loop()函数中使用了C“else if”语句,但是您还没有使用else语句

if(boolean_expression 1)
{
   /* Executes when the boolean expression 1 is true */
}
else if( boolean_expression 2)
{
   /* Executes when the boolean expression 2 is true */
}
else if( boolean_expression 3)
{
   /* Executes when the boolean expression 3 is true */
}
else 
{
   /* executes when the none of the above condition is true */
}

请你试试这个,我没有安装Arduino编译器

void loop() 
{
  if(Serial.available() > 0)
  {
    str = Serial.readStringUntil(' ');
    //x = Serial.parseInt();
    //Serial.println(str);
    if(str.equals (data))
    {
      Serial.println("Access Granted. ");
      calfunc();
    }

    if(str.equals(data2))
    {
      digitalWrite(5, HIGH);
      digitalWrite(13, HIGH);
      Serial.println("Access Denied");
    }
  }
  delay(100);
}