Es esta práctica utilizaremos el protocolo RS232 para recibir información de un dispositivo móvil, interpretarla y controlar el led RGB de Miuva.
RS232
Es un protocolo de comunicación asíncrono y serial. En este caso lo configuraremos con la siguiente línea:
#use RS232(BAUD = 9600, BITS = 8, PARITY = N, XMIT = PIN_C6, RCV = PIN_C7)
Velocidad de 9600 baudios, 8 bits de información y sin bit de paridad, así como la dirección donde estará conectada Tx y Rx, en Miuva puedes conectar directamente un dispositivo bluetooth HC-05 y HC-06 ya que tiene un puerto predefinido para esta acción.
Imagen 1. Puerto RS232 de Miuva
Dónde Tx está conectado al pin C6 y Rx al pin C7.
Para enviar y recibir información en este protocolo utilizaremos las siguientes funciones:
a = getc(); //Recibimos información y la almacenamos en a printf(); //Enviarmos información
Los caracteres recibidos están en su equivalente en formato ASCII, por lo tanto al recibir información es importante saber interpretarla. Por ejemplo, si el dispositivo móvil nos envía el caracter “v” estaremos recibiendo y almacenando el entero “118”.
Imagen 2. Tabla ASCII
Por lo tanto en nuestro código realizaremos diferentes acciones según los valores recibidos en Miuva, acorde a la siguiente tabla:
Imagen 3. Tabla de funcionamiento
Esto lo podemos realizar con un ciclo condicional if.
Con esto podemos crear el siguiente código:
Código para PIC C:
#include<18f4550.h> #Fuses HSPLL, NOWDT, NOPROTECT, NOLVP, NODEBUG, USBDIV, PLL2, CPUDIV1, VREGEN #use delay (clock=48M) //Seleccionamos la frecuencia de reloj de 48MHz #use RS232(BAUD = 9600, BITS = 8, PARITY = N, XMIT = PIN_C6, RCV = PIN_C7) unsigned int8 dato; void main(){ set_tris_e(0x00); //Puerto E como salida output_e(0x07); //Apagamos los leds printf("Inicio de comunicacionr"); //Enviamos por RS232 while(TRUE){ //Ciclo infinito dato = getc(); //Leemos información y la almacenamos en dato if (dato == 118){ //¿Se recibió la "v" en ASCII? output_low(PIN_E0); //Encedemos led printf("Color Verde"); //Enviamos información delay_ms(100); //Esperamos 100ms } if (dato == 114){ //¿Se recibió la "r" en ASCII? output_low(PIN_E1); //Encedemos led printf("Color Rojo"); //Enviamos información delay_ms(100); //Esperamos 100ms } if (dato == 97){ //¿Se recibió la "a" en ASCII? output_low(PIN_E2); //Enecedemos led printf("Color Azul"); //Enviamos información delay_ms(100); //Esperamos 100ms } if (dato == 49){ //¿Se recibió el "1" en ASCII? output_high(PIN_E0); //Apagamos led delay_ms(100); //Esperamos 100ms } if (dato == 50){ //¿Se recibió el "2" en ASCII? output_high(PIN_E1); //Apagamos led delay_ms(100); //Esperamos 100ms } if (dato == 51){ //¿Se recibió el "3" en ASCII? output_high(PIN_E2); //Apagamos led delay_ms(100); //Esperamos 100ms } } }
Para hacer la parte de la comunicación desde el dispositivo móvil, te recomendamos descargar nuestra aplicación para Android:
Es necesario abrirla desde el celular e instalarla siguiendo los pasos que indica el dispositivo móvil (es posible que pida autorizar la instalación de aplicaciónes externas a la Play Store, en ese caso es necesario otorgarle ese permiso).
Para utilizarla:
- Empareja tu módulo HC – 05 con tu dispositivo móvil mediante bluetooth (la contraseña por defecto será “1234”).
- Abre la APP.
- Coloca en “Número de bytes a recibir” un “1” (si esperas recibir más bytes escribe el número deseado).
- Presiona en “Conectar bluetooth” y selecciona HC 05
- Escribe el dato que deseas enviar en “Dato a enviar”
- Presiona “Enviar”
Observa el video demostrativo