我正在为客户完成一个项目。基本上它是一个交互式菜单,他可以在其中以更简单的方式为蓝牙模块发送 AT 命令。
代码在第一个函数(“padrao”)上工作。它正确发送 AT 命令。(另外,忽略代码的缺失部分)
问题是: IF 语句唯一可以调用的函数是“padrao”。任何其他功能都不起作用。我可以改变什么来解决问题?提前致谢!
试图改用 SWITCH 和 CASE,但无法调用任何这样的函数......
(我只留下了剩下的一个函数进行比较。告诉我你们是否需要其余的代码)
/* Menu interativo para comandos dos módulos Bluetooth HC-05, HC-06, HC-08, HM-10, etc.
* Nathan - 29/04/2019
*
#include <SoftwareSerial.h>
#define rx 3
#define tx 4
SoftwareSerial Seria1(rx, tx); // Declara os pinos utilizados para a comunicação serial
int entrada = 0 ;
int echo;
void setup () {
Serial.begin(9600); // Inicia a comunicação serial a 9600 bauds
Seria1.begin(9600); // Inicia a interface serial de software a 9600 bauds
Serial.println("Interface de testes Bluetooth ver. 0.1");
Serial.println("Escolha uma opção pelo terminal serial");
Serial.println("1. Redefinir o módulo para as configurações de fábrica");
Serial.println("2. Reset");
Serial.println("3. Verificar o endereço do módulo");
Serial.println("4. Verificar o nome do módulo [como será reconhecido]");
Serial.println("5. Mudar o nome do módulo");
//Teste da variável "entrada". Debug apenas.
//Serial.println(entrada);
pinMode (LED_BUILTIN, OUTPUT);
}
void loop () {
if (Serial.available()){
entrada = Serial.parseInt();
delay(100);
if (entrada == 1)
{
echo == entrada;
padrao();
}
if (entrada == 2) {
Seria1.write("AT+RST");
entrada = 0;
}
if (entrada == 3) {
Seria1.write("AT+ADDR?");
entrada = 0;
if (entrada == 9) {
nome();
}
if (entrada == 4) {
char comando[] = "AT+NAME=";
Serial.println ("Digite o nome do dispositivo desejado");
while(!Serial.available() ){
}
int nome = Serial.read();
Seria1.write (comando + nome);
entrada = 0;
}
}
if (entrada == 5) {
Seria1.write ("AT+ROLE=0");
entrada = 0;
}
if (entrada == 6) {
Seria1.write ("AT+ROLE=1");
entrada = 0;
}
if (entrada == 7) {
Seria1.write ("AT+PSWD?");
entrada = 0;
}
if (entrada == 8) {
Seria1.write ("AT+STATE?");
entrada = 0;
}
}
}
void padrao() {
digitalWrite(LED_BUILTIN,LOW);
Serial.println("Deseja resetar o dispositivo para as configurações padrão?");
Serial.println("Digite '1' para prosseguir");
int resposta = Serial.parseInt();
while (resposta != 1) {
if (resposta == 1) {
break;
}
}
{
delay(1000);
Seria1.write("AT+ORGL");
Serial.print("Comando enviado!");
entrada = 0;
}
}
void nome() {
delay(100);
Serial.write("O nome do dispositivo é:");
Seria1.write("AT+NAME?");
//debug
Serial.print("teste");
entrada = 0;
}
我认为你的问题在这里:
if (entrada == 3) {
Seria1.write("AT+ADDR?");
entrada = 0;
if (entrada == 9) {
nome();
}
if (entrada == 4) {
基本上,如果 entrada == 3,则您进入此块,您可能会在其中调用 nome()。
但是,如果 entrada == 3,则不可能等于 9。此外,您在测试之前将 entrada 重置为 0,如果它是 9。所以 entrada 不可能是 9,因此无法调用 nome。
可能你打算让代码读成这样:
if (entrada == 3) {
Seria1.write("AT+ADDR?");
entrada = 0;
} // The previous if statement was not ended.
if (entrada == 9) {
nome();
}
if (entrada == 4) {
您将需要从代码的更下方删除一个右大括号。
另外,我注意到你有这个:
if (entrada == 4) {
char comando[] = "AT+NAME=";
Serial.println ("Digite o nome do dispositivo desejado");
while(!Serial.available() ){
}
int nome = Serial.read(); // See below
Seria1.write (comando + nome);
entrada = 0;
}
}
通常,将相同的名称用于变量和其他目的(即 nome() 函数)并不是一个好主意。在这种情况下,它可能没问题,但稍后可能会引起混淆 - 特别是如果此代码块变大并且您需要从其中调用 nome() 函数。
最后, echo == 代码行没有做任何事情。这就是你的意图吗?
if (entrada == 1)
{
echo == entrada; // This is a non-operation. Did you mean for it to be something else?
padrao();
}
我希望这对您的项目有所帮助。:-)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句