Русифицированная версия программы для измерения температуры и отн. влажности и вывода информации на сенсорный 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-07
- Revision:
- 0:9db07391e780
- Child:
- 1:8ca8a4ecbe6b
File content as of revision 0:9db07391e780:
#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] = offset + 32 + 11; // рст ... эюя } else if ((res >= 0xD180) && (res <= 0xD18F)) { char offset = (char)(res - 0xD180); russianStr[j] = offset + 32 + 59; } // Degree sign else if (res == 0xC2B0) { russianStr[j] = 80 + 32; } // Plus-minus sign else if (res == 0xC2B1) { russianStr[j] = 81 + 32; } i++; } else { // Numbers if (res >= 0x30 && res <= 0x39) { russianStr[j] = (res - 0x30) + 1 + 32; } // Space else if (res == 0x20) { russianStr[j] = 75 + 32; } // Dot else if (res == 0x2E) { russianStr[j] = 76 + 32; } // Coma else if (res == 0x2C) { russianStr[j] = 77 + 32; } // : else if (res == 0x3A) { russianStr[j] = 78 + 32; } // % else if (res == 0x25) { russianStr[j] = 82 + 32; } // < else if (res == 0x3C) { russianStr[j] = 83 + 32; } // Hyphen / minus else if (res == 0x2D) { russianStr[j] = 79 + 32; } // "r" else if (res == 0x72) { russianStr[j] = 85 + 32; } // "H" else if (res == 0x48) { russianStr[j] = 86 + 32; } // "Y" else if (res == 0x59) { russianStr[j] = 87 + 32; } // "T" else if (res == 0x54) { russianStr[j] = 88 + 32; } // "I" else if (res == 0x49) { russianStr[j] = 89 + 32; } // "C" else if (res == 0x43) { russianStr[j] = 90 + 32; } // "S" else if (res == 0x53) { russianStr[j] = 91 + 32; } } j++; } russianStr[j] = 0; }