我正在尝试使用蓝牙从移动应用程序发送到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中构建
答案 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="";
}
}
}