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: FT800_2 HYT mbed
TFT/display.Draw_3hrsStatistics.cpp@0:5d3131d1b142, 2016-10-07 (annotated)
- Committer:
- Ksenia
- Date:
- Fri Oct 07 11:08:19 2016 +0000
- Revision:
- 0:5d3131d1b142
Initial commit;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Ksenia | 0:5d3131d1b142 | 1 | #include "display.h" |
| Ksenia | 0:5d3131d1b142 | 2 | |
| Ksenia | 0:5d3131d1b142 | 3 | /************************************************************************************************************************** |
| Ksenia | 0:5d3131d1b142 | 4 | ************************** Display data about humidity in the three-hour interval ***************************************** |
| Ksenia | 0:5d3131d1b142 | 5 | **************************************************************************************************************************/ |
| Ksenia | 0:5d3131d1b142 | 6 | |
| Ksenia | 0:5d3131d1b142 | 7 | void Display::StatHumidity_3hrs(volatile uint64_t seconds, short int statistics24hrs[3][288], uint64_t gridSecondsOffset) |
| Ksenia | 0:5d3131d1b142 | 8 | { |
| Ksenia | 0:5d3131d1b142 | 9 | // start FT800 display list |
| Ksenia | 0:5d3131d1b142 | 10 | StartDL(); |
| Ksenia | 0:5d3131d1b142 | 11 | |
| Ksenia | 0:5d3131d1b142 | 12 | // mark 6 areas for touch input (for zoom in), |
| Ksenia | 0:5d3131d1b142 | 13 | // make each every second zone gray, make the active zone green |
| Ksenia | 0:5d3131d1b142 | 14 | char ZonesCnt = 0; |
| Ksenia | 0:5d3131d1b142 | 15 | for (int i = 25; i < 433; i += 68) { |
| Ksenia | 0:5d3131d1b142 | 16 | (*_TFT).DL(COLOR_RGB(255, 255, 255)); |
| Ksenia | 0:5d3131d1b142 | 17 | if (ZonesCnt % 2 == 0) { |
| Ksenia | 0:5d3131d1b142 | 18 | (*_TFT).DL(COLOR_RGB(233, 233, 233)); |
| Ksenia | 0:5d3131d1b142 | 19 | } |
| Ksenia | 0:5d3131d1b142 | 20 | if (pressedButton - ZONE_1_PRESS == ZonesCnt) { |
| Ksenia | 0:5d3131d1b142 | 21 | (*_TFT).DL(COLOR_RGB(200, 255, 200)); |
| Ksenia | 0:5d3131d1b142 | 22 | timePoint30min = 6 * ZonesCnt; |
| Ksenia | 0:5d3131d1b142 | 23 | } |
| Ksenia | 0:5d3131d1b142 | 24 | (*_TFT).DL(TAG_MASK(1)); |
| Ksenia | 0:5d3131d1b142 | 25 | (*_TFT).DL(TAG(ZONE_1_PRESS + ZonesCnt)); |
| Ksenia | 0:5d3131d1b142 | 26 | (*_TFT).DL(BEGIN(RECTS)); |
| Ksenia | 0:5d3131d1b142 | 27 | (*_TFT).DL(VERTEX2II(i, 100, 0, 0)); |
| Ksenia | 0:5d3131d1b142 | 28 | (*_TFT).DL(VERTEX2II(i + 68, 200, 0, 0)); |
| Ksenia | 0:5d3131d1b142 | 29 | (*_TFT).DL(TAG_MASK(0)); |
| Ksenia | 0:5d3131d1b142 | 30 | ZonesCnt++; |
| Ksenia | 0:5d3131d1b142 | 31 | } |
| Ksenia | 0:5d3131d1b142 | 32 | |
| Ksenia | 0:5d3131d1b142 | 33 | // create time string, GridLines, link to main menu |
| Ksenia | 0:5d3131d1b142 | 34 | TimeSinceTurnOn(seconds); |
| Ksenia | 0:5d3131d1b142 | 35 | VerticalGrid3hrs(gridSecondsOffset); |
| Ksenia | 0:5d3131d1b142 | 36 | HorisontalGrid_Statistics_Humidity(); |
| Ksenia | 0:5d3131d1b142 | 37 | MainMenuReference(); |
| Ksenia | 0:5d3131d1b142 | 38 | |
| Ksenia | 0:5d3131d1b142 | 39 | // draw graph line |
| Ksenia | 0:5d3131d1b142 | 40 | for (int i = 0; i < 36; i++) { |
| Ksenia | 0:5d3131d1b142 | 41 | char currentValue = statistics24hrs[0][i + timePoint3hrs]; |
| Ksenia | 0:5d3131d1b142 | 42 | char currentMinValue = statistics24hrs[1][i + timePoint3hrs]; |
| Ksenia | 0:5d3131d1b142 | 43 | char currentMaxValue = statistics24hrs[2][i + timePoint3hrs]; |
| Ksenia | 0:5d3131d1b142 | 44 | if (currentValue != INIT_STATISTICS_NUMBER) { |
| Ksenia | 0:5d3131d1b142 | 45 | (*_TFT).DL(COLOR_RGB(9, 0, 63)); |
| Ksenia | 0:5d3131d1b142 | 46 | if (currentMaxValue - currentMinValue >= DELTA_HUMIDITY) { |
| Ksenia | 0:5d3131d1b142 | 47 | (*_TFT).DL(COLOR_RGB(207, 45, 13)); |
| Ksenia | 0:5d3131d1b142 | 48 | (*_TFT).DL(BEGIN(LINES)); |
| Ksenia | 0:5d3131d1b142 | 49 | (*_TFT).DL(LINE_WIDTH(16)); |
| Ksenia | 0:5d3131d1b142 | 50 | (*_TFT).DL(VERTEX2F(i * 181 + 25 * 16, (200 - currentValue) * 16)); |
| Ksenia | 0:5d3131d1b142 | 51 | (*_TFT).DL(VERTEX2F(i * 181 + 25 * 16, (200 - currentMaxValue) * 16)); |
| Ksenia | 0:5d3131d1b142 | 52 | (*_TFT).DL(VERTEX2F(i * 181 + 22 * 16, (200 - currentMaxValue) * 16)); |
| Ksenia | 0:5d3131d1b142 | 53 | (*_TFT).DL(VERTEX2F(i * 181 + 28 * 16, (200 - currentMaxValue) * 16)); |
| Ksenia | 0:5d3131d1b142 | 54 | (*_TFT).DL(END()); |
| Ksenia | 0:5d3131d1b142 | 55 | (*_TFT).DL(BEGIN(LINES)); |
| Ksenia | 0:5d3131d1b142 | 56 | (*_TFT).DL(LINE_WIDTH(16)); |
| Ksenia | 0:5d3131d1b142 | 57 | (*_TFT).DL(VERTEX2F(i * 181 + 25 * 16, (200 - currentValue) * 16)); |
| Ksenia | 0:5d3131d1b142 | 58 | (*_TFT).DL(VERTEX2F(i * 181 + 25 * 16, (200 - currentMinValue) * 16)); |
| Ksenia | 0:5d3131d1b142 | 59 | (*_TFT).DL(VERTEX2F(i * 181 + 22 * 16, (200 - currentMinValue) * 16)); |
| Ksenia | 0:5d3131d1b142 | 60 | (*_TFT).DL(VERTEX2F(i * 181 + 28 * 16, (200 - currentMinValue) * 16)); |
| Ksenia | 0:5d3131d1b142 | 61 | (*_TFT).DL(END()); |
| Ksenia | 0:5d3131d1b142 | 62 | } |
| Ksenia | 0:5d3131d1b142 | 63 | (*_TFT).DL(BEGIN(POINTS)); |
| Ksenia | 0:5d3131d1b142 | 64 | (*_TFT).DL(POINT_SIZE(45)); |
| Ksenia | 0:5d3131d1b142 | 65 | (*_TFT).DL(VERTEX2F(i * 181 + 25 * 16, (200 - currentValue) * 16)); |
| Ksenia | 0:5d3131d1b142 | 66 | } |
| Ksenia | 0:5d3131d1b142 | 67 | } |
| Ksenia | 0:5d3131d1b142 | 68 | |
| Ksenia | 0:5d3131d1b142 | 69 | // write main title |
| Ksenia | 0:5d3131d1b142 | 70 | (*_TFT).DL(COLOR_RGB(0, 0, 0)); |
| Ksenia | 0:5d3131d1b142 | 71 | (*_TFT).Text(11, 15, 30, 0, "Humidity statistics (3 hrs)"); |
| Ksenia | 0:5d3131d1b142 | 72 | |
| Ksenia | 0:5d3131d1b142 | 73 | // finish FT800 display list |
| Ksenia | 0:5d3131d1b142 | 74 | FinishDL(); |
| Ksenia | 0:5d3131d1b142 | 75 | } |
| Ksenia | 0:5d3131d1b142 | 76 | |
| Ksenia | 0:5d3131d1b142 | 77 | /************************************************************************************************************************** |
| Ksenia | 0:5d3131d1b142 | 78 | ************************** Display data about temeprature in the three-hour interval ************************************** |
| Ksenia | 0:5d3131d1b142 | 79 | **************************************************************************************************************************/ |
| Ksenia | 0:5d3131d1b142 | 80 | void Display::StatTemperature_3hrs(volatile uint64_t seconds, short int statistics24hrs[3][288], uint64_t gridSecondsOffset) |
| Ksenia | 0:5d3131d1b142 | 81 | { |
| Ksenia | 0:5d3131d1b142 | 82 | // start FT800 display list |
| Ksenia | 0:5d3131d1b142 | 83 | StartDL(); |
| Ksenia | 0:5d3131d1b142 | 84 | |
| Ksenia | 0:5d3131d1b142 | 85 | // mark 6 areas for touch input (for zoom in), |
| Ksenia | 0:5d3131d1b142 | 86 | // make each every second zone gray, make the active zone green |
| Ksenia | 0:5d3131d1b142 | 87 | char ZonesCnt = 0; |
| Ksenia | 0:5d3131d1b142 | 88 | for (int i = 25; i < 433; i += 68) { |
| Ksenia | 0:5d3131d1b142 | 89 | (*_TFT).DL(COLOR_RGB(255, 255, 255)); |
| Ksenia | 0:5d3131d1b142 | 90 | if (ZonesCnt % 2 == 0) { |
| Ksenia | 0:5d3131d1b142 | 91 | (*_TFT).DL(COLOR_RGB(233, 233, 233)); |
| Ksenia | 0:5d3131d1b142 | 92 | } |
| Ksenia | 0:5d3131d1b142 | 93 | if (pressedButton - ZONE_1_PRESS == ZonesCnt) { |
| Ksenia | 0:5d3131d1b142 | 94 | (*_TFT).DL(COLOR_RGB(200, 255, 200)); |
| Ksenia | 0:5d3131d1b142 | 95 | timePoint30min = 6 * ZonesCnt; |
| Ksenia | 0:5d3131d1b142 | 96 | } |
| Ksenia | 0:5d3131d1b142 | 97 | (*_TFT).DL(TAG_MASK(1)); |
| Ksenia | 0:5d3131d1b142 | 98 | (*_TFT).DL(TAG(ZONE_1_PRESS + ZonesCnt)); |
| Ksenia | 0:5d3131d1b142 | 99 | (*_TFT).DL(BEGIN(RECTS)); |
| Ksenia | 0:5d3131d1b142 | 100 | (*_TFT).DL(VERTEX2II(i, 100, 0, 0)); |
| Ksenia | 0:5d3131d1b142 | 101 | (*_TFT).DL(VERTEX2II(i + 68, 200, 0, 0)); |
| Ksenia | 0:5d3131d1b142 | 102 | (*_TFT).DL(TAG_MASK(0)); |
| Ksenia | 0:5d3131d1b142 | 103 | ZonesCnt++; |
| Ksenia | 0:5d3131d1b142 | 104 | } |
| Ksenia | 0:5d3131d1b142 | 105 | |
| Ksenia | 0:5d3131d1b142 | 106 | // create time string, GridLines, link to main menu |
| Ksenia | 0:5d3131d1b142 | 107 | TimeSinceTurnOn(seconds); |
| Ksenia | 0:5d3131d1b142 | 108 | VerticalGrid3hrs(gridSecondsOffset); |
| Ksenia | 0:5d3131d1b142 | 109 | HorisontalGrid_Statistics_Temperature(); |
| Ksenia | 0:5d3131d1b142 | 110 | MainMenuReference(); |
| Ksenia | 0:5d3131d1b142 | 111 | |
| Ksenia | 0:5d3131d1b142 | 112 | // draw graph line |
| Ksenia | 0:5d3131d1b142 | 113 | for (int i = 0; i < 36; i++) { |
| Ksenia | 0:5d3131d1b142 | 114 | char currentValue = (statistics24hrs[0][i + timePoint3hrs] / TEMPERATURE_MULTIPLIER + 50) * 0.57; |
| Ksenia | 0:5d3131d1b142 | 115 | char currentMinValue = (statistics24hrs[1][i + timePoint3hrs] / TEMPERATURE_MULTIPLIER + 50) * 0.57; |
| Ksenia | 0:5d3131d1b142 | 116 | char currentMaxValue = (statistics24hrs[2][i + timePoint3hrs] / TEMPERATURE_MULTIPLIER + 50) * 0.57; |
| Ksenia | 0:5d3131d1b142 | 117 | char delta = statistics24hrs[2][i + timePoint3hrs] - statistics24hrs[1][i + timePoint3hrs]; |
| Ksenia | 0:5d3131d1b142 | 118 | |
| Ksenia | 0:5d3131d1b142 | 119 | if (statistics24hrs[0][i + timePoint3hrs] != INIT_STATISTICS_NUMBER) { |
| Ksenia | 0:5d3131d1b142 | 120 | (*_TFT).DL(COLOR_RGB(9, 0, 63)); |
| Ksenia | 0:5d3131d1b142 | 121 | if (delta >= DELTA_TEMPERATURE + TEMPERATURE_MULTIPLIER) { |
| Ksenia | 0:5d3131d1b142 | 122 | (*_TFT).DL(COLOR_RGB(207, 45, 13)); |
| Ksenia | 0:5d3131d1b142 | 123 | (*_TFT).DL(BEGIN(LINES)); |
| Ksenia | 0:5d3131d1b142 | 124 | (*_TFT).DL(LINE_WIDTH(16)); |
| Ksenia | 0:5d3131d1b142 | 125 | (*_TFT).DL(VERTEX2F(i * 181 + 25 * 16, (200 - currentValue) * 16)); |
| Ksenia | 0:5d3131d1b142 | 126 | (*_TFT).DL(VERTEX2F(i * 181 + 25 * 16, (200 - currentMaxValue) * 16)); |
| Ksenia | 0:5d3131d1b142 | 127 | (*_TFT).DL(VERTEX2F(i * 181 + 22 * 16, (200 - currentMaxValue) * 16)); |
| Ksenia | 0:5d3131d1b142 | 128 | (*_TFT).DL(VERTEX2F(i * 181 + 28 * 16, (200 - currentMaxValue) * 16)); |
| Ksenia | 0:5d3131d1b142 | 129 | (*_TFT).DL(END()); |
| Ksenia | 0:5d3131d1b142 | 130 | (*_TFT).DL(BEGIN(LINES)); |
| Ksenia | 0:5d3131d1b142 | 131 | (*_TFT).DL(LINE_WIDTH(16)); |
| Ksenia | 0:5d3131d1b142 | 132 | (*_TFT).DL(VERTEX2F(i * 181 + 25 * 16, (200 - currentValue) * 16)); |
| Ksenia | 0:5d3131d1b142 | 133 | (*_TFT).DL(VERTEX2F(i * 181 + 25 * 16, (200 - currentMinValue) * 16)); |
| Ksenia | 0:5d3131d1b142 | 134 | (*_TFT).DL(VERTEX2F(i * 181 + 22 * 16, (200 - currentMinValue) * 16)); |
| Ksenia | 0:5d3131d1b142 | 135 | (*_TFT).DL(VERTEX2F(i * 181 + 28 * 16, (200 - currentMinValue) * 16)); |
| Ksenia | 0:5d3131d1b142 | 136 | (*_TFT).DL(END()); |
| Ksenia | 0:5d3131d1b142 | 137 | } |
| Ksenia | 0:5d3131d1b142 | 138 | (*_TFT).DL(BEGIN(POINTS)); |
| Ksenia | 0:5d3131d1b142 | 139 | (*_TFT).DL(POINT_SIZE(45)); |
| Ksenia | 0:5d3131d1b142 | 140 | (*_TFT).DL(VERTEX2F(i * 181 + 25 * 16, (200 - currentValue) * 16)); |
| Ksenia | 0:5d3131d1b142 | 141 | } |
| Ksenia | 0:5d3131d1b142 | 142 | } |
| Ksenia | 0:5d3131d1b142 | 143 | |
| Ksenia | 0:5d3131d1b142 | 144 | // write main title |
| Ksenia | 0:5d3131d1b142 | 145 | (*_TFT).DL(COLOR_RGB(0, 0, 0)); |
| Ksenia | 0:5d3131d1b142 | 146 | (*_TFT).Text(11, 15, 30, 0, "Temperature statistics (3 hrs)"); |
| Ksenia | 0:5d3131d1b142 | 147 | |
| Ksenia | 0:5d3131d1b142 | 148 | // finish FT800 display list |
| Ksenia | 0:5d3131d1b142 | 149 | FinishDL(); |
| Ksenia | 0:5d3131d1b142 | 150 | } |