Teste de Tela

Dependencies:   BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG mbed

Committer:
marcusncunha
Date:
Fri Jun 30 20:22:56 2017 +0000
Revision:
1:c04c41de6eef
Parent:
0:9b2b74c6af2f
Child:
2:ae8636da1252
Teste

Who changed what in which revision?

UserRevisionLine numberNew contents of line
marcusncunha 0:9b2b74c6af2f 1 #include "mbed.h"
marcusncunha 0:9b2b74c6af2f 2 #include "TS_DISCO_F746NG.h"
marcusncunha 0:9b2b74c6af2f 3 #include "LCD_DISCO_F746NG.h"
marcusncunha 0:9b2b74c6af2f 4 #include "codigoBotaoReset.h"
marcusncunha 1:c04c41de6eef 5 #include "logo.h"
marcusncunha 0:9b2b74c6af2f 6 #define TEMPO_PRESSIONADO_BOTAO 0.01000f
marcusncunha 0:9b2b74c6af2f 7
marcusncunha 0:9b2b74c6af2f 8 LCD_DISCO_F746NG lcd;
marcusncunha 0:9b2b74c6af2f 9 TS_DISCO_F746NG ts;
marcusncunha 0:9b2b74c6af2f 10 TS_StateTypeDef TS_State;
marcusncunha 1:c04c41de6eef 11 Serial pc (USBTX, USBRX);
marcusncunha 0:9b2b74c6af2f 12
marcusncunha 0:9b2b74c6af2f 13 typedef struct{
marcusncunha 0:9b2b74c6af2f 14 uint16_t x;
marcusncunha 0:9b2b74c6af2f 15 uint16_t y;
marcusncunha 0:9b2b74c6af2f 16 uint16_t largura;
marcusncunha 0:9b2b74c6af2f 17 uint16_t altura;
marcusncunha 0:9b2b74c6af2f 18 }dadosRetanguloBase;
marcusncunha 0:9b2b74c6af2f 19
marcusncunha 0:9b2b74c6af2f 20
marcusncunha 0:9b2b74c6af2f 21 typedef struct{
marcusncunha 0:9b2b74c6af2f 22 dadosRetanguloBase retanguloObjeto;
marcusncunha 0:9b2b74c6af2f 23 uint16_t valor;
marcusncunha 0:9b2b74c6af2f 24 bool updateFlag;
marcusncunha 0:9b2b74c6af2f 25 }barra;
marcusncunha 0:9b2b74c6af2f 26
marcusncunha 0:9b2b74c6af2f 27 typedef struct{
marcusncunha 0:9b2b74c6af2f 28 dadosRetanguloBase retanguloObjeto;
marcusncunha 0:9b2b74c6af2f 29 bool isPressed;
marcusncunha 0:9b2b74c6af2f 30 bool updateFlag;
marcusncunha 0:9b2b74c6af2f 31 Timer depressTime;
marcusncunha 0:9b2b74c6af2f 32 }botao;
marcusncunha 0:9b2b74c6af2f 33
marcusncunha 0:9b2b74c6af2f 34 //Base do botão que é um retângulo desenhado
marcusncunha 0:9b2b74c6af2f 35 dadosRetanguloBase baseBotaoReset = {24, 180, 125, 70};
marcusncunha 0:9b2b74c6af2f 36 dadosRetanguloBase baseBotaoAprender = {170, 180, 125, 70};
marcusncunha 0:9b2b74c6af2f 37 dadosRetanguloBase baseBotaoConfigurarVoltar = {436, 4, 40, 40};
marcusncunha 0:9b2b74c6af2f 38
marcusncunha 0:9b2b74c6af2f 39 //Criado cada botão com sua base/localização correspondente
marcusncunha 0:9b2b74c6af2f 40 botao botaoReset = {baseBotaoReset, 0, 0};
marcusncunha 0:9b2b74c6af2f 41 botao botaoAprender = {baseBotaoAprender, 0, 0};
marcusncunha 0:9b2b74c6af2f 42 botao botaoConfigurarVoltar = {baseBotaoConfigurarVoltar, 0, 0};
marcusncunha 0:9b2b74c6af2f 43
marcusncunha 0:9b2b74c6af2f 44 void iniciarBotao(botao *botaoObjeto, TS_StateTypeDef *toqueTela){
marcusncunha 0:9b2b74c6af2f 45 bool isDentroBotaoX = 0;
marcusncunha 0:9b2b74c6af2f 46 bool isDentroBotaoY = 0;
marcusncunha 0:9b2b74c6af2f 47
marcusncunha 0:9b2b74c6af2f 48 uint16_t cliqueX = toqueTela->touchX[0];
marcusncunha 0:9b2b74c6af2f 49 uint16_t cliqueY = toqueTela->touchY[0];
marcusncunha 0:9b2b74c6af2f 50
marcusncunha 0:9b2b74c6af2f 51 //Testar se foi na área do botão em x e marca o flag
marcusncunha 0:9b2b74c6af2f 52 if((cliqueX > botaoObjeto->retanguloObjeto.x) && (cliqueX < ( botaoObjeto->retanguloObjeto.x + botaoObjeto->retanguloObjeto.largura))){
marcusncunha 0:9b2b74c6af2f 53 isDentroBotaoX = 1;
marcusncunha 0:9b2b74c6af2f 54 }
marcusncunha 0:9b2b74c6af2f 55
marcusncunha 0:9b2b74c6af2f 56 //Testar se foi na área do botão em y e marca o flag
marcusncunha 0:9b2b74c6af2f 57 if((cliqueY > botaoObjeto->retanguloObjeto.y) && (cliqueY < ( botaoObjeto->retanguloObjeto.y + botaoObjeto->retanguloObjeto.altura))){
marcusncunha 0:9b2b74c6af2f 58 isDentroBotaoY = 1;
marcusncunha 0:9b2b74c6af2f 59 }
marcusncunha 0:9b2b74c6af2f 60
marcusncunha 0:9b2b74c6af2f 61 //Testa se está dentro da área do botão XY
marcusncunha 0:9b2b74c6af2f 62 if(isDentroBotaoX && isDentroBotaoY){
marcusncunha 0:9b2b74c6af2f 63 //Se ele não estava pressionado
marcusncunha 0:9b2b74c6af2f 64 if(!(botaoObjeto->isPressed)){
marcusncunha 0:9b2b74c6af2f 65 botaoObjeto->depressTime.start();
marcusncunha 0:9b2b74c6af2f 66 botaoObjeto->isPressed = 1;
marcusncunha 0:9b2b74c6af2f 67 lcd.SetTextColor(LCD_COLOR_DARKBLUE);
marcusncunha 0:9b2b74c6af2f 68 lcd.FillRect(botaoObjeto->retanguloObjeto.x, botaoObjeto->retanguloObjeto.y, botaoObjeto->retanguloObjeto.largura, botaoObjeto->retanguloObjeto.altura);
marcusncunha 0:9b2b74c6af2f 69 lcd.SetTextColor(LCD_COLOR_BLACK);
marcusncunha 0:9b2b74c6af2f 70 lcd.DrawRect(botaoObjeto->retanguloObjeto.x, botaoObjeto->retanguloObjeto.y, botaoObjeto->retanguloObjeto.largura, botaoObjeto->retanguloObjeto.altura);
marcusncunha 0:9b2b74c6af2f 71 }
marcusncunha 0:9b2b74c6af2f 72 }else{
marcusncunha 0:9b2b74c6af2f 73 //Se ele estava pressionado
marcusncunha 0:9b2b74c6af2f 74 if((botaoObjeto->isPressed)){
marcusncunha 0:9b2b74c6af2f 75 botaoObjeto->depressTime.stop();
marcusncunha 0:9b2b74c6af2f 76 botaoObjeto->isPressed = 0;
marcusncunha 0:9b2b74c6af2f 77 if(botaoObjeto->depressTime.read() > TEMPO_PRESSIONADO_BOTAO){
marcusncunha 0:9b2b74c6af2f 78 botaoObjeto->updateFlag = 1;
marcusncunha 0:9b2b74c6af2f 79 }
marcusncunha 0:9b2b74c6af2f 80 lcd.SetTextColor(LCD_COLOR_BLUE);
marcusncunha 0:9b2b74c6af2f 81 lcd.FillRect(botaoObjeto->retanguloObjeto.x, botaoObjeto->retanguloObjeto.y, botaoObjeto->retanguloObjeto.largura, botaoObjeto->retanguloObjeto.altura);
marcusncunha 0:9b2b74c6af2f 82 lcd.SetTextColor(LCD_COLOR_BLACK);
marcusncunha 0:9b2b74c6af2f 83 lcd.DrawRect(botaoObjeto->retanguloObjeto.x, botaoObjeto->retanguloObjeto.y, botaoObjeto->retanguloObjeto.largura, botaoObjeto->retanguloObjeto.altura);
marcusncunha 0:9b2b74c6af2f 84 }
marcusncunha 0:9b2b74c6af2f 85 }
marcusncunha 0:9b2b74c6af2f 86 }
marcusncunha 0:9b2b74c6af2f 87
marcusncunha 0:9b2b74c6af2f 88 void resetTela(){
marcusncunha 0:9b2b74c6af2f 89 lcd.SetFont(&Font24);
marcusncunha 0:9b2b74c6af2f 90 lcd.Clear(LCD_COLOR_WHITE);
marcusncunha 0:9b2b74c6af2f 91 lcd.SetBackColor(LCD_COLOR_WHITE);
marcusncunha 0:9b2b74c6af2f 92 lcd.SetTextColor(LCD_COLOR_BLACK);
marcusncunha 0:9b2b74c6af2f 93 lcd.DrawRect(22, 18, 272, 147);
marcusncunha 0:9b2b74c6af2f 94 lcd.SetTextColor(LCD_COLOR_RED);
marcusncunha 0:9b2b74c6af2f 95 lcd.FillRect(baseBotaoReset.x, baseBotaoReset.y, baseBotaoReset.largura, baseBotaoReset.altura);
marcusncunha 0:9b2b74c6af2f 96 lcd.SetTextColor(LCD_COLOR_GREEN);
marcusncunha 0:9b2b74c6af2f 97 lcd.FillRect(baseBotaoAprender.x, baseBotaoAprender.y, baseBotaoAprender.largura, baseBotaoAprender.altura);
marcusncunha 0:9b2b74c6af2f 98 lcd.SetTextColor(LCD_COLOR_GRAY);
marcusncunha 0:9b2b74c6af2f 99 lcd.FillRect(baseBotaoConfigurarVoltar.x, baseBotaoConfigurarVoltar.y, baseBotaoConfigurarVoltar.largura, baseBotaoConfigurarVoltar.altura);
marcusncunha 0:9b2b74c6af2f 100 lcd.SetTextColor(LCD_COLOR_BLACK);
marcusncunha 0:9b2b74c6af2f 101 lcd.DrawRect(baseBotaoReset.x, baseBotaoReset.y, baseBotaoReset.largura, baseBotaoReset.altura);
marcusncunha 0:9b2b74c6af2f 102 lcd.DrawRect(baseBotaoAprender.x, baseBotaoAprender.y, baseBotaoAprender.largura, baseBotaoAprender.altura);
marcusncunha 0:9b2b74c6af2f 103 lcd.DrawRect(baseBotaoConfigurarVoltar.x, baseBotaoConfigurarVoltar.y, baseBotaoConfigurarVoltar.largura, baseBotaoConfigurarVoltar.altura);
marcusncunha 0:9b2b74c6af2f 104 }
marcusncunha 0:9b2b74c6af2f 105
marcusncunha 0:9b2b74c6af2f 106 void aprender(uint8_t status){
marcusncunha 0:9b2b74c6af2f 107 uint8_t text[30];
marcusncunha 0:9b2b74c6af2f 108 sprintf((char*)text, "Aprender: %d", status + 1);
marcusncunha 0:9b2b74c6af2f 109 lcd.DisplayStringAt(37, 83, (uint8_t *)text, LEFT_MODE);
marcusncunha 0:9b2b74c6af2f 110 }
marcusncunha 0:9b2b74c6af2f 111
marcusncunha 0:9b2b74c6af2f 112 //Funções chamadas pelo clique do botão(callback)
marcusncunha 0:9b2b74c6af2f 113 void botaoReset_callback(){
marcusncunha 0:9b2b74c6af2f 114 lcd.DisplayStringAt(37, 83,(uint8_t *)"Reset ", LEFT_MODE);
marcusncunha 0:9b2b74c6af2f 115 botaoReset.updateFlag = 0;
marcusncunha 0:9b2b74c6af2f 116 }
marcusncunha 0:9b2b74c6af2f 117
marcusncunha 0:9b2b74c6af2f 118 void botaoAprender_callback(){
marcusncunha 0:9b2b74c6af2f 119 lcd.DisplayStringAt(37, 83, (uint8_t *)"Aprender ", LEFT_MODE);
marcusncunha 0:9b2b74c6af2f 120 botaoAprender.updateFlag = 0;
marcusncunha 1:c04c41de6eef 121 //lcd.DrawBitmap(0,0,(uint8_t *)img);
marcusncunha 0:9b2b74c6af2f 122 }
marcusncunha 0:9b2b74c6af2f 123
marcusncunha 0:9b2b74c6af2f 124 void botaoConfigurarVoltar_callback(){
marcusncunha 0:9b2b74c6af2f 125 lcd.DisplayStringAt(37, 83, (uint8_t *)"Configurar", LEFT_MODE);
marcusncunha 0:9b2b74c6af2f 126 botaoConfigurarVoltar.updateFlag = 0;
marcusncunha 0:9b2b74c6af2f 127
marcusncunha 0:9b2b74c6af2f 128 }
marcusncunha 0:9b2b74c6af2f 129
marcusncunha 1:c04c41de6eef 130 void desenharImagem(){
marcusncunha 1:c04c41de6eef 131 uint16_t larg = 100;
marcusncunha 1:c04c41de6eef 132 uint16_t alt = 32;
marcusncunha 1:c04c41de6eef 133 int i;
marcusncunha 1:c04c41de6eef 134 int j;
marcusncunha 1:c04c41de6eef 135 int contador = 0;
marcusncunha 1:c04c41de6eef 136 for (i=0; i<alt; i++){
marcusncunha 1:c04c41de6eef 137 for (j=0; j<larg; j++){
marcusncunha 1:c04c41de6eef 138 lcd.DrawPixel(j,i,LOGOSOLID[contador]);
marcusncunha 1:c04c41de6eef 139 //pc.printf("%d;",LOGOSOLID[contador]);
marcusncunha 1:c04c41de6eef 140 contador++;
marcusncunha 1:c04c41de6eef 141 }
marcusncunha 1:c04c41de6eef 142 }
marcusncunha 0:9b2b74c6af2f 143 }
marcusncunha 0:9b2b74c6af2f 144
marcusncunha 1:c04c41de6eef 145
marcusncunha 0:9b2b74c6af2f 146 int main()
marcusncunha 0:9b2b74c6af2f 147 {
marcusncunha 0:9b2b74c6af2f 148 uint16_t x, y;
marcusncunha 0:9b2b74c6af2f 149 uint8_t text[30];
marcusncunha 0:9b2b74c6af2f 150 uint8_t status = 0;
marcusncunha 0:9b2b74c6af2f 151 uint8_t idx;
marcusncunha 0:9b2b74c6af2f 152 uint8_t cleared = 0;
marcusncunha 0:9b2b74c6af2f 153 uint8_t prev_nb_touches = 0;
marcusncunha 0:9b2b74c6af2f 154
marcusncunha 0:9b2b74c6af2f 155 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"CFM SOLIDTEC", CENTER_MODE);
marcusncunha 0:9b2b74c6af2f 156 wait(1);
marcusncunha 0:9b2b74c6af2f 157
marcusncunha 0:9b2b74c6af2f 158 //Desenha tela Inicial
marcusncunha 0:9b2b74c6af2f 159 resetTela();
marcusncunha 1:c04c41de6eef 160 lcd.Clear(LCD_COLOR_RED);
marcusncunha 1:c04c41de6eef 161 desenharImagem();
marcusncunha 1:c04c41de6eef 162 pc.printf("%d",LCD_COLOR_WHITE);
marcusncunha 0:9b2b74c6af2f 163
marcusncunha 0:9b2b74c6af2f 164 while(1) {
marcusncunha 0:9b2b74c6af2f 165 //Inicia os controles
marcusncunha 0:9b2b74c6af2f 166 ts.ResetTouchData(&TS_State);
marcusncunha 0:9b2b74c6af2f 167 ts.GetState(&TS_State);
marcusncunha 0:9b2b74c6af2f 168 iniciarBotao(&botaoReset, &TS_State);
marcusncunha 0:9b2b74c6af2f 169 iniciarBotao(&botaoAprender, &TS_State);
marcusncunha 0:9b2b74c6af2f 170 iniciarBotao(&botaoConfigurarVoltar, &TS_State);
marcusncunha 0:9b2b74c6af2f 171
marcusncunha 0:9b2b74c6af2f 172 if(status < 3){
marcusncunha 0:9b2b74c6af2f 173 aprender(status);
marcusncunha 0:9b2b74c6af2f 174
marcusncunha 0:9b2b74c6af2f 175 }
marcusncunha 0:9b2b74c6af2f 176
marcusncunha 0:9b2b74c6af2f 177
marcusncunha 0:9b2b74c6af2f 178 //Ação caso tenha clicado no botão
marcusncunha 0:9b2b74c6af2f 179 if(botaoReset.updateFlag){
marcusncunha 0:9b2b74c6af2f 180 botaoReset_callback();
marcusncunha 1:c04c41de6eef 181 pc.printf("Botao Reset");
marcusncunha 0:9b2b74c6af2f 182 }
marcusncunha 0:9b2b74c6af2f 183 if(botaoAprender.updateFlag){
marcusncunha 0:9b2b74c6af2f 184 botaoAprender_callback();
marcusncunha 1:c04c41de6eef 185 pc.printf("Botao Aprender");
marcusncunha 0:9b2b74c6af2f 186 }
marcusncunha 0:9b2b74c6af2f 187 if(botaoConfigurarVoltar.updateFlag){
marcusncunha 0:9b2b74c6af2f 188 status++;
marcusncunha 0:9b2b74c6af2f 189 botaoConfigurarVoltar_callback();
marcusncunha 1:c04c41de6eef 190 pc.printf("Botao Configurar/Voltar");
marcusncunha 0:9b2b74c6af2f 191 }
marcusncunha 0:9b2b74c6af2f 192 }
marcusncunha 0:9b2b74c6af2f 193 }