sábado, 7 de dezembro de 2013

Módulo Bluetooth + Android

PICMódulo Bluetooth + Android



Neste post, falarei do módulo Bluetooth 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 ( Para realizar a comunicação com o aplicativo para Android )
MikroC PRO PIC
  1. #define MESSAGE_BUTTON 0xFF
  2. #define MESSAGE_VOL_UP 0xFE
  3. #define MESSAGE_VOL_DOWN 0xFD
  4. #define MESSAGE_SEEKBAR 0xFC
  5. #define MESSAGE_ACEL 0xFB
  6. void BT_Init()
  7. {
  8. UART1_Init( 9600 );
  9. delay_ms( 10 );
  10. RCIE_bit = 1;
  11. GIE_Bit = 1;
  12. PEIE_Bit = 1;
  13. }
  14. char BT_Read( char *msg )
  15. {
  16. char rd;
  17. static char cnt = 0, tp = 0;
  18. if(RCIF_Bit)
  19. {
  20. RCIF_Bit = 0;
  21. rd = UART1_Read();
  22. if(tp == 0)
  23. {
  24. switch( rd )
  25. {
  26. case MESSAGE_BUTTON: tp = MESSAGE_BUTTON; break;
  27. case MESSAGE_VOL_UP: tp = MESSAGE_VOL_UP; break;
  28. case MESSAGE_VOL_DOWN: tp = MESSAGE_VOL_DOWN; break;
  29. case MESSAGE_ACEL: tp = MESSAGE_ACEL; break;
  30. case MESSAGE_SEEKBAR: tp = MESSAGE_SEEKBAR; break;
  31. default: tp = 0; break;
  32. }
  33. cnt = 0;
  34. }
  35. else
  36. {
  37. if(tp == MESSAGE_BUTTON)
  38. {
  39. cnt++;
  40. if(cnt == 1)
  41. {
  42. msg[1] = rd; //Button ID
  43. }
  44. else if(cnt == 2)
  45. {
  46. msg[2] = rd; //Estado
  47. msg[0] = MESSAGE_BUTTON;
  48. tp = 0;
  49. return 1;
  50. }
  51. }
  52. else if(tp == MESSAGE_VOL_UP)
  53. {
  54. msg[1] = rd;
  55. msg[0] = MESSAGE_VOL_UP;
  56. tp = 0;
  57. return 1;
  58. }
  59. else if(tp == MESSAGE_VOL_DOWN)
  60. {
  61. msg[1] = rd;
  62. msg[0] = MESSAGE_VOL_DOWN;
  63. tp = 0;
  64. return 1;
  65. }
  66. else if(tp == MESSAGE_SEEKBAR)
  67. {
  68. cnt++;
  69. if(cnt == 1)
  70. {
  71. msg[1] = rd;
  72. }
  73. else if(cnt == 2)
  74. {
  75. msg[2] = rd;
  76. msg[0] = MESSAGE_SEEKBAR;
  77. tp = 0;
  78. return 1;
  79. }
  80. }
  81. else if(tp == MESSAGE_ACEL)
  82. {
  83. cnt++;
  84. if(cnt == 1)
  85. {
  86. msg[1] = rd; //Eixo X
  87. }
  88. else if(cnt == 2)
  89. {
  90. msg[2] = rd; // Eixo Y
  91. }
  92. else if(cnt == 3)
  93. {
  94. msg[3] = rd; // Eixo Z
  95. msg[0] = MESSAGE_ACEL;
  96. tp = 0;
  97. return 1;
  98. }
  99. }
  100. }
  101. return 0;
  102. }
  103. else
  104. {
  105. return 0;
  106. }
  107. }


EXEMPLO:
MikroC PRO PIC
  1. //Copie e cole o código da biblioteca aqui
  2. char Mensagem[4];
  3. void Interrupt()
  4. {
  5. if( BT_Read(&Mensagem) ) //Se recebeu todos os valores
  6. {
  7. if(Mensagem[0] == MESSAGE_BUTTON)//Se recebeu um comando de um Botao
  8. {
  9. if((Mensagem[1] == 1 ) //comando/ ID
  10. {
  11. PORTA.F4 = Mensagem[2].B0; //Valor/ State
  12. }
  13. else if(Mensagem[1] == 2)
  14. {
  15. PORTA.F5 = Mensagem[2].B0;
  16. }
  17. }
  18. }
  19. }
  20. void main()
  21. {
  22. BT_Init();
  23. ADCON1 = 0x0F;
  24. TRISA = 0;
  25. PORTA = 0;
  26. }

APLICATIVO
O Aplicativo que desenvolvi, utilizando o Android Studio, comunica-se com o microcontrolador via bluetooth, possui 6 botões de comando, uma barra deslizante, e  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: Indica qual botão foi acionado ou um comando a ser enviado.
STATE: 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: [0xFD][Value]
Value: é um valor de 0 a 255

4.MESSAGE_SEEKBAR (0xFC)
Sintaxe: [0xFC][Value][Value]
Value: são dois bytes(MSB e LSB), com o valor atual do seekbar.

5.MESSAGE_ACEL (0xFB)
Sintaxe: [0xFB][X][Y][Z]
X, Y, Z: São os eixos. Varia de 0 a 100. O bit 7 indica se o valor é negativo.


DOWNLOAD
Aplicativo + código-fonte: ANDROIDTOPIC.rar

0 comentários:

Postar um comentário