Русифицированная версия программы для измерения температуры и отн. влажности и вывода информации на сенсорный 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_MainMenu.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 | /************************************************************************************************************************** |
Ksenia | 0:9db07391e780 | 4 | ************************** Display Main Menu ****************************************************************************** |
Ksenia | 0:9db07391e780 | 5 | **************************************************************************************************************************/ |
Ksenia | 0:9db07391e780 | 6 | |
Ksenia | 0:9db07391e780 | 7 | void Display::MainMenu(float humidity, float temperature) |
Ksenia | 0:9db07391e780 | 8 | { |
Ksenia | 0:9db07391e780 | 9 | // start FT800 display list |
Ksenia | 0:9db07391e780 | 10 | StartDL(); |
Ksenia | 0:9db07391e780 | 11 | |
Ksenia | 0:9db07391e780 | 12 | // write main title |
Ksenia | 0:9db07391e780 | 13 | (*_TFT).DL(COLOR_RGB(0, 0, 0)); |
Ksenia | 0:9db07391e780 | 14 | |
Ksenia | 0:9db07391e780 | 15 | CreateStringRussian("Датчик HYT-271 от IST"); |
Ksenia | 0:9db07391e780 | 16 | (*_TFT).Text(15, 15, 3, 0, russianStr); |
Ksenia | 0:9db07391e780 | 17 | |
Ksenia | 0:9db07391e780 | 18 | // create blue rectangle with current humididty including |
Ksenia | 0:9db07391e780 | 19 | // rectangle is tagged as CURR_HUM_PRESS |
Ksenia | 0:9db07391e780 | 20 | (*_TFT).DL(TAG_MASK(1)); |
Ksenia | 0:9db07391e780 | 21 | (*_TFT).DL(TAG(CURR_HUM_PRESS)); |
Ksenia | 0:9db07391e780 | 22 | (*_TFT).DL(COLOR_RGB(9, 0, 63)); |
Ksenia | 0:9db07391e780 | 23 | // if rectangle is already pressed, draw it with lighter color |
Ksenia | 0:9db07391e780 | 24 | if (pressedButton == CURR_HUM_PRESS) { |
Ksenia | 0:9db07391e780 | 25 | (*_TFT).DL(COLOR_RGB(75, 70, 108)); |
Ksenia | 0:9db07391e780 | 26 | } |
Ksenia | 0:9db07391e780 | 27 | (*_TFT).DL(BEGIN(RECTS)); |
Ksenia | 0:9db07391e780 | 28 | (*_TFT).DL(VERTEX2II(12, 62, 0, 0)); |
Ksenia | 0:9db07391e780 | 29 | (*_TFT).DL(VERTEX2II(12 + 300, 62 + 93, 0, 0)); |
Ksenia | 0:9db07391e780 | 30 | (*_TFT).DL(COLOR_RGB(255, 255, 255)); |
Ksenia | 0:9db07391e780 | 31 | CreateStringRussian("Отн. влажность"); |
Ksenia | 0:9db07391e780 | 32 | (*_TFT).Text(12 + 10, 62 + 5, 3, 0, russianStr); |
Ksenia | 0:9db07391e780 | 33 | CreateStringTempHum(humidityStr, humidity, 0); |
Ksenia | 0:9db07391e780 | 34 | (*_TFT).Text(12 + 10, 62 + 45, 31, 0, humidityStr); |
Ksenia | 0:9db07391e780 | 35 | (*_TFT).DL(BEGIN(BITMAPS)); |
Ksenia | 0:9db07391e780 | 36 | (*_TFT).DL(VERTEX2II(12 + 255, 62 + 10, 0, 0)); |
Ksenia | 0:9db07391e780 | 37 | (*_TFT).DL(END()); |
Ksenia | 0:9db07391e780 | 38 | (*_TFT).DL(TAG_MASK(0)); |
Ksenia | 0:9db07391e780 | 39 | |
Ksenia | 0:9db07391e780 | 40 | // create blue rectangle with current temperature including |
Ksenia | 0:9db07391e780 | 41 | // rectangle is tagged as CURR_TEMP_PRESS |
Ksenia | 0:9db07391e780 | 42 | (*_TFT).DL(TAG_MASK(1)); |
Ksenia | 0:9db07391e780 | 43 | (*_TFT).DL(TAG(CURR_TEMP_PRESS)); |
Ksenia | 0:9db07391e780 | 44 | (*_TFT).DL(COLOR_RGB(9, 0, 63)); |
Ksenia | 0:9db07391e780 | 45 | // if rectangle is already pressed, draw it with lighter color |
Ksenia | 0:9db07391e780 | 46 | if (pressedButton == CURR_TEMP_PRESS) { |
Ksenia | 0:9db07391e780 | 47 | (*_TFT).DL(COLOR_RGB(75, 70, 108)); |
Ksenia | 0:9db07391e780 | 48 | } |
Ksenia | 0:9db07391e780 | 49 | (*_TFT).DL(BEGIN(RECTS)); |
Ksenia | 0:9db07391e780 | 50 | (*_TFT).DL(VERTEX2II(12, 62 + 93 + 12, 0, 0)); |
Ksenia | 0:9db07391e780 | 51 | (*_TFT).DL(VERTEX2II(12 + 300, 62 + 93 + 12 + 93, 0, 0)); |
Ksenia | 0:9db07391e780 | 52 | (*_TFT).DL(COLOR_RGB(255, 255, 255)); |
Ksenia | 0:9db07391e780 | 53 | CreateStringRussian("Температура"); |
Ksenia | 0:9db07391e780 | 54 | (*_TFT).Text(12 + 10, 62 + 93 + 12 + 5, 3, 0, russianStr); |
Ksenia | 0:9db07391e780 | 55 | char degreeOffset = CreateStringTempHum(temperatureStr, temperature, 1); |
Ksenia | 0:9db07391e780 | 56 | (*_TFT).Text(12 + 10, 62 + 93 + 12 + 45, 31, 0, temperatureStr); |
Ksenia | 0:9db07391e780 | 57 | (*_TFT).Text(12 + 10 + (degreeOffset * 16 + 3), 62 + 93 + 12 + 45 - 2, 28, 0, "o"); |
Ksenia | 0:9db07391e780 | 58 | (*_TFT).DL(BEGIN(BITMAPS)); |
Ksenia | 0:9db07391e780 | 59 | (*_TFT).DL(VERTEX2II(12 + 260, 62 + 93 + 12 + 10, 1, 0)); |
Ksenia | 0:9db07391e780 | 60 | (*_TFT).DL(END()); |
Ksenia | 0:9db07391e780 | 61 | (*_TFT).DL(TAG_MASK(0)); |
Ksenia | 0:9db07391e780 | 62 | |
Ksenia | 0:9db07391e780 | 63 | |
Ksenia | 0:9db07391e780 | 64 | // create black rectangle tagged as STAT_HUM_PRESS |
Ksenia | 0:9db07391e780 | 65 | (*_TFT).DL(TAG_MASK(1)); |
Ksenia | 0:9db07391e780 | 66 | (*_TFT).DL(TAG(STAT_HUM_PRESS)); |
Ksenia | 0:9db07391e780 | 67 | (*_TFT).DL(COLOR_RGB(36, 36, 36)); |
Ksenia | 0:9db07391e780 | 68 | // if rectangle is already pressed, draw it lighter |
Ksenia | 0:9db07391e780 | 69 | if (pressedButton == STAT_HUM_PRESS) { |
Ksenia | 0:9db07391e780 | 70 | (*_TFT).DL(COLOR_RGB(56, 56, 56)); |
Ksenia | 0:9db07391e780 | 71 | } |
Ksenia | 0:9db07391e780 | 72 | (*_TFT).DL(BEGIN(RECTS)); |
Ksenia | 0:9db07391e780 | 73 | (*_TFT).DL(VERTEX2II(12 + 300 + 12, 62, 0, 0)); |
Ksenia | 0:9db07391e780 | 74 | (*_TFT).DL(VERTEX2II(12 + 300 + 12 + 144, 62 + 58, 0, 0)); |
Ksenia | 0:9db07391e780 | 75 | (*_TFT).DL(COLOR_RGB(255, 255, 255)); |
Ksenia | 0:9db07391e780 | 76 | CreateStringRussian("Отн. влажность"); |
Ksenia | 0:9db07391e780 | 77 | (*_TFT).Text(12 + 300 + 12 + 10, 62 + 5, 4, 0, russianStr); |
Ksenia | 0:9db07391e780 | 78 | CreateStringRussian("за сутки"); |
Ksenia | 0:9db07391e780 | 79 | (*_TFT).Text(12 + 300 + 12 + 10, 62 + 27, 4, 0, russianStr); |
Ksenia | 0:9db07391e780 | 80 | (*_TFT).DL(TAG_MASK(0)); |
Ksenia | 0:9db07391e780 | 81 | |
Ksenia | 0:9db07391e780 | 82 | // create black rectangle tagged as STAT_TEMP_PRESS |
Ksenia | 0:9db07391e780 | 83 | (*_TFT).DL(TAG_MASK(1)); |
Ksenia | 0:9db07391e780 | 84 | (*_TFT).DL(TAG(STAT_TEMP_PRESS)); |
Ksenia | 0:9db07391e780 | 85 | (*_TFT).DL(COLOR_RGB(36, 36, 36)); |
Ksenia | 0:9db07391e780 | 86 | // if rectangle is already pressed, draw it lighter |
Ksenia | 0:9db07391e780 | 87 | if (pressedButton == STAT_TEMP_PRESS) { |
Ksenia | 0:9db07391e780 | 88 | (*_TFT).DL(COLOR_RGB(56, 56, 56)); |
Ksenia | 0:9db07391e780 | 89 | } |
Ksenia | 0:9db07391e780 | 90 | (*_TFT).DL(BEGIN(RECTS)); |
Ksenia | 0:9db07391e780 | 91 | (*_TFT).DL(VERTEX2II(12 + 300 + 12, 62 + 58 + 12, 0, 0)); |
Ksenia | 0:9db07391e780 | 92 | (*_TFT).DL(VERTEX2II(12 + 300 + 12 + 144, 62 + 58 + 12 + 58, 0, 0)); |
Ksenia | 0:9db07391e780 | 93 | (*_TFT).DL(COLOR_RGB(255, 255, 255)); |
Ksenia | 0:9db07391e780 | 94 | CreateStringRussian("Температура"); |
Ksenia | 0:9db07391e780 | 95 | (*_TFT).Text(12 + 300 + 12 + 10, 62 + 58 + 12 + 5, 4, 0, russianStr); |
Ksenia | 0:9db07391e780 | 96 | CreateStringRussian("за сутки"); |
Ksenia | 0:9db07391e780 | 97 | (*_TFT).Text(12 + 300 + 12 + 10, 62 + 58 + 12 + 27, 4, 0, russianStr); |
Ksenia | 0:9db07391e780 | 98 | (*_TFT).DL(TAG_MASK(0)); |
Ksenia | 0:9db07391e780 | 99 | |
Ksenia | 0:9db07391e780 | 100 | // create black rectangle tagged as ABOUT_PRESS |
Ksenia | 0:9db07391e780 | 101 | (*_TFT).DL(TAG_MASK(1)); |
Ksenia | 0:9db07391e780 | 102 | (*_TFT).DL(TAG(ABOUT_PRESS)); |
Ksenia | 0:9db07391e780 | 103 | (*_TFT).DL(COLOR_RGB(36, 36, 36)); |
Ksenia | 0:9db07391e780 | 104 | // if rectangle is already pressed, draw it lighter |
Ksenia | 0:9db07391e780 | 105 | if (pressedButton == ABOUT_PRESS) { |
Ksenia | 0:9db07391e780 | 106 | (*_TFT).DL(COLOR_RGB(56, 56, 56)); |
Ksenia | 0:9db07391e780 | 107 | } |
Ksenia | 0:9db07391e780 | 108 | (*_TFT).DL(BEGIN(RECTS)); |
Ksenia | 0:9db07391e780 | 109 | (*_TFT).DL(VERTEX2II(12 + 300 + 12, 62 + 58 + 12 + 58 + 12, 0, 0)); |
Ksenia | 0:9db07391e780 | 110 | (*_TFT).DL(VERTEX2II(12 + 300 + 12 + 144, 62 + 58 + 12 + 58 + 12 + 58, 0, 0)); |
Ksenia | 0:9db07391e780 | 111 | (*_TFT).DL(COLOR_RGB(255, 255, 255)); |
Ksenia | 0:9db07391e780 | 112 | CreateStringRussian("О датчике"); |
Ksenia | 0:9db07391e780 | 113 | (*_TFT).Text(12 + 144 + 12 + 144 + 12 + 10, 62 + 58 + 12 + 58 + 12 + 5, 4, 0, russianStr); |
Ksenia | 0:9db07391e780 | 114 | (*_TFT).DL(TAG_MASK(0)); |
Ksenia | 0:9db07391e780 | 115 | |
Ksenia | 0:9db07391e780 | 116 | // finish FT800 display list |
Ksenia | 0:9db07391e780 | 117 | FinishDL(); |
Ksenia | 0:9db07391e780 | 118 | } |