Arduino Display Touch Screen
Arduino Display Touch Screen
Intenção da Aula
1. Apresentar o display touch screen
Características:
• Dimensão tela: 2,4 polegadas
• Slot para cartão MicroSD
• Cor LCD: 65K
• Controlador: ILI9325
• Resolução: 240 x 320
•Touchscreen: 4 fios resistivos touchscreen
•Interface: 8 bit dados, mais 4 linhas de controle
•Tensão de operação: 3,3-5V
•Dimensões: 71 x 52 x 7mm
Demonstração
Seu e-mail
Em www.fernandok.com
Bibliotecas
Adicione biblioteca “Adafruit_GFX”.
void setup() {
Serial.begin(9600);
}
void loop() {
TSPoint touchPoint = ts.getPoint();//pega o touch
(x,y,z=pressao)
Serial.print("X: "); Serial.println(touchPoint.x);
Serial.print("Y: "); Serial.println(touchPoint.y);
delay(1000);
}
Funções
A seguir vamos dar uma olhada em algumas funções gráficas que as bibliotecas nos oferecem.
1. drawPixel
A função drawPixel, é responsável por pintar um único ponto na tela no ponto dado.
void drawPixel(int16_t x, int16_t y, uint16_t color);
2. drawLine
A função drawLine, é responsável por desenhar uma linha a partir de dois pontos.
void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color);
3. drawFastVLine
A função drawFastVLine, é responsável por desenhar uma linha vertical a partir de um ponto e uma altura.
void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color);
4. drawFastHLine
A função drawFastHLine, é responsável por desenhar uma linha horizontal a partir de um ponto e uma
largura.
void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color);
Funções
5. drawRect
A função drawRect, é responsável por desenhar um retângulo na tela, passando um ponto de origem, sua
altura e largura.
void drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
6. fillRect
A função fillRect, é a mesma que drawRect, porém, o retângulo será preenchido com a cor dada.
void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
7. drawRoundRect
A função drawRoundRect, é a mesma que drawRect, porém, o retângulo terá as bordas arredondadas.
void drawRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h,int16_t radius, uint16_t color);
8. fillRoundRect
A função fillRoundRect, é a mesma que drawRoundRect, porém, o retângulo será preenchido com a cor
dada.
void fillRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h,int16_t radius, uint16_t color);
Funções
9. drawTriangle
A função drawTriangle, é responsável por desenhar um triângulo na tela, passando o ponto dos 3 vértices.
void drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color);
10. fillTriangle
A função fillTriangle, é a mesma que drawTriangle, porém, o triângulo será preenchido com a cor dada.
void fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color);
11. drawCircle
A função drawCircle, é responsável por desenhar um círculo a partir de um ponto origem e um raio.
14. setCursor
A função setCursor, é responsável por posicionar o cursor para escrita em um ponto dado.
void setCursor(int16_t x, int16_t y);
15. setTextColor
A função setTextColor, é responsável por atribuir uma cor ao texto que será escrito. Temos duas maneiras de
utilizá-la:
void setTextColor(uint16_t c); //configura a cor apenas da escrita
void setTextColor(uint16_t c, uint16_t bg); //configura a cor da escrita e a cor do fundo
16. setTextSize
A função setTextSize, é responsável por atribuir um tamanho para o texto que será escrito.
void setTextSize(uint8_t s);
Funções
17. setTextWrap
A função setTextWrap, é responsável por quebrar a linha caso chega ao limite da tela.
void setTextWrap(boolean w);
18. setRotation
A função setRotation, é responsável por rotacionar a tela (landscape, portrait).
void setRotation(uint8_t r); //0 (padrão),1,2,3
Exemplo
Criaremos uma programa no qual utilizaremos a maior parte dos recursos que o display
nos proporciona.
Vamos escrever algumas strings em diferentes tamanhos, criar três figuras geométricas e
pegar o evento de toque sobre elas, a cada vez que tocarmos em uma das figuras, teremos
o feedback do nome da figura logo abaixo delas.
Bibliotecas
Primeiramente vamos definir as bibliotecas que utilizaremos.
#include <SWTFT.h> //responsável pela parte gráfica
#include <TouchScreen.h> //responsável por pegar os toques na tela
#include <SPI.h> //comunicação com o display
#include <Wire.h> //comunicação com o display
#include "math.h" //calcular potencia
Defines
Definiremos algumas macros para os pinos e valores importantes que utilizaremos.
//Portas de leitura das coordenadas do touch
#define YP A1 // Y+
#define XM A2 // X-
#define YM 7 // Y-
#define XP 6 // X+
//valores encontrados através da calibração do touch
//faça um código simples para imprimir os valores (x,y) a cada toque
//então encontre os valores nas extremidades max/min (x,y)
#define TS_MINX 130
#define TS_MINY 80
#define TS_MAXX 900
#define TS_MAXY 900
//tamanho dos textos
#define TEXT_SIZE_L 3
#define TEXT_SIZE_M 2
#define TEXT_SIZE_S 1
//posicionamento dos textos de feedback
#define FEEDBACK_LABEL_X 10
#define FEEDBACK_LABEL_Y 200
#define FEEDBACK_TOUCH_X 120
#define FEEDBACK_TOUCH_Y 200
//valores para detectar a pressão do toque
#define MINPRESSURE 10
#define MAXPRESSURE 1000
Defines
void setup() {
Serial.begin(9600);
//reseta o objeto da lib grafica
tft.reset();
//inicializa objeto controlador da lib grafica
tft.begin();
delay(500);
//rotaciona a tela para landscape
tft.setRotation(1);
//pinta a tela toda de preto
tft.fillScreen(BLACK);
//chama a função para iniciar nossas configurações
initialSettings();
}
Loop
No loop, vamos pegar o ponto no qual tocamos a tela e verificamos se o toque ocorreu em uma das
figuras.
void loop() {
TSPoint touchPoint = ts.getPoint();//pega o touch (x,y,z=pressao)
pinMode(XM, OUTPUT);
pinMode(YP, OUTPUT);
//mapeia o ponto de touch para o (x,y) grafico
// o fato de termos rotacionado a tela para landscape implica no X receber o mapeamento de Y
TSPoint p;
p.x = map(touchPoint.y, TS_MINY, TS_MAXY, 0, 320);
p.y = map(touchPoint.x, TS_MINX, TS_MAXX, 240, 0);
//verifica se a pressão no toque foi suficiente
if (touchPoint.z > MINPRESSURE && touchPoint.z < MAXPRESSURE) {
//verifica se tocou no retangulo
if(pointInRect(p)) {
writeShape("Rect");
}
//verifica se tocou no triangulo
else if(pointInsideTriangle(TSPoint(110,150,0), TSPoint(150,100,0), TSPoint(190,150,0), p)) {
writeShape("Triangle");
}
//verifica se tocou no circulo
else if(pointInCircle(p)) {
writeShape("Circle");
}
}
}
Verificação se tocamos no círculo
/*
Desenha na tela os elementos
*/
void initialSettings()
{
tft.setTextColor(WHITE);
tft.setTextSize(TEXT_SIZE_S);
tft.println("ACESSE");
tft.setTextColor(YELLOW);
tft.setTextSize(TEXT_SIZE_M);
tft.println("MEU BLOG");
tft.setTextColor(GREEN);
tft.setTextSize(TEXT_SIZE_L);
tft.println("FERNANDOK.COM");
createRect();
createTriangle();
createCircle();
tft.setCursor(FEEDBACK_LABEL_X, FEEDBACK_LABEL_Y);
tft.setTextColor(CYAN);
tft.setTextSize(TEXT_SIZE_L);
tft.println("SHAPE: ");
}
Funções de criação das formas geométricas
//cria um retangulo com origem (x,y) = (10,100)
//width = 80 e height = 50
void createRect()
{
tft.fillRect(10, 100, 80, 50, RED);
tft.drawRect(10, 100, 80, 50, WHITE);
}
if(ABC == ACP+ABP+CPB){
return true;
}
return false;
}
// Função que calcula a area de um triangulo com base nos pontos x,y
float triangleArea(TSPoint a, TSPoint b, TSPoint c){
return fabs(((b.x - a.x)*(c.y - a.y) - (c.x - a.x) * (b.y - a.y))/2);
}
Função para imprimir o nome do objeto tocado
Em www.fernandok.com
Download arquivos PDF e INO do código fonte
28