Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG mbed
main.cpp@0:9b2b74c6af2f, 2017-06-27 (annotated)
- Committer:
- marcusncunha
- Date:
- Tue Jun 27 17:49:44 2017 +0000
- Revision:
- 0:9b2b74c6af2f
- Child:
- 1:c04c41de6eef
Inicio
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 | 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 | } |