【发布时间】: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