Teste de Tela
Dependencies: BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG mbed
main.cpp
- Committer:
- marcusncunha
- Date:
- 2017-06-27
- Revision:
- 0:9b2b74c6af2f
- Child:
- 1:c04c41de6eef
File content as of revision 0:9b2b74c6af2f:
#include "mbed.h" #include "TS_DISCO_F746NG.h" #include "LCD_DISCO_F746NG.h" #include "codigoBotaoReset.h" #define TEMPO_PRESSIONADO_BOTAO 0.01000f LCD_DISCO_F746NG lcd; TS_DISCO_F746NG ts; TS_StateTypeDef TS_State; typedef struct{ uint16_t x; uint16_t y; uint16_t largura; uint16_t altura; }dadosRetanguloBase; typedef struct{ dadosRetanguloBase retanguloObjeto; uint16_t valor; bool updateFlag; }barra; typedef struct{ dadosRetanguloBase retanguloObjeto; bool isPressed; bool updateFlag; Timer depressTime; }botao; //Base do botão que é um retângulo desenhado dadosRetanguloBase baseBotaoReset = {24, 180, 125, 70}; dadosRetanguloBase baseBotaoAprender = {170, 180, 125, 70}; dadosRetanguloBase baseBotaoConfigurarVoltar = {436, 4, 40, 40}; //Criado cada botão com sua base/localização correspondente botao botaoReset = {baseBotaoReset, 0, 0}; botao botaoAprender = {baseBotaoAprender, 0, 0}; botao botaoConfigurarVoltar = {baseBotaoConfigurarVoltar, 0, 0}; void iniciarBotao(botao *botaoObjeto, TS_StateTypeDef *toqueTela){ bool isDentroBotaoX = 0; bool isDentroBotaoY = 0; uint16_t cliqueX = toqueTela->touchX[0]; uint16_t cliqueY = toqueTela->touchY[0]; //Testar se foi na área do botão em x e marca o flag if((cliqueX > botaoObjeto->retanguloObjeto.x) && (cliqueX < ( botaoObjeto->retanguloObjeto.x + botaoObjeto->retanguloObjeto.largura))){ isDentroBotaoX = 1; } //Testar se foi na área do botão em y e marca o flag if((cliqueY > botaoObjeto->retanguloObjeto.y) && (cliqueY < ( botaoObjeto->retanguloObjeto.y + botaoObjeto->retanguloObjeto.altura))){ isDentroBotaoY = 1; } //Testa se está dentro da área do botão XY if(isDentroBotaoX && isDentroBotaoY){ //Se ele não estava pressionado if(!(botaoObjeto->isPressed)){ botaoObjeto->depressTime.start(); botaoObjeto->isPressed = 1; lcd.SetTextColor(LCD_COLOR_DARKBLUE); lcd.FillRect(botaoObjeto->retanguloObjeto.x, botaoObjeto->retanguloObjeto.y, botaoObjeto->retanguloObjeto.largura, botaoObjeto->retanguloObjeto.altura); lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DrawRect(botaoObjeto->retanguloObjeto.x, botaoObjeto->retanguloObjeto.y, botaoObjeto->retanguloObjeto.largura, botaoObjeto->retanguloObjeto.altura); } }else{ //Se ele estava pressionado if((botaoObjeto->isPressed)){ botaoObjeto->depressTime.stop(); botaoObjeto->isPressed = 0; if(botaoObjeto->depressTime.read() > TEMPO_PRESSIONADO_BOTAO){ botaoObjeto->updateFlag = 1; } lcd.SetTextColor(LCD_COLOR_BLUE); lcd.FillRect(botaoObjeto->retanguloObjeto.x, botaoObjeto->retanguloObjeto.y, botaoObjeto->retanguloObjeto.largura, botaoObjeto->retanguloObjeto.altura); lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DrawRect(botaoObjeto->retanguloObjeto.x, botaoObjeto->retanguloObjeto.y, botaoObjeto->retanguloObjeto.largura, botaoObjeto->retanguloObjeto.altura); } } } void resetTela(){ lcd.SetFont(&Font24); lcd.Clear(LCD_COLOR_WHITE); lcd.SetBackColor(LCD_COLOR_WHITE); lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DrawRect(22, 18, 272, 147); lcd.SetTextColor(LCD_COLOR_RED); lcd.FillRect(baseBotaoReset.x, baseBotaoReset.y, baseBotaoReset.largura, baseBotaoReset.altura); lcd.SetTextColor(LCD_COLOR_GREEN); lcd.FillRect(baseBotaoAprender.x, baseBotaoAprender.y, baseBotaoAprender.largura, baseBotaoAprender.altura); lcd.SetTextColor(LCD_COLOR_GRAY); lcd.FillRect(baseBotaoConfigurarVoltar.x, baseBotaoConfigurarVoltar.y, baseBotaoConfigurarVoltar.largura, baseBotaoConfigurarVoltar.altura); lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DrawRect(baseBotaoReset.x, baseBotaoReset.y, baseBotaoReset.largura, baseBotaoReset.altura); lcd.DrawRect(baseBotaoAprender.x, baseBotaoAprender.y, baseBotaoAprender.largura, baseBotaoAprender.altura); lcd.DrawRect(baseBotaoConfigurarVoltar.x, baseBotaoConfigurarVoltar.y, baseBotaoConfigurarVoltar.largura, baseBotaoConfigurarVoltar.altura); } void aprender(uint8_t status){ uint8_t text[30]; sprintf((char*)text, "Aprender: %d", status + 1); lcd.DisplayStringAt(37, 83, (uint8_t *)text, LEFT_MODE); } //Funções chamadas pelo clique do botão(callback) void botaoReset_callback(){ lcd.DisplayStringAt(37, 83,(uint8_t *)"Reset ", LEFT_MODE); botaoReset.updateFlag = 0; } void botaoAprender_callback(){ lcd.DisplayStringAt(37, 83, (uint8_t *)"Aprender ", LEFT_MODE); botaoAprender.updateFlag = 0; lcd.DrawBitmap(0,0,(uint8_t *)img); } void botaoConfigurarVoltar_callback(){ lcd.DisplayStringAt(37, 83, (uint8_t *)"Configurar", LEFT_MODE); botaoConfigurarVoltar.updateFlag = 0; } void desenhaBotao(){ lcd.SetTextColor(LCD_COLOR_CYAN) lcd.FillCircle(330,76,32); } int main() { uint16_t x, y; uint8_t text[30]; uint8_t status = 0; uint8_t idx; uint8_t cleared = 0; uint8_t prev_nb_touches = 0; lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"CFM SOLIDTEC", CENTER_MODE); wait(1); //Desenha tela Inicial resetTela(); desenhaBotao(); while(1) { //Inicia os controles ts.ResetTouchData(&TS_State); ts.GetState(&TS_State); iniciarBotao(&botaoReset, &TS_State); iniciarBotao(&botaoAprender, &TS_State); iniciarBotao(&botaoConfigurarVoltar, &TS_State); if(status < 3){ aprender(status); } //Ação caso tenha clicado no botão if(botaoReset.updateFlag){ botaoReset_callback(); } if(botaoAprender.updateFlag){ botaoAprender_callback(); } if(botaoConfigurarVoltar.updateFlag){ status++; botaoConfigurarVoltar_callback(); } } }