Olá cavalheiros, mais uma vez estou estudando sobre comunicação wireless, e desta vez o assunto é Bluetooth.

Já vi alguns tutoriais e discussões sobre isso aqui, como esses por exemplo:

Acionamento via bluetooth.

Aplicação android bluetooth.

Mas a maioria das coisas encontradas são relacionadas a Arduíno, acho importante darmos uma atenção maior para os microcontroladores, já que não há tanto material assim.

Estou utilizando um microcontrolador PIC18F4550, e o modulo bluetooth HC-06.

Estou utilizando o Mikro C pro for pic para programar o pic e o Android Studio para criar a aplicação.

A principio, na aplicação android estou aproveitando o código disponibilizado aqui.

Já para o PIC18F4550 produzi um código simples, mas quero chamar a atenção para este trecho:

//Importações

//Inicializações

//Declarações

char *valor[3];

while(1)                                               //Repita indefinidamente
{
if(uart_data_ready()){                         //se algum dado foi recebido
UART1_Read_Text(valor, "\0", 5);     //(ARMAZENAR, "PARAR EM", TAMANHO)
Lcd_out(1,1,valor);                             //exibe o caracter recebido no lcd
Lcd_Cmd(_LCD_RETURN_HOME);  //O cursor do LCD volta para a linha 1 coluna 1
}

if(!strcmp(valor, "on")){                  //Se o valor recebido for "on"
RA0_BIT=1;                                      //Liga o Led 0
delay_ms(10);                                   //Espera 10ms
}

if(!strcmp(valor, "off")){                 //Se o valor recebido for "off"
RA0_BIT=0;                                     //Desliga o Led 0
delay_ms(10);
}

}

Principalmente ao que se refere a comparação dentro dos dois últimos If's.

Pelo que eu entendi, o strcmp() pode comparar "duas coisas", strings ou simplesmente palavras, por exemplo:

strcmp("biscoitos", "gatinhos"); // retorna < 0 pois 'B' < 'G' 
strcmp("biscoitos", "gatinhos"); // retorna > 0 pois 'G' > 'B'

ou:

char *s1 = "teste1"; 

char *s2 = "testeteste";
char *s3 = "teste1";
char *res[];
res = strcmp(s1, s3); //Retorna 0 pois s1 e s3 são iguais. (Estranho, mas é assim)

res = strcmp(s1, s2); //Retorna 1 pois s1 e s2 são diferentes. (Estranho, mas é assim)

Com isso, passei a utilizar:

!strcmp //Pois o contrario de 0 é 1, com isso fica mais fácil de comparar.

Ficando assim:

if(!strcmp(valor, "on")){                  //Se o valor recebido for "on"
RA0_BIT=1;                                      //Liga o Led 0
delay_ms(10);                                   //Espera 10ms
}

A questão é: será que funciona? ainda não tive tempo de testar na prática, quando eu testar, colocarei os resultados aqui.

Alguém sabe outra forma mais eficiente de se fazer isto?

Alguém pode fazer uma melhoria no código ou contribuir com criticas ou sugestões?

Vamos disponibilizar o máximo de informações aqui para as futuras gerações.

Exibições: 1650

Responder esta

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço