Teste de Tela
Dependencies: BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG mbed
main.cpp@1:c04c41de6eef, 2017-06-30 (annotated)
- 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?
User | Revision | Line number | New 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 | } |