Fórum

arrow_back

Dúvidas Código Bluetooth HC05

FELIPE ULBRIK FELIN

21/02/2023 21:35:59

A váriável 'result' inicia com seu valor atribuído como 1. Em cada teste de condição if, não esta sendo atribuído um novo valor para a variável 'result'? A função 'bluetooth_write_command()' tem dois retornos -1 em caso de erro ou 0 caso sucesso. Caso a função 'bluetooth_write_command()' retorne 0 ( sucesso), realizando o AND com 'result' é zero, logo o valor zero seria atribuído a 'result', não validando a condição if e seguindo em frente no código. Caso a comunição com o módulo funcione tem uma linha de código 'return result' que como comentário especifica que deva retornar o valor 1 caso funcione corretamente. Minha dúvida é em cada teste da condição if na minha concepção o valor da variável 'result' estaria sendo modificada.

int8_t bluetooth_config( void )
{
    int8_t result = 1;
    
    bluetooth_mode( AT_MODE );

#if (BLUETOOTH_MODE == SLAVE_MODE)
    /**
     * Configura em modo AT;
     */
    if((result=(result & bluetooth_write_command((int8_t*) "AT\r\n", (int8_t*) "OK", 1000 )))==1) return -1;
    /**
     * Define dispositivo como Slave;
     * Role -> 0 modo slave;
     * Role -> 1 modo master;
     */
    if((result=(result & bluetooth_write_command((int8_t*) "AT+ROLE=0\r\n", (int8_t*) "OK", 1000 )))==1) return -1;

    /**
     * Define o nome do dispositivo bluetooth;
     */
    if((result=(result & bluetooth_write_command((int8_t*) "AT+NAME="BLUETOOTH_SLAVE_NAME"\r\n", (int8_t*) "OK", 1000 )))==1) return -1;

    /**
     * Configura a senha PIN do bluetooth slave;
     */
    if((result = (result & bluetooth_write_command((int8_t*) "AT+PSWD="BLUETOOTH_PIN_CODE"\r\n", (int8_t*) "OK", 1000 )))==1) return -1;

    /**
     * Configura em modo de conexão. Dessa forma assim que o módulo for resetado ele irá iniciar
     * o envio das mensagens em busca de conexão;
     */
    if((result=(result & bluetooth_write_command((int8_t*) "AT+CMODE=1\r\n", (int8_t*) "OK", 1000 )))==1) return -1;
    
    /**
     * Configuração da serial, baudrate, stopbits, paridade;
     * A configuração do baudrate do bluetooth é a mesma da Uart;
     */
    if((result=(result & bluetooth_write_command((int8_t*) "AT+UART="BLUETOOTH_BAUDRATE",0,0\r\n ", (int8_t*) "OK", 1000 )))==1) return -1;
    
    /**
     * Após configuração é recomendado resetar o dispositivo;
     */
    if((result=(result & bluetooth_write_command((int8_t*) "AT+RESET\r\n", (int8_t*) "OK", 1000 )))==1) return -1;

#elif (BLUETOOTH_MODE == MASTER_MODE)
    /**
     * Comando para teste da comunicação AT entre MCU e Bluetooth;
     */
    if((result = (result & bluetooth_write_command((int8_t*) "AT\r\n", (int8_t*) "OK", 1000 )))==1) return -1;
    
    /**
     * Deleta da memória todo os possíveis slaves autenticados, ou seja, remove dispositivos anteriormente pareados;
     */
    if((result = (result & bluetooth_write_command((int8_t*) "AT+RMAAD\r\n", (int8_t*) "OK", 1000 )))==1) return -1;

    /**
     * Define o nome do dispositivo bluetooth;
     */
    if((result=(result & bluetooth_write_command((int8_t*) "AT+NAME="BLUETOOTH_MASTER_NAME"\r\n", (int8_t*) "OK", 1000 )))==1) return -1;
  
    /**
     * Define a senha de PIN;
     */
    if((result = (result & bluetooth_write_command((int8_t*) "AT+PSWD="BLUETOOTH_PIN_CODE"\r\n", (int8_t*) "OK", 1000 )))==1) return -1;
    
    /**
     * Define como bluetooth master;
     */
    if((result = (result & bluetooth_write_command((int8_t*) "AT+ROLE=1\r\n", (int8_t*) "OK", 1000 )))==1) return -1;

    /**
     * Parametro: 0 -> Conecta somente com um bluetooth endereçado/fixado;
     * Parametro: 1 -> Conecta com qualquer dispositivo bluetooth slave na aproximidade; 
     */
    if((result = (result & bluetooth_write_command((int8_t*) "AT+CMODE=1\r\n", (int8_t*) "OK", 1000 )))==1) return -1;

    /**
     * Modo de varredura : padrão, procura por 5 dispositivos e finaliza a varredura após 10s; 
     */
    if((result = (result & bluetooth_write_command((int8_t*) "AT+INQM=0,5,10\r\n", (int8_t*) "OK", 1000 )))==1) return -1;
        
    /**
     * Configuração da serial, baudrate, stopbits, paridade;
     * A configuração do baudrate do bluetooth é a mesma da Uart;
     */
    if((result=(result & bluetooth_write_command((int8_t*) "AT+UART="BLUETOOTH_BAUDRATE",1,0\r\n ", (int8_t*) "OK", 1000 )))==1) return -1;

    /**
     * Após configuração é recomendado resetar o dispositivo;
     */
    if((result=(result & bluetooth_write_command((int8_t*) "AT+RESET\r\n", (int8_t*) "OK", 1000 )))==1) return -1;

#endif

    /**
     * Depois disso, se os dois módulos estiverem ligados, eles se conectarão e transferirão dados entre si de forma 
     * transparente;
     */
    bluetooth_mode( TRANSFER_MODE );

    /**
     * Reseta a fifo para garantir que o buffer esteja vazio;
     */
    bluetooth_clear_fifo();

    /**
     * Caso result = 1 então o bluetooth foi configurado corretamente;
     */
    return result;
}


FERNANDO SIMPLICIO DE SOUSA

24/02/2023 15:13:57

Olá Felipe. Sim, é verdade. Acabei alterando a variável 'result' a cada execução dos comandos, o que não deveria ter feito. Segue uma pequena modificação no exemplo. Entretanto, vou avaliar melhor pois 'bluetooth_write_command' pode retornar -1, questão que complica o teste com o operador &;

/* 
  //passo a passo...
	result = 1;
	if(((result & bluetooth_write_command((const char *) "AT\r\n", (const char *) "OK", 20 )))==1) return -1;
	if(((1 & 0))==1) return -1;
	if((0)==1) return -1;  //consição falsa, logo continua executando a função...
	return result;
*/

Este site usa cookies para melhorar sua experiência. Política de Privacidade