Русифицированная версия программы для измерения температуры и отн. влажности и вывода информации на сенсорный TFT

Dependencies:   FT800_2 HYT mbed

Компоненты

Подключение

Отладочная плата к TFT-модулю

Отладочная плата подключается к модулю через переходник Break Out Board 20. На плате-переходнике используется 6 сигналов: SCK, MOSI, MISO, SS (интерфейс SPI), PD (powerdown) и INT (interrupt).

Питание должно быть подано не только на VDD, но и на BLVDD - подсветку экрана. Соответствующие выводы можно просто соединить между собой:

/media/uploads/Ksenia/4_-5-.jpg

Отладочная плата к датчику серии HYT

К датчику отладочная плата подключается по I2C. Не забываем про подтяжку к питанию:

/media/uploads/Ksenia/freshpaint-20-2016.09.16-10.37.03.png

Демонстрация работы

Процесс создания приложения подробно описан тут: https://habrahabr.ru/users/uuuulala/topics/

Committer:
Ksenia
Date:
Wed Oct 12 10:53:35 2016 +0000
Revision:
1:8ca8a4ecbe6b
Parent:
0:9db07391e780
?????? ??????? ? ?????? ?????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ksenia 0:9db07391e780 1 #include "display.h"
Ksenia 0:9db07391e780 2
Ksenia 0:9db07391e780 3 /**************************************************************************************************************************
Ksenia 0:9db07391e780 4 ************************** Transform humiditity / temperature float value to string ***************************************
Ksenia 0:9db07391e780 5 **************************************************************************************************************************/
Ksenia 0:9db07391e780 6 // If isTemp = 0, resulting string includes
Ksenia 0:9db07391e780 7 // 1. current humididty
Ksenia 0:9db07391e780 8 // 3. " %"
Ksenia 0:9db07391e780 9
Ksenia 0:9db07391e780 10 // If isTemp = 1, resulting string includes
Ksenia 0:9db07391e780 11 // 1. "-" (optional),
Ksenia 0:9db07391e780 12 // 2. current temperature with decimal mark
Ksenia 0:9db07391e780 13 // 3. " С"
Ksenia 0:9db07391e780 14
Ksenia 0:9db07391e780 15 // Returns offset using for placing degree sign
Ksenia 0:9db07391e780 16 char Display::CreateStringTempHum(char *str, float number, bool isTemp)
Ksenia 0:9db07391e780 17 {
Ksenia 0:9db07391e780 18 char offsetForDegreeSign;
Ksenia 0:9db07391e780 19 short int multipedNumber = (short int)(number * 100);
Ksenia 0:9db07391e780 20 char strCnt = 0;
Ksenia 0:9db07391e780 21 if (isTemp) {
Ksenia 0:9db07391e780 22 if (multipedNumber < 0) {
Ksenia 0:9db07391e780 23 multipedNumber = -multipedNumber;
Ksenia 0:9db07391e780 24 str[strCnt] = '-';
Ksenia 0:9db07391e780 25 strCnt++;
Ksenia 0:9db07391e780 26 }
Ksenia 0:9db07391e780 27 }
Ksenia 0:9db07391e780 28 if (multipedNumber >= 10000) {
Ksenia 0:9db07391e780 29 str[strCnt] = '0' + (multipedNumber % 100000) / 10000;
Ksenia 0:9db07391e780 30 strCnt++;
Ksenia 0:9db07391e780 31 }
Ksenia 0:9db07391e780 32 if (multipedNumber >= 1000) {
Ksenia 0:9db07391e780 33 str[strCnt] = '0' + (multipedNumber % 10000) / 1000;
Ksenia 0:9db07391e780 34 strCnt++;
Ksenia 0:9db07391e780 35 }
Ksenia 0:9db07391e780 36 if (multipedNumber >= 100) {
Ksenia 0:9db07391e780 37 str[strCnt] = '0' + (multipedNumber % 1000) / 100;
Ksenia 0:9db07391e780 38 strCnt++;
Ksenia 0:9db07391e780 39 }
Ksenia 0:9db07391e780 40 if (isTemp) {
Ksenia 0:9db07391e780 41 str[strCnt] = '.';
Ksenia 0:9db07391e780 42 strCnt++;
Ksenia 0:9db07391e780 43 str[strCnt] = '0' + (multipedNumber % 100) / 10;
Ksenia 0:9db07391e780 44 strCnt++;
Ksenia 0:9db07391e780 45 str[strCnt] = ' ';
Ksenia 0:9db07391e780 46 strCnt++;
Ksenia 0:9db07391e780 47 offsetForDegreeSign = strCnt;
Ksenia 0:9db07391e780 48 str[strCnt] = 'C';
Ksenia 0:9db07391e780 49 strCnt++;
Ksenia 0:9db07391e780 50 } else {
Ksenia 0:9db07391e780 51 str[strCnt] = '%';
Ksenia 0:9db07391e780 52 strCnt++;
Ksenia 0:9db07391e780 53 }
Ksenia 0:9db07391e780 54 str[strCnt] = 0;
Ksenia 0:9db07391e780 55
Ksenia 0:9db07391e780 56 return offsetForDegreeSign;
Ksenia 0:9db07391e780 57 }
Ksenia 0:9db07391e780 58
Ksenia 0:9db07391e780 59
Ksenia 0:9db07391e780 60 /**************************************************************************************************************************
Ksenia 0:9db07391e780 61 ************************** Transform multiplied temperature value to string ***********************************************
Ksenia 0:9db07391e780 62 **************************************************************************************************************************/
Ksenia 0:9db07391e780 63 // Resulting string includes
Ksenia 0:9db07391e780 64 // 1. "-" (optional),
Ksenia 0:9db07391e780 65 // 2. current temperature with decimal mark
Ksenia 0:9db07391e780 66 void Display::CreateStringMultipliedTemp(char *str, short int number)
Ksenia 0:9db07391e780 67 {
Ksenia 0:9db07391e780 68 char strCnt = 0;
Ksenia 0:9db07391e780 69 if (number < 0) {
Ksenia 0:9db07391e780 70 number = -number;
Ksenia 0:9db07391e780 71 str[strCnt] = '-';
Ksenia 0:9db07391e780 72 strCnt++;
Ksenia 0:9db07391e780 73 }
Ksenia 0:9db07391e780 74 if (number >= 1000) {
Ksenia 0:9db07391e780 75 str[strCnt] = '0' + (number % 10000) / 1000;
Ksenia 0:9db07391e780 76 strCnt++;
Ksenia 0:9db07391e780 77 }
Ksenia 0:9db07391e780 78 if (number >= 100) {
Ksenia 0:9db07391e780 79 str[strCnt] = '0' + (number % 1000) / 100;
Ksenia 0:9db07391e780 80 strCnt++;
Ksenia 0:9db07391e780 81 }
Ksenia 0:9db07391e780 82 if (number >= 10) {
Ksenia 0:9db07391e780 83 str[strCnt] = '0' + (number % 100) / 10;
Ksenia 0:9db07391e780 84 strCnt++;
Ksenia 0:9db07391e780 85 }
Ksenia 0:9db07391e780 86 str[strCnt] = '.';
Ksenia 0:9db07391e780 87 strCnt++;
Ksenia 0:9db07391e780 88 str[strCnt] = '0' + (number % 100) / 10;
Ksenia 0:9db07391e780 89 strCnt++;
Ksenia 0:9db07391e780 90 str[strCnt] = 0;
Ksenia 0:9db07391e780 91 }
Ksenia 0:9db07391e780 92
Ksenia 0:9db07391e780 93
Ksenia 0:9db07391e780 94 /**************************************************************************************************************************
Ksenia 0:9db07391e780 95 ************************** Transform number of seconds to HH:MM:SS string *************************************************
Ksenia 0:9db07391e780 96 **************************************************************************************************************************/
Ksenia 0:9db07391e780 97 void Display::CreateStringTime(char *str, uint32_t numberOfSeconds)
Ksenia 0:9db07391e780 98 {
Ksenia 0:9db07391e780 99 char hrs = (numberOfSeconds / 3600);
Ksenia 0:9db07391e780 100 if (hrs < 10) {
Ksenia 0:9db07391e780 101 str[0] = '0';
Ksenia 0:9db07391e780 102 } else {
Ksenia 0:9db07391e780 103 str[0] = '0' + hrs / 10;
Ksenia 0:9db07391e780 104 }
Ksenia 0:9db07391e780 105 str[1] = '0' + hrs % 10;
Ksenia 0:9db07391e780 106 str[2] = ':';
Ksenia 0:9db07391e780 107 char minutes = (numberOfSeconds / 60) % 60;
Ksenia 0:9db07391e780 108 if (minutes < 10) {
Ksenia 0:9db07391e780 109 str[3] = '0';
Ksenia 0:9db07391e780 110 } else {
Ksenia 0:9db07391e780 111 str[3] = '0' + minutes / 10;
Ksenia 0:9db07391e780 112 }
Ksenia 0:9db07391e780 113 str[4] = '0' + minutes % 10;
Ksenia 0:9db07391e780 114 str[5] = ':';
Ksenia 0:9db07391e780 115 char sec = numberOfSeconds % 60;
Ksenia 0:9db07391e780 116 if (sec < 10) {
Ksenia 0:9db07391e780 117 str[6] = '0';
Ksenia 0:9db07391e780 118 } else {
Ksenia 0:9db07391e780 119 str[6] = '0' + sec / 10;
Ksenia 0:9db07391e780 120 }
Ksenia 0:9db07391e780 121 str[7] = '0' + sec % 10;
Ksenia 0:9db07391e780 122 str[8] = 0;
Ksenia 0:9db07391e780 123 }
Ksenia 0:9db07391e780 124
Ksenia 0:9db07391e780 125 void Display::CreateStringRussian(const string rustext)
Ksenia 0:9db07391e780 126 {
Ksenia 0:9db07391e780 127 // CHANGED ASCII:
Ksenia 1:8ca8a4ecbe6b 128 // 0123456789АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя.,:-°±%<>rHYTICS
Ksenia 0:9db07391e780 129 int len = rustext.length();
Ksenia 0:9db07391e780 130 int j = 0;
Ksenia 0:9db07391e780 131 for (int i = 0; i < len; i ++) {
Ksenia 0:9db07391e780 132 uint16_t res = uint8_t(rustext[i]);
Ksenia 0:9db07391e780 133 if (res > 0x7F) {
Ksenia 0:9db07391e780 134 res = res << 8 | uint8_t(rustext[i + 1]);
Ksenia 0:9db07391e780 135 // АБВ ... ноп
Ksenia 0:9db07391e780 136 if ((res >= 0xD090) && (res <= 0xD0BF)) {
Ksenia 0:9db07391e780 137 char offset = (char)(res - 0xD090);
Ksenia 1:8ca8a4ecbe6b 138 russianStr[j] = 32 + 11 + offset;
Ksenia 0:9db07391e780 139 // рст ... эюя
Ksenia 0:9db07391e780 140 } else if ((res >= 0xD180) && (res <= 0xD18F)) {
Ksenia 0:9db07391e780 141 char offset = (char)(res - 0xD180);
Ksenia 1:8ca8a4ecbe6b 142 russianStr[j] = 32 + 59 + offset;
Ksenia 0:9db07391e780 143 }
Ksenia 0:9db07391e780 144 // Degree sign
Ksenia 0:9db07391e780 145 else if (res == 0xC2B0) {
Ksenia 1:8ca8a4ecbe6b 146 russianStr[j] = 32 + 79;
Ksenia 0:9db07391e780 147 }
Ksenia 0:9db07391e780 148 // Plus-minus sign
Ksenia 0:9db07391e780 149 else if (res == 0xC2B1) {
Ksenia 1:8ca8a4ecbe6b 150 russianStr[j] = 32 + 80;
Ksenia 0:9db07391e780 151 }
Ksenia 0:9db07391e780 152 i++;
Ksenia 0:9db07391e780 153 } else {
Ksenia 1:8ca8a4ecbe6b 154 // Space
Ksenia 1:8ca8a4ecbe6b 155 if (res == 0x20) {
Ksenia 1:8ca8a4ecbe6b 156 russianStr[j] = 32;
Ksenia 0:9db07391e780 157 }
Ksenia 1:8ca8a4ecbe6b 158 // Numbers
Ksenia 1:8ca8a4ecbe6b 159 else if (res >= 0x30 && res <= 0x39) {
Ksenia 1:8ca8a4ecbe6b 160 russianStr[j] = 32 + 1 + (res - 0x30);
Ksenia 0:9db07391e780 161 }
Ksenia 1:8ca8a4ecbe6b 162 // .
Ksenia 0:9db07391e780 163 else if (res == 0x2E) {
Ksenia 1:8ca8a4ecbe6b 164 russianStr[j] = 32 + 75;
Ksenia 0:9db07391e780 165 }
Ksenia 1:8ca8a4ecbe6b 166 // ,
Ksenia 0:9db07391e780 167 else if (res == 0x2C) {
Ksenia 1:8ca8a4ecbe6b 168 russianStr[j] = 32 + 76;
Ksenia 0:9db07391e780 169 }
Ksenia 0:9db07391e780 170 // :
Ksenia 0:9db07391e780 171 else if (res == 0x3A) {
Ksenia 1:8ca8a4ecbe6b 172 russianStr[j] = 32 + 77;
Ksenia 1:8ca8a4ecbe6b 173 }
Ksenia 1:8ca8a4ecbe6b 174 // -
Ksenia 1:8ca8a4ecbe6b 175 else if (res == 0x2D) {
Ksenia 1:8ca8a4ecbe6b 176 russianStr[j] = 32 + 78;
Ksenia 0:9db07391e780 177 }
Ksenia 0:9db07391e780 178 // %
Ksenia 0:9db07391e780 179 else if (res == 0x25) {
Ksenia 1:8ca8a4ecbe6b 180 russianStr[j] = 32 + 81;
Ksenia 0:9db07391e780 181 }
Ksenia 0:9db07391e780 182 // <
Ksenia 0:9db07391e780 183 else if (res == 0x3C) {
Ksenia 1:8ca8a4ecbe6b 184 russianStr[j] = 32 + 82;
Ksenia 0:9db07391e780 185 }
Ksenia 1:8ca8a4ecbe6b 186 // >
Ksenia 1:8ca8a4ecbe6b 187 else if (res == 0x3C) {
Ksenia 1:8ca8a4ecbe6b 188 russianStr[j] = 32 + 83;
Ksenia 0:9db07391e780 189 }
Ksenia 0:9db07391e780 190 // "r"
Ksenia 0:9db07391e780 191 else if (res == 0x72) {
Ksenia 1:8ca8a4ecbe6b 192 russianStr[j] = 32 + 84;
Ksenia 0:9db07391e780 193 }
Ksenia 0:9db07391e780 194 // "H"
Ksenia 0:9db07391e780 195 else if (res == 0x48) {
Ksenia 1:8ca8a4ecbe6b 196 russianStr[j] = 32 + 85;
Ksenia 0:9db07391e780 197 }
Ksenia 0:9db07391e780 198 // "Y"
Ksenia 0:9db07391e780 199 else if (res == 0x59) {
Ksenia 1:8ca8a4ecbe6b 200 russianStr[j] = 32 + 86;
Ksenia 0:9db07391e780 201 }
Ksenia 0:9db07391e780 202 // "T"
Ksenia 0:9db07391e780 203 else if (res == 0x54) {
Ksenia 1:8ca8a4ecbe6b 204 russianStr[j] = 32 + 87;
Ksenia 0:9db07391e780 205 }
Ksenia 0:9db07391e780 206 // "I"
Ksenia 0:9db07391e780 207 else if (res == 0x49) {
Ksenia 1:8ca8a4ecbe6b 208 russianStr[j] = 32 + 88;
Ksenia 0:9db07391e780 209 }
Ksenia 0:9db07391e780 210 // "C"
Ksenia 0:9db07391e780 211 else if (res == 0x43) {
Ksenia 1:8ca8a4ecbe6b 212 russianStr[j] = 32 + 89;
Ksenia 0:9db07391e780 213 }
Ksenia 0:9db07391e780 214 // "S"
Ksenia 0:9db07391e780 215 else if (res == 0x53) {
Ksenia 1:8ca8a4ecbe6b 216 russianStr[j] = 32 + 90;
Ksenia 0:9db07391e780 217 }
Ksenia 0:9db07391e780 218 }
Ksenia 0:9db07391e780 219 j++;
Ksenia 0:9db07391e780 220 }
Ksenia 0:9db07391e780 221 russianStr[j] = 0;
Ksenia 0:9db07391e780 222 }