Русифицированная версия программы для измерения температуры и отн. влажности и вывода информации на сенсорный TFT
Dependencies: FT800_2 HYT mbed
Компоненты
- Датчик температуры и относительной влажности HYT-271 / HYT-221 / HYT-939 от компании IST-AG
- TFT-модуль серии uxTouch от компании Riverdi
- Плата-переходник Break Out Board 20 от компании Riverdi
- Любая отладочная плата с поддержкой mbed, интерфейсами I2C и SPI interface двумя свободными линиями для сигналов PD и INT
Подключение
Отладочная плата к TFT-модулю
Отладочная плата подключается к модулю через переходник Break Out Board 20. На плате-переходнике используется 6 сигналов: SCK, MOSI, MISO, SS (интерфейс SPI), PD (powerdown) и INT (interrupt).
Питание должно быть подано не только на VDD, но и на BLVDD - подсветку экрана. Соответствующие выводы можно просто соединить между собой:
Отладочная плата к датчику серии HYT
К датчику отладочная плата подключается по I2C. Не забываем про подтяжку к питанию:
Демонстрация работы
Процесс создания приложения подробно описан тут: https://habrahabr.ru/users/uuuulala/topics/
TFT/display.Draw_Grids.cpp@1:8ca8a4ecbe6b, 2016-10-12 (annotated)
- Committer:
- Ksenia
- Date:
- Wed Oct 12 10:53:35 2016 +0000
- Revision:
- 1:8ca8a4ecbe6b
- Parent:
- 0:9db07391e780
?????? ??????? ? ?????? ?????????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Ksenia | 0:9db07391e780 | 1 | #include "display.h" |
Ksenia | 0:9db07391e780 | 2 | |
Ksenia | 0:9db07391e780 | 3 | /* For drawing current values */ |
Ksenia | 0:9db07391e780 | 4 | |
Ksenia | 0:9db07391e780 | 5 | /************************************************************************************************************************** |
Ksenia | 0:9db07391e780 | 6 | ************************** Draw horisontal grid for current temperature (-50 .. +125) ************************************* |
Ksenia | 0:9db07391e780 | 7 | **************************************************************************************************************************/ |
Ksenia | 0:9db07391e780 | 8 | void Display::HorisontalGrid_Current_Temperature() |
Ksenia | 0:9db07391e780 | 9 | { |
Ksenia | 0:9db07391e780 | 10 | (*_TFT).DL(COLOR_RGB(20, 20, 20)); |
Ksenia | 0:9db07391e780 | 11 | char gridNumb = 125 + 50; |
Ksenia | 0:9db07391e780 | 12 | for (int i = 70 * 16; i <= 225 * 16; i += 352) { |
Ksenia | 0:9db07391e780 | 13 | (*_TFT).DL(BEGIN(LINES)); |
Ksenia | 0:9db07391e780 | 14 | (*_TFT).DL(LINE_WIDTH(8)); |
Ksenia | 0:9db07391e780 | 15 | (*_TFT).DL(VERTEX2F(15 * 16, i)); |
Ksenia | 0:9db07391e780 | 16 | (*_TFT).DL(VERTEX2F(423 * 16, i)); |
Ksenia | 0:9db07391e780 | 17 | if (gridNumb >= 50) { |
Ksenia | 0:9db07391e780 | 18 | (*_TFT).Number(435, i/16 - 9, 26, 0, gridNumb - 50); |
Ksenia | 0:9db07391e780 | 19 | } else if (gridNumb == 25) { |
Ksenia | 0:9db07391e780 | 20 | (*_TFT).Text(435, i/16 - 9, 26, 0, "-25"); |
Ksenia | 0:9db07391e780 | 21 | } else if (gridNumb == 0) { |
Ksenia | 0:9db07391e780 | 22 | (*_TFT).Text(435, i/16 - 9, 26, 0, "-50"); |
Ksenia | 0:9db07391e780 | 23 | } |
Ksenia | 0:9db07391e780 | 24 | gridNumb = gridNumb - 25; |
Ksenia | 0:9db07391e780 | 25 | } |
Ksenia | 0:9db07391e780 | 26 | } |
Ksenia | 0:9db07391e780 | 27 | |
Ksenia | 0:9db07391e780 | 28 | /************************************************************************************************************************** |
Ksenia | 0:9db07391e780 | 29 | ************************** Draw horisontal grid for current humidity (0 .. 100) ******************************************* |
Ksenia | 0:9db07391e780 | 30 | **************************************************************************************************************************/ |
Ksenia | 0:9db07391e780 | 31 | void Display::HorisontalGrid_Current_Humidity() |
Ksenia | 0:9db07391e780 | 32 | { |
Ksenia | 0:9db07391e780 | 33 | (*_TFT).DL(COLOR_RGB(20, 20, 20)); |
Ksenia | 0:9db07391e780 | 34 | char gridNumb = 100; |
Ksenia | 0:9db07391e780 | 35 | for (int i = 70 * 16; i <= 220 * 16; i += 600) { |
Ksenia | 0:9db07391e780 | 36 | (*_TFT).DL(BEGIN(LINES)); |
Ksenia | 0:9db07391e780 | 37 | (*_TFT).DL(LINE_WIDTH(8)); |
Ksenia | 0:9db07391e780 | 38 | (*_TFT).DL(VERTEX2F(15 * 16, i)); |
Ksenia | 0:9db07391e780 | 39 | (*_TFT).DL(VERTEX2F(423 * 16, i)); |
Ksenia | 0:9db07391e780 | 40 | (*_TFT).Number(435, i/16 - 9, 26, 0, gridNumb); |
Ksenia | 0:9db07391e780 | 41 | gridNumb = gridNumb - 25; |
Ksenia | 0:9db07391e780 | 42 | } |
Ksenia | 0:9db07391e780 | 43 | } |
Ksenia | 0:9db07391e780 | 44 | |
Ksenia | 0:9db07391e780 | 45 | |
Ksenia | 0:9db07391e780 | 46 | |
Ksenia | 0:9db07391e780 | 47 | /* For drawing statistics values */ |
Ksenia | 0:9db07391e780 | 48 | |
Ksenia | 0:9db07391e780 | 49 | /************************************************************************************************************************** |
Ksenia | 0:9db07391e780 | 50 | ************************** Draw horisontal grid for temperature (-50 .. +125) ********************************************* |
Ksenia | 0:9db07391e780 | 51 | **************************************************************************************************************************/ |
Ksenia | 0:9db07391e780 | 52 | void Display::HorisontalGrid_Statistics_Temperature() |
Ksenia | 0:9db07391e780 | 53 | { |
Ksenia | 0:9db07391e780 | 54 | (*_TFT).DL(COLOR_RGB(80, 80, 80)); |
Ksenia | 0:9db07391e780 | 55 | char gridNumb = 125 + 50; |
Ksenia | 0:9db07391e780 | 56 | for (int i = 100 * 16; i <= 200 * 16; i += 228) { |
Ksenia | 0:9db07391e780 | 57 | (*_TFT).DL(BEGIN(LINES)); |
Ksenia | 0:9db07391e780 | 58 | (*_TFT).DL(LINE_WIDTH(8)); |
Ksenia | 0:9db07391e780 | 59 | if (gridNumb == 0 + 50) { |
Ksenia | 0:9db07391e780 | 60 | (*_TFT).DL(LINE_WIDTH(12)); |
Ksenia | 0:9db07391e780 | 61 | } |
Ksenia | 0:9db07391e780 | 62 | (*_TFT).DL(VERTEX2F(25 * 16, i)); |
Ksenia | 0:9db07391e780 | 63 | (*_TFT).DL(VERTEX2F(438 * 16, i)); |
Ksenia | 0:9db07391e780 | 64 | if (gridNumb >= 50) { |
Ksenia | 0:9db07391e780 | 65 | (*_TFT).Number(445, i/16 - 9, 26, 0, gridNumb - 50); |
Ksenia | 0:9db07391e780 | 66 | } else if (gridNumb == 25) { |
Ksenia | 0:9db07391e780 | 67 | (*_TFT).Text(445, i/16 - 9, 26, 0, "-25"); |
Ksenia | 0:9db07391e780 | 68 | } else if (gridNumb == 0) { |
Ksenia | 0:9db07391e780 | 69 | (*_TFT).Text(445, i/16 - 9, 26, 0, "-50"); |
Ksenia | 0:9db07391e780 | 70 | } |
Ksenia | 0:9db07391e780 | 71 | gridNumb = gridNumb - 25; |
Ksenia | 0:9db07391e780 | 72 | } |
Ksenia | 0:9db07391e780 | 73 | } |
Ksenia | 0:9db07391e780 | 74 | |
Ksenia | 0:9db07391e780 | 75 | /************************************************************************************************************************** |
Ksenia | 0:9db07391e780 | 76 | ************************** Draw horisontal grid for humidity (0 .. 100) *************************************************** |
Ksenia | 0:9db07391e780 | 77 | **************************************************************************************************************************/ |
Ksenia | 0:9db07391e780 | 78 | void Display::HorisontalGrid_Statistics_Humidity() |
Ksenia | 0:9db07391e780 | 79 | { |
Ksenia | 0:9db07391e780 | 80 | (*_TFT).DL(COLOR_RGB(80, 80, 80)); |
Ksenia | 0:9db07391e780 | 81 | char gridNumb = 100; |
Ksenia | 0:9db07391e780 | 82 | for (int i = 100 * 16; i <= 200 * 16; i += (25*16)) { |
Ksenia | 0:9db07391e780 | 83 | (*_TFT).DL(BEGIN(LINES)); |
Ksenia | 0:9db07391e780 | 84 | (*_TFT).DL(LINE_WIDTH(8)); |
Ksenia | 0:9db07391e780 | 85 | (*_TFT).DL(VERTEX2F(25 * 16, i)); |
Ksenia | 0:9db07391e780 | 86 | (*_TFT).DL(VERTEX2F(438 * 16, i)); |
Ksenia | 0:9db07391e780 | 87 | (*_TFT).Number(445, i/16 - 9, 26, 0, gridNumb); |
Ksenia | 0:9db07391e780 | 88 | gridNumb = gridNumb - 25; |
Ksenia | 0:9db07391e780 | 89 | } |
Ksenia | 0:9db07391e780 | 90 | } |
Ksenia | 0:9db07391e780 | 91 | |
Ksenia | 0:9db07391e780 | 92 | /************************************************************************************************************************** |
Ksenia | 0:9db07391e780 | 93 | ************************** Draw vertical grid for 24-hour interval ******************************************&************* |
Ksenia | 0:9db07391e780 | 94 | **************************************************************************************************************************/ |
Ksenia | 0:9db07391e780 | 95 | void Display::VerticalGrid24hrs(uint64_t gridSecondsOffset) |
Ksenia | 0:9db07391e780 | 96 | { |
Ksenia | 0:9db07391e780 | 97 | uint64_t gridSeconds = gridSecondsOffset; |
Ksenia | 0:9db07391e780 | 98 | for (int i = 25 * 16; i <= 433 * 16; i += 17 * 16) { |
Ksenia | 0:9db07391e780 | 99 | (*_TFT).DL(COLOR_RGB(80, 80, 80)); |
Ksenia | 0:9db07391e780 | 100 | (*_TFT).DL(BEGIN(LINES)); |
Ksenia | 0:9db07391e780 | 101 | (*_TFT).DL(LINE_WIDTH(8)); |
Ksenia | 0:9db07391e780 | 102 | (*_TFT).DL(VERTEX2F(i, 100 * 16)); |
Ksenia | 0:9db07391e780 | 103 | (*_TFT).DL(VERTEX2F(i, 200 * 16)); |
Ksenia | 0:9db07391e780 | 104 | CreateStringTime(gridTimeStr, gridSeconds); |
Ksenia | 0:9db07391e780 | 105 | if ((i - 25 * 16) % (3 * 17 * 16) == 0) { |
Ksenia | 0:9db07391e780 | 106 | (*_TFT).Text(i/16 - 20, 210, 20, 0, gridTimeStr); |
Ksenia | 0:9db07391e780 | 107 | (*_TFT).DL(COLOR_RGB(20, 20, 20)); |
Ksenia | 0:9db07391e780 | 108 | (*_TFT).DL(BEGIN(LINES)); |
Ksenia | 0:9db07391e780 | 109 | (*_TFT).DL(VERTEX2F(i, 100 * 16)); |
Ksenia | 0:9db07391e780 | 110 | (*_TFT).DL(VERTEX2F(i, 205 * 16)); |
Ksenia | 0:9db07391e780 | 111 | } |
Ksenia | 0:9db07391e780 | 112 | gridSeconds = gridSeconds + 3600; |
Ksenia | 0:9db07391e780 | 113 | } |
Ksenia | 0:9db07391e780 | 114 | } |
Ksenia | 0:9db07391e780 | 115 | |
Ksenia | 0:9db07391e780 | 116 | /************************************************************************************************************************** |
Ksenia | 0:9db07391e780 | 117 | ************************** Draw vertical grid for three-hour interval ***************************************************** |
Ksenia | 0:9db07391e780 | 118 | **************************************************************************************************************************/ |
Ksenia | 0:9db07391e780 | 119 | void Display::VerticalGrid3hrs(uint64_t gridSecondsOffset) |
Ksenia | 0:9db07391e780 | 120 | { |
Ksenia | 0:9db07391e780 | 121 | (*_TFT).DL(COLOR_RGB(0, 0, 0)); |
Ksenia | 0:9db07391e780 | 122 | uint64_t gridSeconds = 300 * timePoint3hrs + gridSecondsOffset; |
Ksenia | 0:9db07391e780 | 123 | for (int i = 25 * 16; i <= 433 * 16; i += 34 * 16) { |
Ksenia | 0:9db07391e780 | 124 | (*_TFT).DL(BEGIN(LINES)); |
Ksenia | 0:9db07391e780 | 125 | (*_TFT).DL(LINE_WIDTH(8)); |
Ksenia | 0:9db07391e780 | 126 | (*_TFT).DL(VERTEX2F(i, 100 * 16)); |
Ksenia | 0:9db07391e780 | 127 | (*_TFT).DL(VERTEX2F(i, 200 * 16)); |
Ksenia | 0:9db07391e780 | 128 | CreateStringTime(gridTimeStr, gridSeconds); |
Ksenia | 0:9db07391e780 | 129 | if ((i - 25*16) % (2 * 34 * 16) == 0) { |
Ksenia | 0:9db07391e780 | 130 | (*_TFT).DL(COLOR_RGB(80, 80, 80)); |
Ksenia | 0:9db07391e780 | 131 | (*_TFT).Text(i/16 - 20, 210, 20, 0, gridTimeStr); |
Ksenia | 0:9db07391e780 | 132 | (*_TFT).DL(COLOR_RGB(0, 0, 0)); |
Ksenia | 0:9db07391e780 | 133 | (*_TFT).DL(BEGIN(LINES)); |
Ksenia | 0:9db07391e780 | 134 | (*_TFT).DL(VERTEX2F(i, 100 * 16)); |
Ksenia | 0:9db07391e780 | 135 | (*_TFT).DL(VERTEX2F(i, 205 * 16)); |
Ksenia | 0:9db07391e780 | 136 | } |
Ksenia | 0:9db07391e780 | 137 | gridSeconds = gridSeconds + 900; |
Ksenia | 0:9db07391e780 | 138 | } |
Ksenia | 0:9db07391e780 | 139 | } |
Ksenia | 0:9db07391e780 | 140 | |
Ksenia | 0:9db07391e780 | 141 | /************************************************************************************************************************** |
Ksenia | 0:9db07391e780 | 142 | ************************** Draw vertical grid for 30-minutes interval ***************************************************** |
Ksenia | 0:9db07391e780 | 143 | **************************************************************************************************************************/ |
Ksenia | 0:9db07391e780 | 144 | void Display::VerticalGrid30min(uint64_t gridSecondsOffset) |
Ksenia | 0:9db07391e780 | 145 | { |
Ksenia | 0:9db07391e780 | 146 | (*_TFT).DL(COLOR_RGB(0, 0, 0)); |
Ksenia | 0:9db07391e780 | 147 | uint64_t gridSeconds = 300 * (timePoint3hrs + timePoint30min) + gridSecondsOffset; |
Ksenia | 0:9db07391e780 | 148 | for (int i = 25 * 16; i <= 433 * 16; i += 68 * 16) { |
Ksenia | 0:9db07391e780 | 149 | (*_TFT).DL(BEGIN(LINES)); |
Ksenia | 0:9db07391e780 | 150 | (*_TFT).DL(LINE_WIDTH(8)); |
Ksenia | 0:9db07391e780 | 151 | (*_TFT).DL(VERTEX2F(i, 100 * 16)); |
Ksenia | 0:9db07391e780 | 152 | (*_TFT).DL(VERTEX2F(i, 205 * 16)); |
Ksenia | 0:9db07391e780 | 153 | CreateStringTime(gridTimeStr, gridSeconds); |
Ksenia | 0:9db07391e780 | 154 | (*_TFT).DL(COLOR_RGB(80, 80, 80)); |
Ksenia | 0:9db07391e780 | 155 | (*_TFT).Text(i/16 - 20, 210, 20, 0, gridTimeStr); |
Ksenia | 0:9db07391e780 | 156 | (*_TFT).DL(COLOR_RGB(0, 0, 0)); |
Ksenia | 0:9db07391e780 | 157 | gridSeconds = gridSeconds + 300; |
Ksenia | 0:9db07391e780 | 158 | } |
Ksenia | 0:9db07391e780 | 159 | } |