STM32F7-Discovery - TFT + Touch and Count down Timer Ver.1.0.5
Dependencies: BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG mbed
Fork of F746NG_TIMER by
main.cpp@4:0d9d4ea58fdb, 2016-03-04 (annotated)
- Committer:
- emcu
- Date:
- Fri Mar 04 10:20:28 2016 +0000
- Revision:
- 4:0d9d4ea58fdb
- Parent:
- 3:a99d1624ff73
STM32F7-Discovery - TFT + Touch and Count down Timer; Ver.1.0.5
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
emcu | 0:ef97dc9b062e | 1 | /* |
emcu | 0:ef97dc9b062e | 2 | |
emcu | 2:a448d80c91b5 | 3 | Countdown Timer from 1 to 199 minutes |
emcu | 0:ef97dc9b062e | 4 | |
emcu | 0:ef97dc9b062e | 5 | STM32F7-Discovery Demo by www.emcu.it |
emcu | 0:ef97dc9b062e | 6 | |
emcu | 0:ef97dc9b062e | 7 | Date: Feb.2016 |
emcu | 4:0d9d4ea58fdb | 8 | Ver.: 1.0.5 |
emcu | 0:ef97dc9b062e | 9 | |
emcu | 0:ef97dc9b062e | 10 | * |
emcu | 0:ef97dc9b062e | 11 | * Permission is hereby granted, free of charge, to any person obtaining a copy of this software |
emcu | 0:ef97dc9b062e | 12 | * and associated documentation files (the "Software"), to deal in the Software without |
emcu | 0:ef97dc9b062e | 13 | * restriction, including without limitation the rights to use, copy, modify, merge, publish, |
emcu | 0:ef97dc9b062e | 14 | * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the |
emcu | 0:ef97dc9b062e | 15 | * Software is furnished to do so, subject to the following conditions: |
emcu | 0:ef97dc9b062e | 16 | * |
emcu | 0:ef97dc9b062e | 17 | * The above copyright notice and this permission notice shall be included in all copies or |
emcu | 0:ef97dc9b062e | 18 | * substantial portions of the Software. |
emcu | 0:ef97dc9b062e | 19 | * |
emcu | 0:ef97dc9b062e | 20 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING |
emcu | 0:ef97dc9b062e | 21 | * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
emcu | 0:ef97dc9b062e | 22 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
emcu | 0:ef97dc9b062e | 23 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
emcu | 0:ef97dc9b062e | 24 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
emcu | 0:ef97dc9b062e | 25 | * |
emcu | 0:ef97dc9b062e | 26 | |
emcu | 0:ef97dc9b062e | 27 | */ |
emcu | 0:ef97dc9b062e | 28 | |
emcu | 0:ef97dc9b062e | 29 | #include "TS_DISCO_F746NG.h" |
emcu | 0:ef97dc9b062e | 30 | #include "LCD_DISCO_F746NG.h" |
emcu | 1:478d8983fdde | 31 | #include <string> |
emcu | 1:478d8983fdde | 32 | |
emcu | 1:478d8983fdde | 33 | // LCD color |
emcu | 1:478d8983fdde | 34 | #define LCD_BLUE ((uint32_t)0xFF0000FF) |
emcu | 1:478d8983fdde | 35 | #define LCD_GREEN ((uint32_t)0xFF00FF00) |
emcu | 1:478d8983fdde | 36 | #define LCD_RED ((uint32_t)0xFFFF0000) |
emcu | 1:478d8983fdde | 37 | #define LCD_CYAN ((uint32_t)0xFF00FFFF) |
emcu | 1:478d8983fdde | 38 | #define LCD_MAGENTA ((uint32_t)0xFFFF00FF) |
emcu | 1:478d8983fdde | 39 | #define LCD_YELLOW ((uint32_t)0xFFFFFF00) |
emcu | 1:478d8983fdde | 40 | #define LCD_LIGHTBLUE ((uint32_t)0xFF8080FF) |
emcu | 1:478d8983fdde | 41 | #define LCD_LIGHTGREEN ((uint32_t)0xFF80FF80) |
emcu | 1:478d8983fdde | 42 | #define LCD_LIGHTRED ((uint32_t)0xFFFF8080) |
emcu | 1:478d8983fdde | 43 | #define LCD_LIGHTCYAN ((uint32_t)0xFF80FFFF) |
emcu | 1:478d8983fdde | 44 | #define LCD_LIGHTMAGENTA ((uint32_t)0xFFFF80FF) |
emcu | 1:478d8983fdde | 45 | #define LCD_LIGHTYELLOW ((uint32_t)0xFFFFFF80) |
emcu | 1:478d8983fdde | 46 | #define LCD_DARKBLUE ((uint32_t)0xFF000080) |
emcu | 1:478d8983fdde | 47 | #define LCD_COLOR_DARKGREEN ((uint32_t)0xFF008000) |
emcu | 1:478d8983fdde | 48 | #define LCD_COLOR_DARKRED ((uint32_t)0xFF800000) |
emcu | 1:478d8983fdde | 49 | #define LCD_COLOR_DARKCYAN ((uint32_t)0xFF008080) |
emcu | 1:478d8983fdde | 50 | #define LCD_COLOR_DARKMAGENTA ((uint32_t)0xFF800080) |
emcu | 1:478d8983fdde | 51 | #define LCD_COLOR_DARKYELLOW ((uint32_t)0xFF808000) |
emcu | 1:478d8983fdde | 52 | #define LCD_COLOR_WHITE ((uint32_t)0xFFFFFFFF) |
emcu | 1:478d8983fdde | 53 | #define LCD_COLOR_LIGHTGRAY ((uint32_t)0xFFD3D3D3) |
emcu | 1:478d8983fdde | 54 | #define LCD_COLOR_GRAY ((uint32_t)0xFF808080) |
emcu | 1:478d8983fdde | 55 | #define LCD_COLOR_DARKGRAY ((uint32_t)0xFF404040) |
emcu | 1:478d8983fdde | 56 | #define LCD_COLOR_BLACK ((uint32_t)0xFF000000) |
emcu | 1:478d8983fdde | 57 | #define LCD_COLOR_BROWN ((uint32_t)0xFFA52A2A) |
emcu | 1:478d8983fdde | 58 | #define LCD_COLOR_ORANGE ((uint32_t)0xFFFFA500) |
emcu | 1:478d8983fdde | 59 | #define LCD_COLOR_TRANSPARENT ((uint32_t)0xFF000000) |
emcu | 0:ef97dc9b062e | 60 | |
emcu | 0:ef97dc9b062e | 61 | LCD_DISCO_F746NG lcd; |
emcu | 0:ef97dc9b062e | 62 | TS_DISCO_F746NG ts; |
emcu | 0:ef97dc9b062e | 63 | DigitalOut led1(LED1); |
emcu | 0:ef97dc9b062e | 64 | |
emcu | 0:ef97dc9b062e | 65 | int pos = 1; |
emcu | 1:478d8983fdde | 66 | // uint8_t min = 45; |
emcu | 1:478d8983fdde | 67 | uint8_t _min = 45; |
emcu | 0:ef97dc9b062e | 68 | uint8_t Mem_min = 45; |
emcu | 0:ef97dc9b062e | 69 | uint16_t xpos=20, ypos=5; |
emcu | 0:ef97dc9b062e | 70 | int n=0; |
emcu | 1:478d8983fdde | 71 | int tcount = 45; |
emcu | 1:478d8983fdde | 72 | |
emcu | 0:ef97dc9b062e | 73 | |
emcu | 0:ef97dc9b062e | 74 | void Logo(void); |
emcu | 1:478d8983fdde | 75 | void FillBox(uint32_t color, int x, int y, int larg, int alt); |
emcu | 1:478d8983fdde | 76 | void DisplayBigNumber(uint8_t Numero); |
emcu | 1:478d8983fdde | 77 | void VisNumber(int x, int y, uint32_t color, uint8_t v, uint32_t colorBackground); |
emcu | 1:478d8983fdde | 78 | void draw1(int x, int y, uint32_t color); |
emcu | 1:478d8983fdde | 79 | void draw2(int x, int y, uint32_t color); |
emcu | 1:478d8983fdde | 80 | void draw3(int x, int y, uint32_t color); |
emcu | 1:478d8983fdde | 81 | void draw4(int x, int y, uint32_t color); |
emcu | 1:478d8983fdde | 82 | void draw5(int x, int y, uint32_t color); |
emcu | 1:478d8983fdde | 83 | void draw6(int x, int y, uint32_t color); |
emcu | 1:478d8983fdde | 84 | void draw7(int x, int y, uint32_t color); |
emcu | 1:478d8983fdde | 85 | void draw8(int x, int y, uint32_t color); |
emcu | 1:478d8983fdde | 86 | void draw9(int x, int y, uint32_t color); |
emcu | 1:478d8983fdde | 87 | void draw0(int x, int y, uint32_t color); |
emcu | 0:ef97dc9b062e | 88 | |
emcu | 0:ef97dc9b062e | 89 | int main() |
emcu | 0:ef97dc9b062e | 90 | { |
emcu | 0:ef97dc9b062e | 91 | led1 = 1; |
emcu | 0:ef97dc9b062e | 92 | |
emcu | 0:ef97dc9b062e | 93 | TS_StateTypeDef TS_State; |
emcu | 0:ef97dc9b062e | 94 | |
emcu | 0:ef97dc9b062e | 95 | uint16_t x, y; |
emcu | 0:ef97dc9b062e | 96 | uint8_t idx; |
emcu | 0:ef97dc9b062e | 97 | uint8_t text[30]; |
emcu | 0:ef97dc9b062e | 98 | int Count=0; |
emcu | 0:ef97dc9b062e | 99 | int Minuti=0; |
emcu | 0:ef97dc9b062e | 100 | int n=0; |
emcu | 0:ef97dc9b062e | 101 | |
emcu | 0:ef97dc9b062e | 102 | |
emcu | 0:ef97dc9b062e | 103 | lcd.SetBackColor(LCD_COLOR_BLUE); |
emcu | 0:ef97dc9b062e | 104 | lcd.SetTextColor(LCD_COLOR_WHITE); |
emcu | 0:ef97dc9b062e | 105 | |
emcu | 0:ef97dc9b062e | 106 | lcd.DisplayStringAt(0, LINE(0), (uint8_t *)" ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 107 | lcd.DisplayStringAt(0, LINE(1), (uint8_t *)" By: www.emcu.it ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 108 | lcd.DisplayStringAt(0, LINE(2), (uint8_t *)" ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 109 | lcd.DisplayStringAt(0, LINE(3), (uint8_t *)" Written using mBed ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 110 | lcd.DisplayStringAt(0, LINE(4), (uint8_t *)" ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 111 | lcd.DisplayStringAt(0, LINE(5), (uint8_t *)" Touch the screen ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 112 | lcd.DisplayStringAt(0, LINE(6), (uint8_t *)" for continue. ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 113 | lcd.DisplayStringAt(0, LINE(7), (uint8_t *)" ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 114 | |
emcu | 1:478d8983fdde | 115 | /* |
emcu | 1:478d8983fdde | 116 | draw1(10, 200, LCD_YELLOW); |
emcu | 1:478d8983fdde | 117 | draw2(60, 200, LCD_GREEN); |
emcu | 1:478d8983fdde | 118 | draw3(110, 200, LCD_RED); |
emcu | 1:478d8983fdde | 119 | draw4(160, 200, LCD_BLUE); |
emcu | 1:478d8983fdde | 120 | draw5(210, 200, LCD_CYAN); |
emcu | 1:478d8983fdde | 121 | draw6(260, 200, LCD_YELLOW); |
emcu | 1:478d8983fdde | 122 | draw7(310, 200, LCD_GREEN); |
emcu | 1:478d8983fdde | 123 | draw8(360, 200, LCD_RED); |
emcu | 1:478d8983fdde | 124 | draw9(410, 200, LCD_BLUE); |
emcu | 1:478d8983fdde | 125 | draw0(10, 200, LCD_CYAN); |
emcu | 1:478d8983fdde | 126 | */ |
emcu | 1:478d8983fdde | 127 | |
emcu | 0:ef97dc9b062e | 128 | ts.GetState(&TS_State); |
emcu | 0:ef97dc9b062e | 129 | while(TS_State.touchDetected == 0) |
emcu | 0:ef97dc9b062e | 130 | { |
emcu | 0:ef97dc9b062e | 131 | ts.GetState(&TS_State); |
emcu | 0:ef97dc9b062e | 132 | } |
emcu | 0:ef97dc9b062e | 133 | |
emcu | 0:ef97dc9b062e | 134 | // ReStart: |
emcu | 0:ef97dc9b062e | 135 | |
emcu | 0:ef97dc9b062e | 136 | while(1) |
emcu | 0:ef97dc9b062e | 137 | { |
emcu | 0:ef97dc9b062e | 138 | lcd.SetFont(&Font24); |
emcu | 0:ef97dc9b062e | 139 | lcd.SetBackColor(LCD_COLOR_BLUE); |
emcu | 0:ef97dc9b062e | 140 | lcd.SetTextColor(LCD_COLOR_WHITE); |
emcu | 0:ef97dc9b062e | 141 | lcd.DisplayStringAt(0, LINE(0), (uint8_t *)" By: www.emcu.it ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 142 | lcd.DisplayStringAt(0, LINE(1), (uint8_t *)" Touch the screen for: ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 143 | lcd.DisplayStringAt(0, LINE(2), (uint8_t *)" LEFT for decrease MIN ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 144 | lcd.DisplayStringAt(0, LINE(3), (uint8_t *)" RIGHT for increase MIN ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 145 | lcd.DisplayStringAt(0, LINE(4), (uint8_t *)" REDbox for start TIMER ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 146 | lcd.DisplayStringAt(0, LINE(5), (uint8_t *)" ", CENTER_MODE); |
emcu | 3:a99d1624ff73 | 147 | lcd.SetBackColor(LCD_COLOR_BLACK); |
emcu | 3:a99d1624ff73 | 148 | lcd.SetTextColor(LCD_COLOR_BLACK); |
emcu | 1:478d8983fdde | 149 | lcd.DisplayStringAt(0, LINE(6), (uint8_t *)" ", CENTER_MODE); |
emcu | 1:478d8983fdde | 150 | lcd.DisplayStringAt(0, LINE(7), (uint8_t *)" ", CENTER_MODE); |
emcu | 3:a99d1624ff73 | 151 | lcd.SetBackColor(LCD_COLOR_BLUE); |
emcu | 3:a99d1624ff73 | 152 | lcd.SetTextColor(LCD_COLOR_WHITE); |
emcu | 1:478d8983fdde | 153 | sprintf((char*)text, " MIN: %d ", _min); |
emcu | 0:ef97dc9b062e | 154 | lcd.DisplayStringAt(xpos, LINE(7), (uint8_t *)&text, LEFT_MODE); |
emcu | 0:ef97dc9b062e | 155 | |
emcu | 0:ef97dc9b062e | 156 | // Draw the RED box that indicate the area to touch for start Timer |
emcu | 4:0d9d4ea58fdb | 157 | FillBox(0xFFFF0000, (lcd.GetXSize()/2)-25, 200, 50, 50); |
emcu | 0:ef97dc9b062e | 158 | |
emcu | 0:ef97dc9b062e | 159 | // Whait touch |
emcu | 0:ef97dc9b062e | 160 | ts.GetState(&TS_State); |
emcu | 0:ef97dc9b062e | 161 | while(TS_State.touchDetected == 0) |
emcu | 0:ef97dc9b062e | 162 | { |
emcu | 0:ef97dc9b062e | 163 | ts.GetState(&TS_State); |
emcu | 0:ef97dc9b062e | 164 | } |
emcu | 0:ef97dc9b062e | 165 | |
emcu | 0:ef97dc9b062e | 166 | |
emcu | 0:ef97dc9b062e | 167 | // Increment |
emcu | 0:ef97dc9b062e | 168 | ts.GetState(&TS_State); |
emcu | 0:ef97dc9b062e | 169 | if ((TS_State.touchDetected) && (TS_State.touchX[0] > 400)) |
emcu | 0:ef97dc9b062e | 170 | { |
emcu | 1:478d8983fdde | 171 | _min++; |
emcu | 2:a448d80c91b5 | 172 | if (_min>199) |
emcu | 2:a448d80c91b5 | 173 | _min=199; |
emcu | 0:ef97dc9b062e | 174 | lcd.SetBackColor(LCD_COLOR_BLUE); |
emcu | 0:ef97dc9b062e | 175 | lcd.SetTextColor(LCD_COLOR_WHITE); |
emcu | 1:478d8983fdde | 176 | sprintf((char*)text, " MIN: %d ", _min); |
emcu | 0:ef97dc9b062e | 177 | lcd.DisplayStringAt(xpos, LINE(7), (uint8_t *)&text, LEFT_MODE); |
emcu | 0:ef97dc9b062e | 178 | } |
emcu | 0:ef97dc9b062e | 179 | // Decrement |
emcu | 0:ef97dc9b062e | 180 | ts.GetState(&TS_State); |
emcu | 0:ef97dc9b062e | 181 | if ((TS_State.touchDetected) && (TS_State.touchX[0] < 200)) |
emcu | 0:ef97dc9b062e | 182 | { |
emcu | 1:478d8983fdde | 183 | _min--; |
emcu | 1:478d8983fdde | 184 | if (_min<1) |
emcu | 1:478d8983fdde | 185 | _min=1; |
emcu | 0:ef97dc9b062e | 186 | lcd.SetBackColor(LCD_COLOR_BLUE); |
emcu | 0:ef97dc9b062e | 187 | lcd.SetTextColor(LCD_COLOR_WHITE); |
emcu | 1:478d8983fdde | 188 | sprintf((char*)text, " MIN: %d ", _min); |
emcu | 0:ef97dc9b062e | 189 | lcd.DisplayStringAt(xpos, LINE(7), (uint8_t *)&text, LEFT_MODE); |
emcu | 0:ef97dc9b062e | 190 | } |
emcu | 0:ef97dc9b062e | 191 | |
emcu | 0:ef97dc9b062e | 192 | // Whait touch |
emcu | 0:ef97dc9b062e | 193 | ts.GetState(&TS_State); |
emcu | 0:ef97dc9b062e | 194 | while(TS_State.touchDetected == 0) |
emcu | 0:ef97dc9b062e | 195 | { |
emcu | 0:ef97dc9b062e | 196 | ts.GetState(&TS_State); |
emcu | 0:ef97dc9b062e | 197 | } |
emcu | 0:ef97dc9b062e | 198 | |
emcu | 0:ef97dc9b062e | 199 | wait(0.1); |
emcu | 0:ef97dc9b062e | 200 | |
emcu | 0:ef97dc9b062e | 201 | // Draw the RED box that indicate the area to touch for start Timer |
emcu | 4:0d9d4ea58fdb | 202 | FillBox(0xFFFF0000, (lcd.GetXSize()/2)-25, 200, 50, 50); |
emcu | 0:ef97dc9b062e | 203 | |
emcu | 0:ef97dc9b062e | 204 | Count=0; |
emcu | 0:ef97dc9b062e | 205 | |
emcu | 0:ef97dc9b062e | 206 | // Get the touch position for Start Timer |
emcu | 0:ef97dc9b062e | 207 | for (idx = 0; idx < TS_State.touchDetected; idx++) |
emcu | 0:ef97dc9b062e | 208 | { |
emcu | 0:ef97dc9b062e | 209 | x = TS_State.touchX[idx]; |
emcu | 0:ef97dc9b062e | 210 | y = TS_State.touchY[idx]; |
emcu | 4:0d9d4ea58fdb | 211 | if ((x>((lcd.GetXSize()/2)-25)) & (x<((lcd.GetXSize()/2)+25)) && (y>175 & y<225)) |
emcu | 0:ef97dc9b062e | 212 | { |
emcu | 0:ef97dc9b062e | 213 | lcd.Clear(LCD_COLOR_BLACK); |
emcu | 0:ef97dc9b062e | 214 | lcd.SetFont(&Font24); |
emcu | 0:ef97dc9b062e | 215 | lcd.SetBackColor(LCD_COLOR_BLACK); |
emcu | 0:ef97dc9b062e | 216 | lcd.SetTextColor(LCD_COLOR_WHITE); |
emcu | 1:478d8983fdde | 217 | sprintf((char*)text, " Minutes that remain: %d ", _min); |
emcu | 0:ef97dc9b062e | 218 | lcd.DisplayStringAt(xpos, LINE(5), (uint8_t *)&text, LEFT_MODE); |
emcu | 0:ef97dc9b062e | 219 | Logo(); |
emcu | 0:ef97dc9b062e | 220 | |
emcu | 1:478d8983fdde | 221 | tcount=_min; |
emcu | 0:ef97dc9b062e | 222 | tcount=tcount*60; |
emcu | 1:478d8983fdde | 223 | Mem_min=_min; |
emcu | 0:ef97dc9b062e | 224 | Minuti=0; |
emcu | 0:ef97dc9b062e | 225 | for (n=0; n<tcount; n++) |
emcu | 0:ef97dc9b062e | 226 | { |
emcu | 0:ef97dc9b062e | 227 | wait(1); // 60 == 1min |
emcu | 0:ef97dc9b062e | 228 | |
emcu | 0:ef97dc9b062e | 229 | // Show an * for highlight that the program is running |
emcu | 0:ef97dc9b062e | 230 | Count++; |
emcu | 0:ef97dc9b062e | 231 | if (Count == 1) |
emcu | 0:ef97dc9b062e | 232 | lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"*", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 233 | if (Count == 2) |
emcu | 0:ef97dc9b062e | 234 | { |
emcu | 0:ef97dc9b062e | 235 | lcd.DisplayStringAt(0, LINE(2), (uint8_t *)" ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 236 | Count=0; |
emcu | 0:ef97dc9b062e | 237 | } |
emcu | 0:ef97dc9b062e | 238 | |
emcu | 0:ef97dc9b062e | 239 | // Counter for minutes |
emcu | 0:ef97dc9b062e | 240 | Minuti++; |
emcu | 0:ef97dc9b062e | 241 | if (Minuti==60) |
emcu | 0:ef97dc9b062e | 242 | { |
emcu | 1:478d8983fdde | 243 | _min--; |
emcu | 0:ef97dc9b062e | 244 | Minuti=0; |
emcu | 0:ef97dc9b062e | 245 | } |
emcu | 0:ef97dc9b062e | 246 | else; |
emcu | 0:ef97dc9b062e | 247 | |
emcu | 0:ef97dc9b062e | 248 | // Display the time remaining |
emcu | 1:478d8983fdde | 249 | if (_min < 10) |
emcu | 0:ef97dc9b062e | 250 | { |
emcu | 0:ef97dc9b062e | 251 | //lcd.Clear(LCD_COLOR_RED); |
emcu | 0:ef97dc9b062e | 252 | lcd.SetFont(&Font24); |
emcu | 0:ef97dc9b062e | 253 | lcd.SetBackColor(LCD_COLOR_RED); |
emcu | 0:ef97dc9b062e | 254 | lcd.SetTextColor(LCD_COLOR_WHITE); |
emcu | 1:478d8983fdde | 255 | sprintf((char*)text, " Minutes that remain: %d ", _min); |
emcu | 0:ef97dc9b062e | 256 | lcd.DisplayStringAt(xpos, LINE(5), (uint8_t *)&text, LEFT_MODE); |
emcu | 3:a99d1624ff73 | 257 | if (Count == 0) |
emcu | 4:0d9d4ea58fdb | 258 | // Clear 1° cifra |
emcu | 3:a99d1624ff73 | 259 | FillBox(LCD_COLOR_BLACK, 300, 200, 40, 70); |
emcu | 3:a99d1624ff73 | 260 | else |
emcu | 3:a99d1624ff73 | 261 | DisplayBigNumber(_min); |
emcu | 0:ef97dc9b062e | 262 | Logo(); |
emcu | 0:ef97dc9b062e | 263 | } |
emcu | 0:ef97dc9b062e | 264 | else |
emcu | 0:ef97dc9b062e | 265 | { |
emcu | 0:ef97dc9b062e | 266 | //lcd.Clear(LCD_COLOR_BLACK); |
emcu | 0:ef97dc9b062e | 267 | lcd.SetFont(&Font24); |
emcu | 0:ef97dc9b062e | 268 | lcd.SetBackColor(LCD_COLOR_BLACK); |
emcu | 0:ef97dc9b062e | 269 | lcd.SetTextColor(LCD_COLOR_WHITE); |
emcu | 1:478d8983fdde | 270 | sprintf((char*)text, " Minutes that remain: %d ", _min); |
emcu | 0:ef97dc9b062e | 271 | lcd.DisplayStringAt(xpos, LINE(5), (uint8_t *)&text, LEFT_MODE); |
emcu | 1:478d8983fdde | 272 | DisplayBigNumber(_min); |
emcu | 0:ef97dc9b062e | 273 | Logo(); |
emcu | 0:ef97dc9b062e | 274 | } |
emcu | 0:ef97dc9b062e | 275 | } |
emcu | 0:ef97dc9b062e | 276 | |
emcu | 1:478d8983fdde | 277 | _min=Mem_min; |
emcu | 0:ef97dc9b062e | 278 | lcd.SetFont(&Font24); |
emcu | 0:ef97dc9b062e | 279 | |
emcu | 0:ef97dc9b062e | 280 | lcd.Clear(LCD_COLOR_BLACK); |
emcu | 0:ef97dc9b062e | 281 | lcd.SetFont(&Font24); |
emcu | 0:ef97dc9b062e | 282 | |
emcu | 0:ef97dc9b062e | 283 | // Highlight the end of time |
emcu | 0:ef97dc9b062e | 284 | |
emcu | 0:ef97dc9b062e | 285 | // Waiting Touch the screen for restart the program |
emcu | 0:ef97dc9b062e | 286 | ts.GetState(&TS_State); |
emcu | 0:ef97dc9b062e | 287 | while(TS_State.touchDetected == 0) |
emcu | 0:ef97dc9b062e | 288 | { |
emcu | 0:ef97dc9b062e | 289 | lcd.Clear(LCD_COLOR_RED); |
emcu | 0:ef97dc9b062e | 290 | lcd.SetBackColor(LCD_COLOR_RED); |
emcu | 0:ef97dc9b062e | 291 | lcd.SetTextColor(LCD_COLOR_WHITE); |
emcu | 0:ef97dc9b062e | 292 | lcd.DisplayStringAt(0, LINE(2), (uint8_t *)" ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 293 | lcd.DisplayStringAt(0, LINE(3), (uint8_t *)" END time... ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 294 | lcd.DisplayStringAt(0, LINE(4), (uint8_t *)" STOP the presentation !!! ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 295 | lcd.DisplayStringAt(0, LINE(5), (uint8_t *)" ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 296 | lcd.DisplayStringAt(0, LINE(6), (uint8_t *)" ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 297 | lcd.DisplayStringAt(0, LINE(7), (uint8_t *)" Touch screen to restart ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 298 | lcd.DisplayStringAt(0, LINE(8), (uint8_t *)" ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 299 | wait(0.5); |
emcu | 0:ef97dc9b062e | 300 | |
emcu | 0:ef97dc9b062e | 301 | lcd.Clear(LCD_COLOR_BLUE); |
emcu | 0:ef97dc9b062e | 302 | lcd.SetBackColor(LCD_COLOR_BLUE); |
emcu | 0:ef97dc9b062e | 303 | lcd.SetTextColor(LCD_COLOR_WHITE); |
emcu | 0:ef97dc9b062e | 304 | lcd.DisplayStringAt(0, LINE(2), (uint8_t *)" ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 305 | lcd.DisplayStringAt(0, LINE(3), (uint8_t *)" END time... ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 306 | lcd.DisplayStringAt(0, LINE(4), (uint8_t *)" STOP the presentation !!! ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 307 | lcd.DisplayStringAt(0, LINE(5), (uint8_t *)" ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 308 | lcd.DisplayStringAt(0, LINE(6), (uint8_t *)" ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 309 | lcd.DisplayStringAt(0, LINE(7), (uint8_t *)" Touch screen to restart ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 310 | lcd.DisplayStringAt(0, LINE(8), (uint8_t *)" ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 311 | wait(0.5); |
emcu | 0:ef97dc9b062e | 312 | |
emcu | 0:ef97dc9b062e | 313 | ts.GetState(&TS_State); |
emcu | 0:ef97dc9b062e | 314 | } |
emcu | 0:ef97dc9b062e | 315 | |
emcu | 0:ef97dc9b062e | 316 | |
emcu | 0:ef97dc9b062e | 317 | |
emcu | 0:ef97dc9b062e | 318 | lcd.Clear(LCD_COLOR_BLACK); |
emcu | 0:ef97dc9b062e | 319 | lcd.SetTextColor(LCD_COLOR_WHITE); |
emcu | 0:ef97dc9b062e | 320 | lcd.DisplayStringAt(0, LINE(2), (uint8_t *)" ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 321 | lcd.DisplayStringAt(0, LINE(3), (uint8_t *)" ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 322 | lcd.DisplayStringAt(0, LINE(4), (uint8_t *)" Remove your finger from ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 323 | lcd.DisplayStringAt(0, LINE(5), (uint8_t *)" the screen ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 324 | lcd.DisplayStringAt(0, LINE(6), (uint8_t *)" ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 325 | lcd.DisplayStringAt(0, LINE(7), (uint8_t *)" ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 326 | lcd.DisplayStringAt(0, LINE(8), (uint8_t *)" ", CENTER_MODE); |
emcu | 0:ef97dc9b062e | 327 | // Whait remove touch |
emcu | 0:ef97dc9b062e | 328 | ts.GetState(&TS_State); |
emcu | 0:ef97dc9b062e | 329 | while(TS_State.touchDetected == 1) |
emcu | 0:ef97dc9b062e | 330 | { |
emcu | 0:ef97dc9b062e | 331 | ts.GetState(&TS_State); |
emcu | 0:ef97dc9b062e | 332 | } |
emcu | 0:ef97dc9b062e | 333 | lcd.Clear(LCD_COLOR_BLACK); |
emcu | 0:ef97dc9b062e | 334 | |
emcu | 0:ef97dc9b062e | 335 | // goto ReStart; |
emcu | 0:ef97dc9b062e | 336 | } |
emcu | 0:ef97dc9b062e | 337 | } |
emcu | 0:ef97dc9b062e | 338 | } |
emcu | 0:ef97dc9b062e | 339 | } |
emcu | 0:ef97dc9b062e | 340 | |
emcu | 1:478d8983fdde | 341 | |
emcu | 1:478d8983fdde | 342 | |
emcu | 1:478d8983fdde | 343 | void DisplayBigNumber(uint8_t Numero) |
emcu | 1:478d8983fdde | 344 | { |
emcu | 1:478d8983fdde | 345 | uint8_t v=0; |
emcu | 1:478d8983fdde | 346 | uint8_t mv=0; |
emcu | 1:478d8983fdde | 347 | |
emcu | 1:478d8983fdde | 348 | if (Numero >= 100) |
emcu | 1:478d8983fdde | 349 | { |
emcu | 1:478d8983fdde | 350 | draw1(200, 200, LCD_YELLOW); // Display 1 pos. x=200 y=200 |
emcu | 1:478d8983fdde | 351 | v = Numero - 100; |
emcu | 1:478d8983fdde | 352 | v = (Numero - 100) / 10; // Display second number pos.x=250 y=200 |
emcu | 1:478d8983fdde | 353 | mv = v; |
emcu | 1:478d8983fdde | 354 | VisNumber(250, 200, LCD_YELLOW, v, LCD_COLOR_BLACK); |
emcu | 1:478d8983fdde | 355 | |
emcu | 1:478d8983fdde | 356 | |
emcu | 1:478d8983fdde | 357 | v = (Numero - 100) - (mv * 10); // Display third number pos.300 y=200 |
emcu | 1:478d8983fdde | 358 | VisNumber(300, 200, LCD_YELLOW, v, LCD_COLOR_BLACK); |
emcu | 1:478d8983fdde | 359 | } |
emcu | 1:478d8983fdde | 360 | else // Number < 100 |
emcu | 1:478d8983fdde | 361 | { |
emcu | 4:0d9d4ea58fdb | 362 | // Clear 3° cifra |
emcu | 1:478d8983fdde | 363 | FillBox(LCD_COLOR_BLACK, 200, 200, 40, 70); |
emcu | 1:478d8983fdde | 364 | |
emcu | 1:478d8983fdde | 365 | if (Numero >= 10) |
emcu | 1:478d8983fdde | 366 | { |
emcu | 1:478d8983fdde | 367 | v = Numero / 10; |
emcu | 1:478d8983fdde | 368 | mv = v; |
emcu | 4:0d9d4ea58fdb | 369 | VisNumber(250, 200, LCD_YELLOW, v, LCD_COLOR_BLACK); // Vis. 2° cifra |
emcu | 1:478d8983fdde | 370 | |
emcu | 1:478d8983fdde | 371 | v = Numero - (mv * 10); |
emcu | 4:0d9d4ea58fdb | 372 | VisNumber(300, 200, LCD_YELLOW, v, LCD_COLOR_BLACK); // Vis. 3° cifra |
emcu | 1:478d8983fdde | 373 | } |
emcu | 2:a448d80c91b5 | 374 | else |
emcu | 1:478d8983fdde | 375 | { |
emcu | 4:0d9d4ea58fdb | 376 | // Clear 2° cifra |
emcu | 2:a448d80c91b5 | 377 | FillBox(LCD_COLOR_BLACK, 250, 200, 40, 70); |
emcu | 4:0d9d4ea58fdb | 378 | VisNumber(300, 200, LCD_YELLOW, Numero, LCD_COLOR_BLACK); // Vis. 3° cifra |
emcu | 1:478d8983fdde | 379 | } |
emcu | 1:478d8983fdde | 380 | } |
emcu | 1:478d8983fdde | 381 | |
emcu | 1:478d8983fdde | 382 | } |
emcu | 1:478d8983fdde | 383 | |
emcu | 1:478d8983fdde | 384 | void VisNumber(int x, int y, uint32_t color, uint8_t v, uint32_t colorBackground) |
emcu | 1:478d8983fdde | 385 | { |
emcu | 1:478d8983fdde | 386 | // Clear Position |
emcu | 1:478d8983fdde | 387 | FillBox(colorBackground, x, y, 40, 70); |
emcu | 1:478d8983fdde | 388 | |
emcu | 1:478d8983fdde | 389 | switch ( v ) |
emcu | 1:478d8983fdde | 390 | { |
emcu | 1:478d8983fdde | 391 | case 1: |
emcu | 1:478d8983fdde | 392 | draw1(x, y, color); // Display 1 |
emcu | 1:478d8983fdde | 393 | break; |
emcu | 1:478d8983fdde | 394 | case 2: |
emcu | 1:478d8983fdde | 395 | draw2(x, y, color); // Display 2 |
emcu | 1:478d8983fdde | 396 | break; |
emcu | 1:478d8983fdde | 397 | case 3: |
emcu | 1:478d8983fdde | 398 | draw3(x, y, color); // Display 3 |
emcu | 1:478d8983fdde | 399 | break; |
emcu | 1:478d8983fdde | 400 | case 4: |
emcu | 1:478d8983fdde | 401 | draw4(x, y, color); // Display 4 |
emcu | 1:478d8983fdde | 402 | break; |
emcu | 1:478d8983fdde | 403 | case 5: |
emcu | 1:478d8983fdde | 404 | draw5(x, y, color); // Display 5 |
emcu | 1:478d8983fdde | 405 | break; |
emcu | 1:478d8983fdde | 406 | case 6: |
emcu | 1:478d8983fdde | 407 | draw6(x, y, color); // Display 6 |
emcu | 1:478d8983fdde | 408 | break; |
emcu | 1:478d8983fdde | 409 | case 7: |
emcu | 1:478d8983fdde | 410 | draw7(x, y, color); // Display 7 |
emcu | 1:478d8983fdde | 411 | break; |
emcu | 1:478d8983fdde | 412 | case 8: |
emcu | 1:478d8983fdde | 413 | draw8(x, y, color); // Display 8 |
emcu | 1:478d8983fdde | 414 | break; |
emcu | 1:478d8983fdde | 415 | case 9: |
emcu | 1:478d8983fdde | 416 | draw9(x, y, color); // Display 9 |
emcu | 1:478d8983fdde | 417 | break; |
emcu | 1:478d8983fdde | 418 | case 0: |
emcu | 1:478d8983fdde | 419 | draw0(x, y, color); // Display 0 |
emcu | 1:478d8983fdde | 420 | break; |
emcu | 1:478d8983fdde | 421 | default: |
emcu | 1:478d8983fdde | 422 | // Code |
emcu | 1:478d8983fdde | 423 | break; |
emcu | 1:478d8983fdde | 424 | } |
emcu | 1:478d8983fdde | 425 | } |
emcu | 1:478d8983fdde | 426 | |
emcu | 0:ef97dc9b062e | 427 | void Logo(void) |
emcu | 0:ef97dc9b062e | 428 | { |
emcu | 0:ef97dc9b062e | 429 | lcd.SetFont(&Font16); |
emcu | 0:ef97dc9b062e | 430 | lcd.SetBackColor(LCD_COLOR_BLACK); |
emcu | 0:ef97dc9b062e | 431 | lcd.SetTextColor(LCD_COLOR_WHITE); |
emcu | 0:ef97dc9b062e | 432 | lcd.DisplayStringAt(0, LINE(0), (uint8_t *)" By: www.emcu.it", LEFT_MODE); |
emcu | 0:ef97dc9b062e | 433 | lcd.SetFont(&Font24); |
emcu | 0:ef97dc9b062e | 434 | } |
emcu | 0:ef97dc9b062e | 435 | |
emcu | 1:478d8983fdde | 436 | // void FillBox(string color, int x, int y, int larg, int alt) |
emcu | 1:478d8983fdde | 437 | void FillBox(uint32_t color, int x, int y, int larg, int alt) |
emcu | 0:ef97dc9b062e | 438 | { |
emcu | 0:ef97dc9b062e | 439 | // Draw the RED box that indicate the area to touch for start Timer |
emcu | 1:478d8983fdde | 440 | // lcd.SetTextColor(LCD_COLOR_RED); |
emcu | 1:478d8983fdde | 441 | lcd.SetTextColor(color); |
emcu | 0:ef97dc9b062e | 442 | lcd.FillRect(x, y, larg, alt); |
emcu | 0:ef97dc9b062e | 443 | } |
emcu | 0:ef97dc9b062e | 444 | |
emcu | 1:478d8983fdde | 445 | void draw1(int x, int y, uint32_t color) |
emcu | 1:478d8983fdde | 446 | { |
emcu | 1:478d8983fdde | 447 | FillBox(color, x+20, y, 10, 70); |
emcu | 1:478d8983fdde | 448 | FillBox(color, x+10, y+60, 30, 10); // *** |
emcu | 1:478d8983fdde | 449 | FillBox(color, x+10, y+10, 10, 10); |
emcu | 1:478d8983fdde | 450 | FillBox(color, x, y+20, 10, 10); |
emcu | 1:478d8983fdde | 451 | } |
emcu | 1:478d8983fdde | 452 | |
emcu | 1:478d8983fdde | 453 | void draw2(int x, int y, uint32_t color) |
emcu | 1:478d8983fdde | 454 | { |
emcu | 1:478d8983fdde | 455 | FillBox(color, x, y, 40, 10); |
emcu | 1:478d8983fdde | 456 | FillBox(color, x+30, y+10, 10, 20); |
emcu | 1:478d8983fdde | 457 | FillBox(color, x+10, y+30, 20, 10); |
emcu | 1:478d8983fdde | 458 | FillBox(color, x, y+40, 10, 20); |
emcu | 1:478d8983fdde | 459 | FillBox(color, x, y+60, 40, 10); |
emcu | 1:478d8983fdde | 460 | } |
emcu | 1:478d8983fdde | 461 | |
emcu | 1:478d8983fdde | 462 | void draw3(int x, int y, uint32_t color) |
emcu | 1:478d8983fdde | 463 | { |
emcu | 1:478d8983fdde | 464 | FillBox(color, x, y, 40, 10); |
emcu | 1:478d8983fdde | 465 | FillBox(color, x+30, y+10, 10, 60); |
emcu | 1:478d8983fdde | 466 | FillBox(color, x+10, y+30, 30, 10); |
emcu | 1:478d8983fdde | 467 | FillBox(color, x, y+60, 40, 10); |
emcu | 1:478d8983fdde | 468 | } |
emcu | 1:478d8983fdde | 469 | |
emcu | 1:478d8983fdde | 470 | void draw4(int x, int y, uint32_t color) |
emcu | 1:478d8983fdde | 471 | { |
emcu | 1:478d8983fdde | 472 | FillBox(color, x, y, 10, 60); |
emcu | 1:478d8983fdde | 473 | FillBox(color, x, y+50, 40, 10); |
emcu | 1:478d8983fdde | 474 | FillBox(color, x+20, y+40, 10, 30); |
emcu | 1:478d8983fdde | 475 | } |
emcu | 1:478d8983fdde | 476 | |
emcu | 1:478d8983fdde | 477 | void draw5(int x, int y, uint32_t color) |
emcu | 1:478d8983fdde | 478 | { |
emcu | 1:478d8983fdde | 479 | FillBox(color, x, y, 40, 10); |
emcu | 1:478d8983fdde | 480 | FillBox(color, x, y, 10, 40); |
emcu | 1:478d8983fdde | 481 | FillBox(color, x, y+30, 40, 10); |
emcu | 1:478d8983fdde | 482 | FillBox(color, x+30, y+30, 10, 40); |
emcu | 1:478d8983fdde | 483 | FillBox(color, x, y+60, 40, 10); |
emcu | 1:478d8983fdde | 484 | } |
emcu | 1:478d8983fdde | 485 | |
emcu | 1:478d8983fdde | 486 | void draw6(int x, int y, uint32_t color) |
emcu | 1:478d8983fdde | 487 | { |
emcu | 1:478d8983fdde | 488 | FillBox(color, x, y, 40, 10); |
emcu | 1:478d8983fdde | 489 | FillBox(color, x, y, 10, 70); |
emcu | 1:478d8983fdde | 490 | FillBox(color, x, y+30, 40, 10); |
emcu | 1:478d8983fdde | 491 | FillBox(color, x+30, y+30, 10, 40); |
emcu | 1:478d8983fdde | 492 | FillBox(color, x, y+60, 40, 10); |
emcu | 1:478d8983fdde | 493 | } |
emcu | 1:478d8983fdde | 494 | |
emcu | 1:478d8983fdde | 495 | void draw7(int x, int y, uint32_t color) |
emcu | 1:478d8983fdde | 496 | { |
emcu | 1:478d8983fdde | 497 | FillBox(color, x, y, 30, 10); |
emcu | 1:478d8983fdde | 498 | FillBox(color, x+20, y, 10, 70); |
emcu | 1:478d8983fdde | 499 | FillBox(color, x+10, y+30, 30, 10); |
emcu | 1:478d8983fdde | 500 | } |
emcu | 1:478d8983fdde | 501 | |
emcu | 1:478d8983fdde | 502 | void draw8(int x, int y, uint32_t color) |
emcu | 1:478d8983fdde | 503 | { |
emcu | 1:478d8983fdde | 504 | FillBox(color, x, y, 40, 10); |
emcu | 1:478d8983fdde | 505 | FillBox(color, x, y, 10, 70); |
emcu | 1:478d8983fdde | 506 | FillBox(color, x+30, y, 10, 70); |
emcu | 1:478d8983fdde | 507 | FillBox(color, x, y+30, 40, 10); |
emcu | 1:478d8983fdde | 508 | FillBox(color, x+30, y+30, 10, 40); |
emcu | 1:478d8983fdde | 509 | FillBox(color, x, y+60, 40, 10); |
emcu | 1:478d8983fdde | 510 | } |
emcu | 1:478d8983fdde | 511 | |
emcu | 1:478d8983fdde | 512 | void draw9(int x, int y, uint32_t color) |
emcu | 1:478d8983fdde | 513 | { |
emcu | 1:478d8983fdde | 514 | FillBox(color, x, y, 40, 10); |
emcu | 1:478d8983fdde | 515 | FillBox(color, x, y, 10, 40); |
emcu | 1:478d8983fdde | 516 | FillBox(color, x, y+30, 40, 10); |
emcu | 1:478d8983fdde | 517 | FillBox(color, x+30, y+30, 10, 40); |
emcu | 1:478d8983fdde | 518 | FillBox(color, x, y+60, 40, 10); |
emcu | 1:478d8983fdde | 519 | FillBox(color, x+30, y, 10, 30); |
emcu | 1:478d8983fdde | 520 | } |
emcu | 1:478d8983fdde | 521 | |
emcu | 1:478d8983fdde | 522 | void draw0(int x, int y, uint32_t color) |
emcu | 1:478d8983fdde | 523 | { |
emcu | 1:478d8983fdde | 524 | FillBox(color, x, y, 40, 10); |
emcu | 1:478d8983fdde | 525 | FillBox(color, x, y, 10, 70); |
emcu | 1:478d8983fdde | 526 | FillBox(color, x+30, y, 10, 70); |
emcu | 1:478d8983fdde | 527 | FillBox(color, x, y+60, 40, 10); |
emcu | 1:478d8983fdde | 528 | } |