【问题标题】:Recieved String to useable variable in Arduino接收到 Arduino 中可用变量的字符串
【发布时间】:2016-01-30 20:45:10
【问题描述】:

我正在尝试使用通过蓝牙从移动应用程序发送到 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 中构建的

【问题讨论】:

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


    【解决方案1】:

    我终于解决了这个问题。 我决定查看其他合乎逻辑的步骤以找到解决方案。 我认为这个问题可能是有不同的字符串做了不同的事情,这些事情可能会以某种方式发生冲突。 在我的研究中,我发现蓝牙模块 HC-05 有 2 个引脚在我的情况下没有被使用,关键引脚和状态引脚,在这个堆栈溢出讨论 Tell when Bluetooth module connects on Arduino 中,并决定使用这个逻辑表示蓝牙连接的“状态引脚”将否定字符串逻辑中任何冲突的可能性。 一旦我找到了放置和排序“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="";
        }
      }
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多