Módulo Bluetooth + Android
Autor: Eletroautomação | Publicado: 2013-12-07T17:23:00-08:00


PIC:&nbsp;Módulo&nbsp;Bluetooth +&nbsp;Android







Neste post, falarei do módulo Bluetooth&nbsp;HC-06.



Este dispositivo é barato e fácil de usar. Deve ser alimentado com tensão de 3.6V até 6V e comunica com o microcontrolador via serial RS232 TTL. A velocidade padrão é de 9600 bps.



A ligação é simples. O pino RX do módulo é ligado ao pino TX do microcontrolador e o pino TX do módulo é ligado ao pino RX do microcontrolador.



Você pode enviar informações ao módulo bluetooth usando um adaptador bluetooth conectado ao PC ou utlizar um smartphone com Android.



BIBLIOTECA&nbsp;( Para realizar a comunicação com o aplicativo para Android )

MikroC PRO PIC



#define MESSAGE_BUTTON 0xFF
#define MESSAGE_VOL_UP 0xFE
#define MESSAGE_VOL_DOWN 0xFD
#define MESSAGE_SEEKBAR 0xFC
#define MESSAGE_ACEL 0xFB

void BT_Init()
{
     UART1_Init( 9600 );
     delay_ms( 10 );
     RCIE_bit = 1;
     GIE_Bit = 1;
     PEIE_Bit = 1;
}

char BT_Read( char *msg )
{
char rd;
static char cnt = 0, tp = 0;
     if(RCIF_Bit)
     {
        RCIF_Bit = 0;

        rd = UART1_Read();
        
        if(tp == 0)
        {
           switch( rd )
           {
             case MESSAGE_BUTTON: tp = MESSAGE_BUTTON; break;
             case MESSAGE_VOL_UP: tp = MESSAGE_VOL_UP; break;
             case MESSAGE_VOL_DOWN: tp = MESSAGE_VOL_DOWN; break;
             case MESSAGE_ACEL: tp = MESSAGE_ACEL; break;
             case MESSAGE_SEEKBAR: tp = MESSAGE_SEEKBAR; break;
             default: tp = 0; break;
           }
           
           cnt = 0;
        }
        else
        {
             if(tp == MESSAGE_BUTTON)
             {
                 cnt++;
                 if(cnt == 1)
                 {
                     msg[1] = rd; //Button ID
                 }
                 else if(cnt == 2)
                 {
                    msg[2] = rd;  //Estado
                    msg[0] = MESSAGE_BUTTON;
                    tp = 0;
                    return 1;
                 }
             }
             else if(tp == MESSAGE_VOL_UP)
             {
                 msg[1] = rd;
                 msg[0] = MESSAGE_VOL_UP;
                 tp = 0;
                 return 1;
             }
             else if(tp == MESSAGE_VOL_DOWN)
             {
                 msg[1] = rd;
                 msg[0] = MESSAGE_VOL_DOWN;
                 tp = 0;
                 return 1;
             }
             else if(tp == MESSAGE_SEEKBAR)
             {
                cnt++;
                if(cnt == 1)
                 {
                      msg[1] = rd;
                 }
                 else if(cnt == 2)
                {
                      msg[2] = rd;
                      msg[0] = MESSAGE_SEEKBAR;
                      tp = 0;
                      return 1;
                }
             }
             else if(tp == MESSAGE_ACEL)
             {
                 cnt++;
                 if(cnt == 1)
                 {
                    msg[1] = rd; //Eixo X
                 }
                 else if(cnt == 2)
                 {
                    msg[2] = rd; // Eixo Y
                 }
                 else if(cnt == 3)
                 {
                    msg[3] = rd; // Eixo Z
                    msg[0] = MESSAGE_ACEL;
                    tp = 0;
                    return 1;
                 }
                 
             }
        }
        return 0;
     }
     else
     {
        return 0;
     }
     

}




EXEMPLO:

MikroC PRO PIC



//Copie e cole o código da biblioteca aqui

char Mensagem[4];

void Interrupt()
{
    if( BT_Read(&amp;Mensagem) ) //Se recebeu todos os valores
    {
       if(Mensagem[0] == MESSAGE_BUTTON)//Se recebeu um comando de um Botao
       {
          if((Mensagem[1] == 1 )  //comando/ ID
          {
             PORTA.F4 = Mensagem[2].B0; //Valor/ State
          }
          else if(Mensagem[1] == 2)
          {
             PORTA.F5 = Mensagem[2].B0;
          }   
       }
    }
}

void main() 
{
    BT_Init();
    ADCON1 = 0x0F;
    TRISA = 0;
    PORTA = 0;
}






APLICATIVOO Aplicativo que desenvolvi, utilizando o&nbsp;Android Studio, comunica-se com o microcontrolador via bluetooth, possui 6 botões de comando, uma barra deslizante, e &nbsp;acelerômetro. Também é possível utilizar os botões de volume para enviar algum dado. Possui um campo destinado ao envio de uma string ou um byte.






COMANDOS ENVIADOS PELO APLICATIVO:

1.MESSAGE_BUTTON (0xFF)

Sintaxe: [0xFF][ID][STATE]

ID:&nbsp;Indica qual botão foi acionado ou um comando a ser enviado.

STATE:&nbsp;Indica o estado do botão ou um valor a ser enviado.



2.MESSAGE_VOL_UP (0xFE)

Sintaxe: [0xFE][Value]

Value: é um valor de 0 a 255



3.MESSAGE_VOL_DOWN (0xFD)

Sintaxe:&nbsp;[0xFD][Value]

Value:&nbsp;é um valor de 0 a 255



4.MESSAGE_SEEKBAR (0xFC)

Sintaxe:&nbsp;[0xFC][Value][Value]

Value: são dois bytes(MSB e LSB), com o valor atual do seekbar.



5.MESSAGE_ACEL (0xFB)

Sintaxe:&nbsp;[0xFB][X][Y][Z]

X, Y, Z:&nbsp;São os eixos. Varia de 0 a 100. O bit 7 indica se o valor é negativo.


DOWNLOAD

Aplicativo + código-fonte:&nbsp;ANDROIDTOPIC.rar