Teste de Tela
Dependencies: BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG mbed
Diff: main.cpp
- Revision:
- 0:9b2b74c6af2f
- Child:
- 1:c04c41de6eef
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Jun 27 17:49:44 2017 +0000 @@ -0,0 +1,177 @@ +#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(); + } + } +}