通过 IF 语句调用函数时的问题

内森·德·奥利维拉

我正在为客户完成一个项目。基本上它是一个交互式菜单,他可以在其中以更简单的方式为蓝牙模块发送 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用if语句调用函数

来自分类Dev

python单行if语句调用函数if true

来自分类Dev

从 if 语句调用 Google Script 函数

来自分类Dev

如何从 Laravel 的 if 语句调用 javascript 函数?

来自分类Dev

在if语句中调用函数/通过print()调用-好的做法?

来自分类Dev

通过C DLL调用函数时出错

来自分类Dev

PostgreSQL-如何通过if语句中的函数调用定义变量

来自分类Dev

在Javascript中使用if语句调用嵌套函数

来自分类Dev

通过指针调用函数

来自分类Dev

通过函数调用ID

来自分类Dev

通过指针调用函数

来自分类Dev

Javascript函数和原型-通过调用方法的基本路由问题

来自分类Dev

通过PDO创建MySQL函数时遇到问题

来自分类Dev

通过DllImport调用非托管函数时,堆已损坏

来自分类Dev

访问https链接时如何通过JS调用wpf函数

来自分类Dev

调用函数时,如何通过名称设置变量?

来自分类Dev

通过modules.exports调用javascript函数时出错

来自分类Dev

尝试通过 AJAX 调用 PHP 函数时出现 500 错误

来自分类Dev

通过链接调用ajax函数

来自分类Dev

函数调用通过引用传递?

来自分类Dev

通过调用函数清除mouseenter?

来自分类Dev

如何通过指针调用函数?

来自分类Dev

通过ssl调用Javascript函数

来自分类Dev

通过点调用的Ruby函数

来自分类Dev

通过PHP调用JavaScript函数

来自分类Dev

通过struct调用递归函数

来自分类Dev

通过URL调用JavaScript函数

来自分类Dev

通过 PHP 调用 JS 函数

来自分类Dev

如何使用if语句调用函数,然后打印if语句内部返回的值?