Русифицированная версия программы для измерения температуры и отн. влажности и вывода информации на сенсорный 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/
main.cpp
- Committer:
- Ksenia
- Date:
- 2016-10-12
- Revision:
- 1:8ca8a4ecbe6b
- Parent:
- 0:9db07391e780
File content as of revision 1:8ca8a4ecbe6b:
#include "mbed.h" #include "FT_Platform.h" #include "HYT.h" #include "display.h" #include "statistics.h" Ticker timeKeeping; volatile uint64_t seconds = 0; uint64_t secondsOffset = 0; HYT SENSOR (PD6, PD7); // sda, scl [SLSTK3400A] FT800 TFT (PE10, PE11, PE12, PE13, PB11, PD4); // mosi, miso, sck, ss, int, pd [SLSTK3400A] //HYT SENSOR (D14, D15); // sda, scl [WIZwiki-W7500P] //FT800 TFT (D11, D12, D13, D10, D9, D8); // mosi, miso, sck, ss, int, pd [WIZwiki-W7500P] //HYT SENSOR (PA08, PA09); // sda, scl [ATSAMD21-XPRO] //FT800 TFT (PA18, PA16, PA19, PA17, PA20, PA21); // mosi, miso, sck, ss, int, pd [ATSAMD21-XPRO] Display disp(&TFT); Statistics stat; /************************************************************************************************************************** ************************** Update statistics data every second ************************************************************ **************************************************************************************************************************/ void secondsCallback(void) { if (seconds != 0) { secondsOffset = stat.UpdateStatistics(SENSOR.humidity, SENSOR.temperature, seconds, secondsOffset); } else { stat.InitValues(SENSOR.humidity, SENSOR.temperature); } seconds ++; } /************************************************************************************************************************** ************************** HYT sensor polling cycle *********************************************************************** **************************************************************************************************************************/ void dataUpdate(void) { SENSOR.MRCommand(); wait_ms(100); SENSOR.DFCommand(); } /************************************************************************************************************************** ************************** Main function ********************************************************************************** **************************************************************************************************************************/ int main() { timeKeeping.attach(&secondsCallback, 1.0f); disp.LoadImagesAndFonts(); disp.HandleAllBitmaps(); disp.Calibration(); disp.activeScreen = MENU_SCREEN; disp.pressedButton = NONE_PRESS; // change active screen depending on pressed area while(1) { dataUpdate(); disp.pressedButton = disp.GetTouch(); // ---------------------------------------------------------------------------------------------- // Main menu screen if (disp.activeScreen == MENU_SCREEN) { disp.MainMenu(SENSOR.humidity, SENSOR.temperature); if (disp.pressedButton) { wait_ms(150); if (disp.pressedButton == CURR_TEMP_PRESS) { disp.activeScreen = CURR_TEMP_SCREEN; } else if (disp.pressedButton == CURR_HUM_PRESS) { disp.activeScreen = CURR_HUM_SCREEN; } else if (disp.pressedButton == STAT_HUM_PRESS) { disp.activeScreen = HUM_24HRS_SCREEN; } else if (disp.pressedButton == STAT_TEMP_PRESS) { disp.activeScreen = TEMP_24HRS_SCREEN; } else if (disp.pressedButton == ABOUT_PRESS) { disp.activeScreen = ABOUT_SCREEN; } disp.pressedButton = NONE_PRESS; } // ---------------------------------------------------------------------------------------------- // Any other screen } else { // ---------------------------------------------------------------------------------------------- // You can back to main menu from any screen if (disp.pressedButton == MENU_PRESS) { disp.pressedButton = NONE_PRESS; disp.activeScreen = MENU_SCREEN; } else { // ---------------------------------------------------------------------------------------------- // Screen with current temperature if (disp.activeScreen == CURR_TEMP_SCREEN) { disp.CurrentTemperature(SENSOR.temperature); // ---------------------------------------------------------------------------------------------- // Screen with current humidity } else if (disp.activeScreen == CURR_HUM_SCREEN) { disp.CurrentHumidity(SENSOR.humidity); // ---------------------------------------------------------------------------------------------- // Screens with humidity statistics } else if (disp.activeScreen == HUM_24HRS_SCREEN) { disp.StatHumidity_24hrs(seconds, stat.humidity24hrs, secondsOffset); if (disp.pressedButton >= ZONE_1_PRESS && disp.pressedButton <= ZONE_8_PRESS) { wait_ms(150); disp.activeScreen = HUM_3HRS_SCREEN; disp.pressedButton = NONE_PRESS; } } else if (disp.activeScreen == HUM_3HRS_SCREEN) { disp.StatHumidity_3hrs(seconds, stat.humidity24hrs, secondsOffset); if (disp.pressedButton >= ZONE_1_PRESS && disp.pressedButton <= ZONE_6_PRESS) { wait_ms(150); disp.activeScreen = HUM_30MIN_SCREEN; disp.pressedButton = NONE_PRESS; } } else if (disp.activeScreen == HUM_30MIN_SCREEN) { disp.StatHumidity_30min(seconds, stat.humidity24hrs, secondsOffset); if (disp.pressedButton == STAT_HUM_PRESS) { disp.activeScreen = HUM_24HRS_SCREEN; disp.pressedButton = NONE_PRESS; } // ---------------------------------------------------------------------------------------------- // Screens with humidity statistics } else if (disp.activeScreen == TEMP_24HRS_SCREEN) { disp.StatTemperature_24hrs(seconds, stat.temperature24hrs, secondsOffset); if (disp.pressedButton >= ZONE_1_PRESS && disp.pressedButton <= ZONE_8_PRESS) { wait_ms(150); disp.activeScreen = TEMP_3HRS_SCREEN; disp.pressedButton = NONE_PRESS; } } else if (disp.activeScreen == TEMP_3HRS_SCREEN) { disp.StatTemperature_3hrs(seconds, stat.temperature24hrs, secondsOffset); if (disp.pressedButton >= ZONE_1_PRESS && disp.pressedButton <= ZONE_6_PRESS) { wait_ms(150); disp.activeScreen = TEMP_30MIN_SCREEN; disp.pressedButton = NONE_PRESS; } } else if (disp.activeScreen == TEMP_30MIN_SCREEN) { disp.StatTemperature_30min(seconds, stat.temperature24hrs, secondsOffset); if (disp.pressedButton == STAT_TEMP_PRESS) { disp.activeScreen = TEMP_24HRS_SCREEN; disp.pressedButton = NONE_PRESS; } // ---------------------------------------------------------------------------------------------- // Screens with information about sensor } else if (disp.activeScreen == ABOUT_SCREEN) { disp.AboutSensor(); } } } } }