Русифицированная версия программы для измерения температуры и отн. влажности и вывода информации на сенсорный 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.StringsTransform.cpp
- Committer:
- Ksenia
- Date:
- 2016-10-12
- Revision:
- 1:8ca8a4ecbe6b
- Parent:
- 0:9db07391e780
File content as of revision 1:8ca8a4ecbe6b:
#include "display.h"
/**************************************************************************************************************************
************************** Transform humiditity / temperature float value to string ***************************************
**************************************************************************************************************************/
// If isTemp = 0, resulting string includes
// 1. current humididty
// 3. " %"
// If isTemp = 1, resulting string includes
// 1. "-" (optional),
// 2. current temperature with decimal mark
// 3. " С"
// Returns offset using for placing degree sign
char Display::CreateStringTempHum(char *str, float number, bool isTemp)
{
char offsetForDegreeSign;
short int multipedNumber = (short int)(number * 100);
char strCnt = 0;
if (isTemp) {
if (multipedNumber < 0) {
multipedNumber = -multipedNumber;
str[strCnt] = '-';
strCnt++;
}
}
if (multipedNumber >= 10000) {
str[strCnt] = '0' + (multipedNumber % 100000) / 10000;
strCnt++;
}
if (multipedNumber >= 1000) {
str[strCnt] = '0' + (multipedNumber % 10000) / 1000;
strCnt++;
}
if (multipedNumber >= 100) {
str[strCnt] = '0' + (multipedNumber % 1000) / 100;
strCnt++;
}
if (isTemp) {
str[strCnt] = '.';
strCnt++;
str[strCnt] = '0' + (multipedNumber % 100) / 10;
strCnt++;
str[strCnt] = ' ';
strCnt++;
offsetForDegreeSign = strCnt;
str[strCnt] = 'C';
strCnt++;
} else {
str[strCnt] = '%';
strCnt++;
}
str[strCnt] = 0;
return offsetForDegreeSign;
}
/**************************************************************************************************************************
************************** Transform multiplied temperature value to string ***********************************************
**************************************************************************************************************************/
// Resulting string includes
// 1. "-" (optional),
// 2. current temperature with decimal mark
void Display::CreateStringMultipliedTemp(char *str, short int number)
{
char strCnt = 0;
if (number < 0) {
number = -number;
str[strCnt] = '-';
strCnt++;
}
if (number >= 1000) {
str[strCnt] = '0' + (number % 10000) / 1000;
strCnt++;
}
if (number >= 100) {
str[strCnt] = '0' + (number % 1000) / 100;
strCnt++;
}
if (number >= 10) {
str[strCnt] = '0' + (number % 100) / 10;
strCnt++;
}
str[strCnt] = '.';
strCnt++;
str[strCnt] = '0' + (number % 100) / 10;
strCnt++;
str[strCnt] = 0;
}
/**************************************************************************************************************************
************************** Transform number of seconds to HH:MM:SS string *************************************************
**************************************************************************************************************************/
void Display::CreateStringTime(char *str, uint32_t numberOfSeconds)
{
char hrs = (numberOfSeconds / 3600);
if (hrs < 10) {
str[0] = '0';
} else {
str[0] = '0' + hrs / 10;
}
str[1] = '0' + hrs % 10;
str[2] = ':';
char minutes = (numberOfSeconds / 60) % 60;
if (minutes < 10) {
str[3] = '0';
} else {
str[3] = '0' + minutes / 10;
}
str[4] = '0' + minutes % 10;
str[5] = ':';
char sec = numberOfSeconds % 60;
if (sec < 10) {
str[6] = '0';
} else {
str[6] = '0' + sec / 10;
}
str[7] = '0' + sec % 10;
str[8] = 0;
}
void Display::CreateStringRussian(const string rustext)
{
// CHANGED ASCII:
// 0123456789АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя.,:-°±%<>rHYTICS
int len = rustext.length();
int j = 0;
for (int i = 0; i < len; i ++) {
uint16_t res = uint8_t(rustext[i]);
if (res > 0x7F) {
res = res << 8 | uint8_t(rustext[i + 1]);
// АБВ ... ноп
if ((res >= 0xD090) && (res <= 0xD0BF)) {
char offset = (char)(res - 0xD090);
russianStr[j] = 32 + 11 + offset;
// рст ... эюя
} else if ((res >= 0xD180) && (res <= 0xD18F)) {
char offset = (char)(res - 0xD180);
russianStr[j] = 32 + 59 + offset;
}
// Degree sign
else if (res == 0xC2B0) {
russianStr[j] = 32 + 79;
}
// Plus-minus sign
else if (res == 0xC2B1) {
russianStr[j] = 32 + 80;
}
i++;
} else {
// Space
if (res == 0x20) {
russianStr[j] = 32;
}
// Numbers
else if (res >= 0x30 && res <= 0x39) {
russianStr[j] = 32 + 1 + (res - 0x30);
}
// .
else if (res == 0x2E) {
russianStr[j] = 32 + 75;
}
// ,
else if (res == 0x2C) {
russianStr[j] = 32 + 76;
}
// :
else if (res == 0x3A) {
russianStr[j] = 32 + 77;
}
// -
else if (res == 0x2D) {
russianStr[j] = 32 + 78;
}
// %
else if (res == 0x25) {
russianStr[j] = 32 + 81;
}
// <
else if (res == 0x3C) {
russianStr[j] = 32 + 82;
}
// >
else if (res == 0x3C) {
russianStr[j] = 32 + 83;
}
// "r"
else if (res == 0x72) {
russianStr[j] = 32 + 84;
}
// "H"
else if (res == 0x48) {
russianStr[j] = 32 + 85;
}
// "Y"
else if (res == 0x59) {
russianStr[j] = 32 + 86;
}
// "T"
else if (res == 0x54) {
russianStr[j] = 32 + 87;
}
// "I"
else if (res == 0x49) {
russianStr[j] = 32 + 88;
}
// "C"
else if (res == 0x43) {
russianStr[j] = 32 + 89;
}
// "S"
else if (res == 0x53) {
russianStr[j] = 32 + 90;
}
}
j++;
}
russianStr[j] = 0;
}