Pantalla Touch NEXTION HMI «recepción», Pic C Compiler
Por
/
En esta sección aprenderás a programar una interfaz gráfica en una pantalla touch HMI NEXTION, para enviar datos al microcontrolador PIC por una comunicación UART. El objetivo es colocar dos botones y un Slider en la pantalla táctil para incrementar o decrementar una variable y así controlar dos señales PWM que encienden y apagan dos LEDs.
¿Qué es Nextion?
Nextion es una solución de interfaz hombre-máquina (HMI) que combina un procesador integrado y una pantalla táctil con memoria con el software Nextion Editor para el desarrollo de proyectos de GUI HMI.
Con el software Nextion Editor, puede desarrollar rápidamente la GUI de HMI arrastrando y soltando componentes (gráficos, texto, botón, control deslizante, etc.) e instrucciones basadas en texto ASCII para codificar cómo interactúan los componentes en el lado de la pantalla.
La pantalla HMI de Nextion se conecta a la MCU periférica a través de TTL Serial (5V, TX, RX, GND) para proporcionar notificaciones de eventos en las que la MCU periférica puede actuar, la MCU periférica puede actualizar fácilmente el progreso y el estado de regreso a la pantalla Nextion utilizando un simple ASCII basado en texto. instrucciones.
Circuito completo
Procedimiento
Inicialmente se establecen los parámetros de la comunicación RS232.
Cuando se reciben datos por el puerto rs232 se habilita la interrupción «#int_rda» donde se reciben los datos y se guardan en la variable de caracteres «recibido[]», cuando se recibe el carácter «\n» se termina la recepción de datos, después se borran los caracteres especiales «\r y \n» para conservar solo el comando recibido, finalmente el programa se dirige a la subrutina «datos()».
#int_rda
void recibe()
{
memset(recibido, 0, sizeof(recibido)); //limpia los registros de la varible
int8 i=0;
while(true)
{
recibido[i]=getc();//RECIBE EL CARACTER
if (recibido[i] == 255 ){return;} //inicio de pantalla nextion
if(recibido[i] == '\n')//busca el salto de linea \r
{
recibido[i-1] = '\0'; // \r = \0 (caracter nulo)
recibido[i] = '\0'; // \n = \0 (caracter nulo)
datos();
return;
}
i++;
}
}
Nota: Cuando se enciende la pantalla Nextion, envía diferentes caracteres por TX (\x00\x00\x00ÿÿÿ ÿÿÿ), donde ÿ = 255, por lo que, al inicio el primer comando no se enviara correctamente, para evitar esto se puede colocar lo siguiente;
while(true)
{
recibido[i] = getc();//RECIBE EL CARACTER
if (recibido[i] == 255){return;} //inicio de pantalla nextion
.
.
.
En la subrutina «datos()», inicialmente se declara los comandos que se recibirán.
Con un bucle «for()» se divide la cadena de caracteres recibida para separar el comando correspondiente a la variable y el numero, inicialmente los primeros 5 caracteres corresponden la variable y los 3 caracteres siguientes corresponden al numero.
for (int i=0; i<=4; ++i)
{
ID_val[i] = recibido[i]; //identifica el slider
}
for (int i=0; i<=2; ++i)
{
num[i] = recibido[i+5]; //guarda el valor del slider
}
.
.
.
Con la función «strcmp()» se compara el comando recibido «ID_val» con los diferentes comandos que se pueden recibir «val01, val02», si resultan igual, se convierte el numero de caracteres «num» a una variable entera de 8 bits y lo asigna a la variable.
result = strcmp(ID_val, val01);//compara, si son iguales (0), no (+-1)
if(result==0)
{
val01_num = (int8)atoi(num); //convierte la cadena en un numero de 8bits
return;
}
result = strcmp(ID_val, val02);
if(result==0)
{
val02_num = (int8)atoi(num); //convierte la cadena en un numero de 8bits
return;
}
Finalmente se utilizara el numero recibido para controlar el ancho de pulso de dos salidas PWM, CCP1 y CCP2 habilitando el timer2.
setup_timer_2(T2_DIV_BY_16,24,1);// señal de 12.5kHz o 80 us
setup_ccp1(CCP_PWM);//habilita el pin ccp1
setup_ccp2(CCP_PWM);//habilita el pin ccp2
while(TRUE)
{
set_pwm1_duty((int16)val01_num);// 100% duty clicle = numero 100
set_pwm2_duty((int16)val02_num);
}
}