MARCUS NEVES CUNHA / Mbed 2 deprecated CFM_V1

Dependencies:   BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG mbed

Committer:
marcusncunha
Date:
Tue Jun 27 17:49:44 2017 +0000
Revision:
0:9b2b74c6af2f
Child:
1:c04c41de6eef
Inicio

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 0:9b2b74c6af2f 5
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 0:9b2b74c6af2f 11
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 0:9b2b74c6af2f 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 0:9b2b74c6af2f 130 void desenhaBotao(){
marcusncunha 0:9b2b74c6af2f 131 lcd.SetTextColor(LCD_COLOR_CYAN)
marcusncunha 0:9b2b74c6af2f 132 lcd.FillCircle(330,76,32);
marcusncunha 0:9b2b74c6af2f 133 }
marcusncunha 0:9b2b74c6af2f 134
marcusncunha 0:9b2b74c6af2f 135 int main()
marcusncunha 0:9b2b74c6af2f 136 {
marcusncunha 0:9b2b74c6af2f 137 uint16_t x, y;
marcusncunha 0:9b2b74c6af2f 138 uint8_t text[30];
marcusncunha 0:9b2b74c6af2f 139 uint8_t status = 0;
marcusncunha 0:9b2b74c6af2f 140 uint8_t idx;
marcusncunha 0:9b2b74c6af2f 141 uint8_t cleared = 0;
marcusncunha 0:9b2b74c6af2f 142 uint8_t prev_nb_touches = 0;
marcusncunha 0:9b2b74c6af2f 143
marcusncunha 0:9b2b74c6af2f 144 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"CFM SOLIDTEC", CENTER_MODE);
marcusncunha 0:9b2b74c6af2f 145 wait(1);
marcusncunha 0:9b2b74c6af2f 146
marcusncunha 0:9b2b74c6af2f 147 //Desenha tela Inicial
marcusncunha 0:9b2b74c6af2f 148 resetTela();
marcusncunha 0:9b2b74c6af2f 149 desenhaBotao();
marcusncunha 0:9b2b74c6af2f 150
marcusncunha 0:9b2b74c6af2f 151 while(1) {
marcusncunha 0:9b2b74c6af2f 152 //Inicia os controles
marcusncunha 0:9b2b74c6af2f 153 ts.ResetTouchData(&TS_State);
marcusncunha 0:9b2b74c6af2f 154 ts.GetState(&TS_State);
marcusncunha 0:9b2b74c6af2f 155 iniciarBotao(&botaoReset, &TS_State);
marcusncunha 0:9b2b74c6af2f 156 iniciarBotao(&botaoAprender, &TS_State);
marcusncunha 0:9b2b74c6af2f 157 iniciarBotao(&botaoConfigurarVoltar, &TS_State);
marcusncunha 0:9b2b74c6af2f 158
marcusncunha 0:9b2b74c6af2f 159 if(status < 3){
marcusncunha 0:9b2b74c6af2f 160 aprender(status);
marcusncunha 0:9b2b74c6af2f 161
marcusncunha 0:9b2b74c6af2f 162 }
marcusncunha 0:9b2b74c6af2f 163
marcusncunha 0:9b2b74c6af2f 164
marcusncunha 0:9b2b74c6af2f 165 //Ação caso tenha clicado no botão
marcusncunha 0:9b2b74c6af2f 166 if(botaoReset.updateFlag){
marcusncunha 0:9b2b74c6af2f 167 botaoReset_callback();
marcusncunha 0:9b2b74c6af2f 168 }
marcusncunha 0:9b2b74c6af2f 169 if(botaoAprender.updateFlag){
marcusncunha 0:9b2b74c6af2f 170 botaoAprender_callback();
marcusncunha 0:9b2b74c6af2f 171 }
marcusncunha 0:9b2b74c6af2f 172 if(botaoConfigurarVoltar.updateFlag){
marcusncunha 0:9b2b74c6af2f 173 status++;
marcusncunha 0:9b2b74c6af2f 174 botaoConfigurarVoltar_callback();
marcusncunha 0:9b2b74c6af2f 175 }
marcusncunha 0:9b2b74c6af2f 176 }
marcusncunha 0:9b2b74c6af2f 177 }