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

时间:2019-05-08 23:42:22

标签: c++ function if-statement menu arduino

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

1 个答案:

答案 0 :(得分:2)

我认为您的问题在这里:

    if (entrada == 3) {
      Seria1.write("AT+ADDR?");
      entrada = 0;
    if (entrada == 9) {

      nome();

      }
    if (entrada == 4) {

基本上,如果entrada == 3,则在可能调用nome()的位置输入此块。

但是,如果entrada == 3,则不可能等于9。此外,在测试是否为9之前将entrada重置为0。因此,不可能将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();

    }

我希望这对您的项目有所帮助。 :-)