4.17 Ejemplo 15
Utilizar el panel táctil...
Un panel táctil es un panel fino, autoadhesivo y transparente, colocado sobre la pantalla de un LCD gráfico. Es muy sensible a la presión así que un suave toque provoca algunos cambios en la señal de salida. Hay diferentes tipos de paneles táctiles. El más sencillo es el panel táctil resistivo.
Un panel táctil está compuesto por dos láminas rígidas, formando una estructura de ‘sándwich’ que tiene capas resistivas en sus caras internas. La resistencia de estas capas no excede normalmente de 1K. Los lados opuestos de las láminas disponen de los contactos para acceder a un cable plano.

El procedimiento para determinar las coordenadas de la posición del panel que ha sido presionado se puede dividir en dos pasos. El primero es determinación de la coordenada X, y el segundo es de determinar la coordenada Y de la posición.
Para determinar la coordenada X, es necesario conectar el contacto izquierdo en la superficie A a la masa (tierra) y el contacto derecho a la fuente de alimentación. Esto permite obtener un divisor de voltaje al presionar el panel táctil. El valor de voltaje obtenido en el divisor se puede leer en el contacto inferior de la superficie B. El voltaje variará en el rango de 0V al voltaje suministrado por la fuente de alimentación y depende de la coordenada X. Si el punto está próximo al contacto izquierdo de la superficie A, el voltaje estará próximo a 0V.

Para la determinación de la coordenada Y, es necesario conectar el contacto inferior de la superficie B a masa (tierra), mientras que el contacto superior se conectará a la fuente de alimentación. En este caso, el voltaje se puede leer en el contacto izquierdo de la superficie A.
Para conectar un panel táctil al microcontrolador es necesario crear un circuito para el control del panel táctil. Por medio de este circuito, el microcontrolador conecta los contactos adecuados del panel táctil a masa y a la voltaje de alimentación (como describimos anteriormente) para determinar las coordenadas X y Y. El contacto inferior de la superficie B y el contacto izquierdo de la superficie A están conectados al convertidor A/D del microcontrolador. Las coordenadas X e Y se determinan midiendo el voltaje en los respectivos contactos. El software consiste en mostrar un menú en una pantalla LCD gráfica, conmutar de encendido a apagado del panel táctil (control del panel táctil) y leer los valores del convertidor A/D que representan realmente las coordenadas X e Y de la posición.
Una vez determinadas las coordenadas, es posible decidir qué es lo que deseamos que haga el microcontrolador. En este ejemplo se explica cómo conmutar entre encendido y apagado dos pines digitales del microcontrolador, conectados a los LEDs A y B.
En este ejemplo se utilizan las funciones que pertenecen a las librerías Glcd y ADC.
Teniendo en cuenta que la superficie del panel táctil es ligeramente mayor que la del LCD gráfico, en caso de requerir una mayor precisión en la determinación de las coordenadas, es necesario incluir el software de calibración del panel táctil.
'Cabecera******************************************************
program example_15 ' Nombre de programa
dim GLCD_DataPORT as byte at PORTD ' Conexiones del módulo Glcd
dim GLCD_CS1 as sbit at RB0_bit
GLCD_CS2 as sbit at RB1_bit
GLCD_RS as sbit at RB2_bit
GLCD_RW as sbit at RB3_bit
GLCD_EN as sbit at RB4_bit
GLCD_RST as sbit at RB5_bit
dim GLCD_CS1_Direction as sbit at TRISB0_bit
GLCD_CS2_Direction as sbit at TRISB1_bit
GLCD_RS_Direction as sbit at TRISB2_bit
GLCD_RW_Direction as sbit at TRISB3_bit
GLCD_EN_Direction as sbit at TRISB4_bit
GLCD_RST_Direction as sbit at TRISB5_bit ' Conexiones del módulo Glcd
dim x_coord, y_coord,
x_coord128, y_coord64 as longint ' Almacenar la posición de las coordenadas x e y
sub function GetX() as word ' Leer la coordenada X
PORTC.0 = 1 ' DRIVEA = 1 (electrodo izquierdo (LEFT) conectado, electrodo
' derecho (RIGHT) conectado, electrodo superior (TOP) desconectado)
PORTC.1 = 0 ' DRIVEB = 0 (electrodo inferior (BOTTOM) desconectado)
Delay_ms(5)
result = ADC_Read(0) ' LEER-X (BOTTOM)
end sub
sub function GetY() as word ' Leer la coordenada Y
PORTC.0 = 0 ' DRIVEA = 0 (electrodo izquierdo (LEFT) desconectado, electrodo
' derecho (RIGHT) desconectado, electrodo superior (TOP) conectado)
PORTC.1 = 1 ' DRIVEB = 1 (electrodo inferior (BOTTOM) conectado)
Delay_ms(5)
result = ADC_Read(1) ' LEER-X (LEFT)
end sub
main: ' Inicio de programa
PORTA = 0x00
TRISA = 0x03 ' RA0 y RA1 son entradas analógicas
ANSEL = 0x03
ANSELH = 0 ' Configurar otros pines analógicos como digitales de E/S
PORTC = 0
TRISC = 0 ' Pines del puerto PORTC se configuran como salida
Glcd_Init() ' Glcd_Init_EP5
Glcd_Set_Font(@font5x7, 5, 7, 32) ' Seleccionar el tamaño de fuente 5x7
Glcd_Fill(0) ' Borrar el GLCD
Glcd_Write_Text("TOUCHPANEL EXAMPLE",10,0,1)
Glcd_Write_Text("MIKROELEKTRONIKA",17,7,1)
Glcd_Rectangle(8,16,60,48,1) ' Visualizar 'dos botones' en el GLCD:
Glcd_Rectangle(68,16,120,48,1)
Glcd_Box(10,18,58,46,1)
Glcd_Box(70,18,118,46,1)
Glcd_Write_Text("BUTTON1",14,3,0)
Glcd_Write_Text("RC6 OFF",14,4,0)
Glcd_Write_Text("BUTTON2",74,3,0)
Glcd_Write_Text("RC7 OFF",74,4,0)
while TRUE ' Leer X-Y y convertirlo en la resolución de 128x64 píxeles
x_coord = GetX()
y_coord = GetY()
x_coord128 = (x_coord * 128) / 1024
y_coord64 = 64 -((y_coord *64) / 1024)
' Si BUTTON1 ha sido seleccionado:
if ((x_coord128 >= 10) and (x_coord128 <= 58) and (y_coord64 >= 18) and (y_coord64 <= 46)) then
if(PORTC.6 = 0) then
PORTC.6 = 1
Glcd_Write_Text("RC6 ON ",14,4,0)
else
PORTC.6 = 0
Glcd_Write_Text("RC6 OFF",14,4,0)
end if
end if
' Si BUTTON2 ha sido seleccionado:
if ((x_coord128 >= 70) and (x_coord128 <= 118) and (y_coord64 >= 18) and (y_coord64 <= 46)) then
if(PORTC.7 = 0) then
PORTC.7 = 1
Glcd_Write_Text("RC7 ON ",74,4,0)
else
PORTC.7 = 0
Glcd_Write_Text("RC7 OFF",74,4,0)
end if
end if
Delay_ms(100)
wend ' Mientras verdadero
end. ' Final de programa
Para que este ejemplo funcione apropiadamente, es necesario marcar las siguientes librerías en la ventana Library Manager antes de compilar el programa.