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

Recieved String to useable variable in Arduino

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

第一个函数:当接收到字符串"ledon"或"ledoff"时,点亮或熄灭一个led。

第二个功能:我从应用程序中获取用户在 2 个框中输入的数据,一个是文本框,另一个是密码框,Arduino 将其作为一个字符串接收,并以逗号作为分隔符,因此字符串可以分成它的组成部分,在本例中是 "ssid name" 和 "network key"。我打算将这些详细信息写入板载 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 中构建的

我终于解决了这个问题。 我决定查看其他合乎逻辑的步骤来找到解决方案。 我认为问题可能是不同的字符串执行不同的操作,可能在某种程度上存在冲突。 在我的研究中,我发现蓝牙模块 HC-05 有 2 个引脚,在我的例子中没有被使用,关键引脚和状态引脚,在这个堆栈溢出讨论中 Tell when Bluetooth module connects on Arduino 并决定这个逻辑使用 "State pin" 表示蓝牙连接将消除字符串逻辑中任何冲突的可能性。 一旦我找到了放置和排序 "where" 语句的最佳方式,我就设法在我的项目中获得了此时的功能,然后允许我继续开发的下一步。

我现在得到的代码:

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="";
    }
  }
 }