Pantalla Touch NEXTION HMI «Transmisión», Pic C Compiler
Por
/
Programar una interfaz gráfica en una pantalla touch HMI NEXTION, para recibir datos del microcontrolador PIC por una comunicación UART. El objetivo es controlar el valor de diferentes objetos de la pantalla «progress bar», «gauge» y «number».
¿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.
Para el objeto «number» se envía el valor int16 del pin AN0, el valor máximo que se pude enviar es de 32 bits.
voidnumero(){
int16 num;
set_adc_channel (0);//Lectura Vout del potenciometro en PIN AN0delay_us(10);
num =read_adc();printf("num.val=%lu",num);//objname.val=valorputc(0xFF);//fin de recepcion de datos en pantalla nextionputc(0xFF);//putc(0xFF);//}
Para el objeto «progress bar» solo se puede enviar un valor de 0 a 100, por lo que se realiza una regla de 3 con el valor del pin AN0 que esta configurado a 10bits = 1023.
voidbarra(){
int16 pot;
int8 bar;
set_adc_channel (0);//Lectura Vout del potenciometro en PIN AN0delay_us(10);
pot =read_adc();// lectura del valor
bar =((int32)pot*100)/1023;// 0 a 1023 por 0 a 100printf("bar.val=%u",bar);//objname.val=valorputc(0xFF);//datos para recepcion en pantalla nextionputc(0xFF);//putc(0xFF);//}
Para el objeto «gauge» solo se puede enviar un valor de 0 a 360, por lo que se realiza una regla de 3 con el valor del pin AN0 que esta configurado a 10bits = 1023.
void linea (){
int16 lin;
set_adc_channel (0);//Lectura Vout del potenciometro en PIN AN0delay_us(10);
lin =read_adc();// lectura del valor
lin =((int32)lin*360)/1023;// 0 a 1023 por 0 a 360printf("lin.val=%lu",lin);//objname.val=valorputc(0xFF);//datos para recepcion en pantalla nextionputc(0xFF);//putc(0xFF);//}
#FUSES NOMCLR#use rs232(baud=9600, stop=1, parity=N, xmit=PIN_C6, rcv=PIN_C7, bits=8)voidnumero(){
int16 num;
set_adc_channel (0);//Lectura Vout del potenciometro en PIN AN0delay_us(10);
num =read_adc();printf("num.val=%lu",num);//objname.val=valorputc(0xFF);//fin de recepcion de datos en pantalla nextionputc(0xFF);//putc(0xFF);//}voidbarra(){
int16 pot;
int8 bar;
set_adc_channel (0);//Lectura Vout del potenciometro en PIN AN0delay_us(10);
pot =read_adc();// lectura del valor
bar =((int32)pot*100)/1023;// 0 a 1023 por 0 a 100printf("bar.val=%u",bar);//objname.val=valorputc(0xFF);//datos para recepcion en pantalla nextionputc(0xFF);//putc(0xFF);//}void linea (){
int16 lin;
set_adc_channel (0);//Lectura Vout del potenciometro en PIN AN0delay_us(10);
lin =read_adc();// lectura del valor
lin =((int32)lin*360)/1023;// 0 a 1023 por 0 a 360printf("lin.val=%lu",lin);//objname.val=valorputc(0xFF);//datos para recepcion en pantalla nextionputc(0xFF);//putc(0xFF);//}voidmain(){setup_adc(ADC_CLOCK_INTERNAL);while(TRUE){numero();delay_ms(20);barra();delay_ms(20);linea();delay_ms(20);}}