收到Arduino中可用变量的字符串

时间:2016-01-30 20:45:10

标签: c++ arduino arduino-uno arduino-ide

我正在尝试使用蓝牙从移动应用程序发送到Arduino的数据。根据所需功能,将收到2个字符串。

第一个功能:当收到字符串“ledon”或“ledoff”时,开启或关闭LED。

第二个功能:从应用程序中我获取用户输入的数据为2个框,一个是文本框,另一个是密码框,这是由Arduino接收为一个字符串,逗号为分隔符,因此字符串可以是分成它的组成部分,在这种情况下是“ssid名称”和“网络密钥”。这些细节我将打算写入板载SD卡,以便wifi模块能够登录网络,ssid和网络密钥也是相关的。

到目前为止,我可以让led灯按原样进行操作,我也可以读取字符串,用分隔符分隔并打印到串行监视器。但是,当我尝试组合这两个代码时,虽然正确的命令被打印到串行监视器中,但led功能无法打开或关闭LED灯。我已经研究过如何解决这个问题,尝试将每个需求作为一个独立的函数并在循环部分调用它们,它们分别工作但是当再一次调用时,led无法启动。

这是我目前正在使用的代码:

const int ledPin = 11;
String readString;


void setup() {
  Serial.begin(9600);
  pinMode (ledPin, OUTPUT);
}

void loop() {   
  while (Serial.available()) {
    delay(3);
    char c = Serial.read();
    readString  += c;
  }

//turns led on or off

   if (readString.length() >0) {

      Serial.println(readString); 

   if (readString == "ledon")
    {
      digitalWrite (ledPin, HIGH);
    }
    if (readString == "ledoff")
    {
      digitalWrite (ledPin, LOW);
    }
    readString=""; 


//seperates the string into 2 lines using the delimiter ","

    String first  = Serial.readStringUntil(',');
    Serial.read(); //next character is comma, so skip it using this
    String second = Serial.readStringUntil(',');
    Serial.read();

    Serial.println(first);
    Serial.println(second); 
    readString="";
   }

    }

如果我注释掉代码的字符串部分,led会打开和关闭,如果我尝试运行代码,代码会打印出你期望的所有内容,但是led不会出现。

我对Arduino,c和c ++都很陌生,我似乎无法弄清楚这一点,所以任何帮助都会很棒。

我用来控制它的应用程序正在Mit的App Inventor 2中构建

1 个答案:

答案 0 :(得分:0)

我终于解决了这个问题。 我决定查看其他逻辑步骤以找到解决方案。 我认为问题可能是有不同的字符串做了不同的事情,可能会在某种程度上相互冲突。 在我的研究中,我发现蓝牙模块HC-05有两个引脚,在我的情况下没有被利用,关键引脚和状态引脚,在这个堆栈溢出讨论中Tell when Bluetooth module connects on Arduino并决定了这个逻辑使用"状态引脚"表示蓝牙连接将否定字符串逻辑中任何冲突的可能性。 一旦我找到了最好的方式来安排和订购"其中"我设法在我的项目中获得功能,然后让我继续进行开发的下一步。

我现在的代码已经到达:

const int ledPin1 = 11;
const int ledPin2 = 4;

String readString;

boolean BTconnected = false;

void setup() {
  Serial.begin(9600);
  pinMode (ledPin1, OUTPUT);
  pinMode (ledPin2, INPUT);
}

void loop() {  

      while (!BTconnected)
    {
      if ( digitalRead(ledPin2)==HIGH)  { BTconnected = true;};
    }
    digitalWrite(ledPin1, HIGH);
    Serial.println("HC-05 is now connected");
    Serial.println("");


       while (BTconnected)
              {
        if ( digitalRead(ledPin2)==LOW)  { BTconnected = false;
        digitalWrite(ledPin1, LOW);
        Serial.println("HC-05 is now disconnected");
        Serial.println("");
                };

        while (Serial.available()) 
              {
            delay(3);
            char c = Serial.read();
            readString  += c;
              }

   if (readString.length() >0) {

      //Serial.println(readString);
      //readString="";

    String first  = Serial.readStringUntil(',');
    Serial.read(); //next character is comma, so skip it using this
    Serial.println(first);
    //readString="";

    String second = Serial.readStringUntil(',');
    Serial.read();
    Serial.println(second);
    Serial.println(""); 
    //readString="";
    }
  }
 }
相关问题