Русифицированная версия программы для измерения температуры и отн. влажности и вывода информации на сенсорный 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 "mbed.h"
Ksenia 0:9db07391e780 2 #include "FT_Platform.h"
Ksenia 0:9db07391e780 3 #include "HYT.h"
Ksenia 0:9db07391e780 4 #include "display.h"
Ksenia 0:9db07391e780 5 #include "statistics.h"
Ksenia 0:9db07391e780 6
Ksenia 0:9db07391e780 7 Ticker timeKeeping;
Ksenia 0:9db07391e780 8 volatile uint64_t seconds = 0;
Ksenia 0:9db07391e780 9 uint64_t secondsOffset = 0;
Ksenia 0:9db07391e780 10
Ksenia 0:9db07391e780 11 HYT SENSOR (PD6, PD7); // sda, scl [SLSTK3400A]
Ksenia 0:9db07391e780 12 FT800 TFT (PE10, PE11, PE12, PE13, PB11, PD4); // mosi, miso, sck, ss, int, pd [SLSTK3400A]
Ksenia 0:9db07391e780 13 //HYT SENSOR (D14, D15); // sda, scl [WIZwiki-W7500P]
Ksenia 0:9db07391e780 14 //FT800 TFT (D11, D12, D13, D10, D9, D8); // mosi, miso, sck, ss, int, pd [WIZwiki-W7500P]
Ksenia 0:9db07391e780 15 //HYT SENSOR (PA08, PA09); // sda, scl [ATSAMD21-XPRO]
Ksenia 0:9db07391e780 16 //FT800 TFT (PA18, PA16, PA19, PA17, PA20, PA21); // mosi, miso, sck, ss, int, pd [ATSAMD21-XPRO]
Ksenia 0:9db07391e780 17
Ksenia 0:9db07391e780 18 Display disp(&TFT);
Ksenia 0:9db07391e780 19 Statistics stat;
Ksenia 0:9db07391e780 20
Ksenia 0:9db07391e780 21 /**************************************************************************************************************************
Ksenia 0:9db07391e780 22 ************************** Update statistics data every second ************************************************************
Ksenia 0:9db07391e780 23 **************************************************************************************************************************/
Ksenia 0:9db07391e780 24 void secondsCallback(void)
Ksenia 0:9db07391e780 25 {
Ksenia 0:9db07391e780 26 if (seconds != 0) {
Ksenia 0:9db07391e780 27 secondsOffset = stat.UpdateStatistics(SENSOR.humidity, SENSOR.temperature, seconds, secondsOffset);
Ksenia 0:9db07391e780 28 } else {
Ksenia 0:9db07391e780 29 stat.InitValues(SENSOR.humidity, SENSOR.temperature);
Ksenia 0:9db07391e780 30 }
Ksenia 0:9db07391e780 31 seconds ++;
Ksenia 0:9db07391e780 32 }
Ksenia 0:9db07391e780 33
Ksenia 0:9db07391e780 34 /**************************************************************************************************************************
Ksenia 0:9db07391e780 35 ************************** HYT sensor polling cycle ***********************************************************************
Ksenia 0:9db07391e780 36 **************************************************************************************************************************/
Ksenia 0:9db07391e780 37 void dataUpdate(void)
Ksenia 0:9db07391e780 38 {
Ksenia 0:9db07391e780 39 SENSOR.MRCommand();
Ksenia 0:9db07391e780 40 wait_ms(100);
Ksenia 0:9db07391e780 41 SENSOR.DFCommand();
Ksenia 0:9db07391e780 42 }
Ksenia 0:9db07391e780 43
Ksenia 0:9db07391e780 44 /**************************************************************************************************************************
Ksenia 0:9db07391e780 45 ************************** Main function **********************************************************************************
Ksenia 0:9db07391e780 46 **************************************************************************************************************************/
Ksenia 0:9db07391e780 47 int main()
Ksenia 0:9db07391e780 48 {
Ksenia 0:9db07391e780 49 timeKeeping.attach(&secondsCallback, 1.0f);
Ksenia 0:9db07391e780 50
Ksenia 0:9db07391e780 51 disp.LoadImagesAndFonts();
Ksenia 0:9db07391e780 52 disp.HandleAllBitmaps();
Ksenia 0:9db07391e780 53 disp.Calibration();
Ksenia 0:9db07391e780 54
Ksenia 0:9db07391e780 55 disp.activeScreen = MENU_SCREEN;
Ksenia 0:9db07391e780 56 disp.pressedButton = NONE_PRESS;
Ksenia 0:9db07391e780 57
Ksenia 0:9db07391e780 58 // change active screen depending on pressed area
Ksenia 0:9db07391e780 59 while(1) {
Ksenia 0:9db07391e780 60 dataUpdate();
Ksenia 0:9db07391e780 61 disp.pressedButton = disp.GetTouch();
Ksenia 0:9db07391e780 62
Ksenia 0:9db07391e780 63 // ----------------------------------------------------------------------------------------------
Ksenia 0:9db07391e780 64 // Main menu screen
Ksenia 0:9db07391e780 65 if (disp.activeScreen == MENU_SCREEN) {
Ksenia 0:9db07391e780 66 disp.MainMenu(SENSOR.humidity, SENSOR.temperature);
Ksenia 0:9db07391e780 67 if (disp.pressedButton) {
Ksenia 0:9db07391e780 68 wait_ms(150);
Ksenia 0:9db07391e780 69 if (disp.pressedButton == CURR_TEMP_PRESS) {
Ksenia 0:9db07391e780 70 disp.activeScreen = CURR_TEMP_SCREEN;
Ksenia 0:9db07391e780 71 } else if (disp.pressedButton == CURR_HUM_PRESS) {
Ksenia 0:9db07391e780 72 disp.activeScreen = CURR_HUM_SCREEN;
Ksenia 0:9db07391e780 73 } else if (disp.pressedButton == STAT_HUM_PRESS) {
Ksenia 0:9db07391e780 74 disp.activeScreen = HUM_24HRS_SCREEN;
Ksenia 0:9db07391e780 75 } else if (disp.pressedButton == STAT_TEMP_PRESS) {
Ksenia 0:9db07391e780 76 disp.activeScreen = TEMP_24HRS_SCREEN;
Ksenia 0:9db07391e780 77 } else if (disp.pressedButton == ABOUT_PRESS) {
Ksenia 0:9db07391e780 78 disp.activeScreen = ABOUT_SCREEN;
Ksenia 0:9db07391e780 79 }
Ksenia 0:9db07391e780 80 disp.pressedButton = NONE_PRESS;
Ksenia 0:9db07391e780 81 }
Ksenia 0:9db07391e780 82
Ksenia 0:9db07391e780 83 // ----------------------------------------------------------------------------------------------
Ksenia 0:9db07391e780 84 // Any other screen
Ksenia 0:9db07391e780 85 } else {
Ksenia 0:9db07391e780 86 // ----------------------------------------------------------------------------------------------
Ksenia 0:9db07391e780 87 // You can back to main menu from any screen
Ksenia 0:9db07391e780 88 if (disp.pressedButton == MENU_PRESS) {
Ksenia 0:9db07391e780 89 disp.pressedButton = NONE_PRESS;
Ksenia 0:9db07391e780 90 disp.activeScreen = MENU_SCREEN;
Ksenia 0:9db07391e780 91 } else {
Ksenia 0:9db07391e780 92 // ----------------------------------------------------------------------------------------------
Ksenia 0:9db07391e780 93 // Screen with current temperature
Ksenia 0:9db07391e780 94 if (disp.activeScreen == CURR_TEMP_SCREEN) {
Ksenia 0:9db07391e780 95 disp.CurrentTemperature(SENSOR.temperature);
Ksenia 0:9db07391e780 96 // ----------------------------------------------------------------------------------------------
Ksenia 0:9db07391e780 97 // Screen with current humidity
Ksenia 0:9db07391e780 98 } else if (disp.activeScreen == CURR_HUM_SCREEN) {
Ksenia 0:9db07391e780 99 disp.CurrentHumidity(SENSOR.humidity);
Ksenia 0:9db07391e780 100 // ----------------------------------------------------------------------------------------------
Ksenia 0:9db07391e780 101 // Screens with humidity statistics
Ksenia 0:9db07391e780 102 } else if (disp.activeScreen == HUM_24HRS_SCREEN) {
Ksenia 0:9db07391e780 103 disp.StatHumidity_24hrs(seconds, stat.humidity24hrs, secondsOffset);
Ksenia 0:9db07391e780 104 if (disp.pressedButton >= ZONE_1_PRESS && disp.pressedButton <= ZONE_8_PRESS) {
Ksenia 0:9db07391e780 105 wait_ms(150);
Ksenia 0:9db07391e780 106 disp.activeScreen = HUM_3HRS_SCREEN;
Ksenia 0:9db07391e780 107 disp.pressedButton = NONE_PRESS;
Ksenia 0:9db07391e780 108 }
Ksenia 0:9db07391e780 109 } else if (disp.activeScreen == HUM_3HRS_SCREEN) {
Ksenia 0:9db07391e780 110 disp.StatHumidity_3hrs(seconds, stat.humidity24hrs, secondsOffset);
Ksenia 0:9db07391e780 111 if (disp.pressedButton >= ZONE_1_PRESS && disp.pressedButton <= ZONE_6_PRESS) {
Ksenia 0:9db07391e780 112 wait_ms(150);
Ksenia 0:9db07391e780 113 disp.activeScreen = HUM_30MIN_SCREEN;
Ksenia 0:9db07391e780 114 disp.pressedButton = NONE_PRESS;
Ksenia 0:9db07391e780 115 }
Ksenia 0:9db07391e780 116 } else if (disp.activeScreen == HUM_30MIN_SCREEN) {
Ksenia 0:9db07391e780 117 disp.StatHumidity_30min(seconds, stat.humidity24hrs, secondsOffset);
Ksenia 0:9db07391e780 118 if (disp.pressedButton == STAT_HUM_PRESS) {
Ksenia 0:9db07391e780 119 disp.activeScreen = HUM_24HRS_SCREEN;
Ksenia 0:9db07391e780 120 disp.pressedButton = NONE_PRESS;
Ksenia 0:9db07391e780 121 }
Ksenia 0:9db07391e780 122 // ----------------------------------------------------------------------------------------------
Ksenia 0:9db07391e780 123 // Screens with humidity statistics
Ksenia 0:9db07391e780 124 } else if (disp.activeScreen == TEMP_24HRS_SCREEN) {
Ksenia 0:9db07391e780 125 disp.StatTemperature_24hrs(seconds, stat.temperature24hrs, secondsOffset);
Ksenia 0:9db07391e780 126 if (disp.pressedButton >= ZONE_1_PRESS && disp.pressedButton <= ZONE_8_PRESS) {
Ksenia 0:9db07391e780 127 wait_ms(150);
Ksenia 0:9db07391e780 128 disp.activeScreen = TEMP_3HRS_SCREEN;
Ksenia 0:9db07391e780 129 disp.pressedButton = NONE_PRESS;
Ksenia 0:9db07391e780 130 }
Ksenia 0:9db07391e780 131 } else if (disp.activeScreen == TEMP_3HRS_SCREEN) {
Ksenia 0:9db07391e780 132 disp.StatTemperature_3hrs(seconds, stat.temperature24hrs, secondsOffset);
Ksenia 0:9db07391e780 133 if (disp.pressedButton >= ZONE_1_PRESS && disp.pressedButton <= ZONE_6_PRESS) {
Ksenia 0:9db07391e780 134 wait_ms(150);
Ksenia 0:9db07391e780 135 disp.activeScreen = TEMP_30MIN_SCREEN;
Ksenia 0:9db07391e780 136 disp.pressedButton = NONE_PRESS;
Ksenia 0:9db07391e780 137 }
Ksenia 0:9db07391e780 138 } else if (disp.activeScreen == TEMP_30MIN_SCREEN) {
Ksenia 0:9db07391e780 139 disp.StatTemperature_30min(seconds, stat.temperature24hrs, secondsOffset);
Ksenia 0:9db07391e780 140 if (disp.pressedButton == STAT_TEMP_PRESS) {
Ksenia 0:9db07391e780 141 disp.activeScreen = TEMP_24HRS_SCREEN;
Ksenia 0:9db07391e780 142 disp.pressedButton = NONE_PRESS;
Ksenia 0:9db07391e780 143 }
Ksenia 0:9db07391e780 144 // ----------------------------------------------------------------------------------------------
Ksenia 0:9db07391e780 145 // Screens with information about sensor
Ksenia 0:9db07391e780 146 } else if (disp.activeScreen == ABOUT_SCREEN) {
Ksenia 0:9db07391e780 147 disp.AboutSensor();
Ksenia 0:9db07391e780 148 }
Ksenia 0:9db07391e780 149 }
Ksenia 0:9db07391e780 150 }
Ksenia 0:9db07391e780 151 }
Ksenia 0:9db07391e780 152 }