Teste de Tela

Dependencies:   BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG mbed

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();
+        }
+    }
+}