HYT humidity & temp sensor polling / showing received data at TFT with capacitive touchscreen

Dependencies:   FT800_2 HYT mbed

HYT humidity & temperature sensor: polling and showing data at TFT via graphical controller FT800/FT801.

Hardware

For documentation on the FT800 library, please refer to the library pages.

Connection

MCU-board to TFT-module

MCU-board is connected to TFT-module via Break Out Board. You need 6 signals to connect: SCK, MOSI and MISO are connected to a SPI channel, SS is the chip select signal, PD work as powerdown and INT for interrupts from TFT to MCU.

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

You have to connect VDD to BLVDD at Break Out Board if you use the board:

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

MCU-board to HYT sensor

MCU-board is connected to sensor via I2C. Remember to use pull-up resisrors there:

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

Подробнее в статьях Как перестать бояться и полюбить mbed [Часть 1 - 5] на https://habrahabr.ru/users/uuuulala/topics/

Committer:
Ksenia
Date:
Fri Oct 07 11:08:19 2016 +0000
Revision:
0:5d3131d1b142
Initial commit;

Who changed what in which revision?

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