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 "statistics.h"
Ksenia 0:5d3131d1b142 2
Ksenia 0:5d3131d1b142 3 /**************************************************************************************************************************
Ksenia 0:5d3131d1b142 4 ************************** Main function called every second **************************************************************
Ksenia 0:5d3131d1b142 5 **************************************************************************************************************************/
Ksenia 0:5d3131d1b142 6 uint64_t Statistics::UpdateStatistics(float humidity, float temperature, uint64_t seconds, uint64_t changeSecondsOffset)
Ksenia 0:5d3131d1b142 7 {
Ksenia 0:5d3131d1b142 8 short int secondsIn5min = (seconds % 300); // 0..299
Ksenia 0:5d3131d1b142 9 if (secondsIn5min == 0) {
Ksenia 0:5d3131d1b142 10 changeSecondsOffset = Update24hrsData(changeSecondsOffset);
Ksenia 0:5d3131d1b142 11 }
Ksenia 0:5d3131d1b142 12 CalculateHumididty(humidity, secondsIn5min);
Ksenia 0:5d3131d1b142 13 CalculateTemperature(temperature, secondsIn5min);
Ksenia 0:5d3131d1b142 14
Ksenia 0:5d3131d1b142 15 // changeSecondsOffset is nessesary for changing time-grid if more then 24 hours left since devise was turned on
Ksenia 0:5d3131d1b142 16 return changeSecondsOffset;
Ksenia 0:5d3131d1b142 17 }
Ksenia 0:5d3131d1b142 18
Ksenia 0:5d3131d1b142 19 /**************************************************************************************************************************
Ksenia 0:5d3131d1b142 20 ************************** Update average, minimum and maximum humidity in current five-minute interval ****************
Ksenia 0:5d3131d1b142 21 **************************************************************************************************************************/
Ksenia 0:5d3131d1b142 22 void Statistics::CalculateHumididty(float humidity, short int secondsIn5min)
Ksenia 0:5d3131d1b142 23 {
Ksenia 0:5d3131d1b142 24 humidity5min[secondsIn5min] = humidity;
Ksenia 0:5d3131d1b142 25 humidity5minSum += humidity5min[secondsIn5min];
Ksenia 0:5d3131d1b142 26 humidity5minAverage = humidity5minSum / (secondsIn5min + 1);
Ksenia 0:5d3131d1b142 27
Ksenia 0:5d3131d1b142 28 if (humidity5min[secondsIn5min] > humidity5minMax || humidity5minMax == INIT_STATISTICS_NUMBER) {
Ksenia 0:5d3131d1b142 29 humidity5minMax = humidity5min[secondsIn5min];
Ksenia 0:5d3131d1b142 30 }
Ksenia 0:5d3131d1b142 31 if (humidity5min[secondsIn5min] < humidity5minMin || humidity5minMin == INIT_STATISTICS_NUMBER) {
Ksenia 0:5d3131d1b142 32 humidity5minMin = humidity5min[secondsIn5min];
Ksenia 0:5d3131d1b142 33 }
Ksenia 0:5d3131d1b142 34 }
Ksenia 0:5d3131d1b142 35
Ksenia 0:5d3131d1b142 36 /**************************************************************************************************************************
Ksenia 0:5d3131d1b142 37 ************************** Update average, minimum and maximum temperature in current five-minute interval ****************
Ksenia 0:5d3131d1b142 38 **************************************************************************************************************************/
Ksenia 0:5d3131d1b142 39 void Statistics::CalculateTemperature(float temperature, short int secondsIn5min)
Ksenia 0:5d3131d1b142 40 {
Ksenia 0:5d3131d1b142 41 // we use TEMPERATURE_MULTIPLIER = 10 for store temperatures tenths in integer values
Ksenia 0:5d3131d1b142 42 temperature5min[secondsIn5min] = temperature * TEMPERATURE_MULTIPLIER;
Ksenia 0:5d3131d1b142 43 temperature5minSum += temperature5min[secondsIn5min];
Ksenia 0:5d3131d1b142 44 temperature5minAverage = temperature5minSum / (secondsIn5min + 1);
Ksenia 0:5d3131d1b142 45
Ksenia 0:5d3131d1b142 46 if (temperature5min[secondsIn5min] > temperature5minMax || temperature5minMax == INIT_STATISTICS_NUMBER) {
Ksenia 0:5d3131d1b142 47 temperature5minMax = temperature5min[secondsIn5min];
Ksenia 0:5d3131d1b142 48 }
Ksenia 0:5d3131d1b142 49 if (temperature5min[secondsIn5min] < temperature5minMin || temperature5minMin == INIT_STATISTICS_NUMBER) {
Ksenia 0:5d3131d1b142 50 temperature5minMin = temperature5min[secondsIn5min];
Ksenia 0:5d3131d1b142 51 }
Ksenia 0:5d3131d1b142 52 }
Ksenia 0:5d3131d1b142 53
Ksenia 0:5d3131d1b142 54 /**************************************************************************************************************************
Ksenia 0:5d3131d1b142 55 ************************** Update humidity24hrs[][] and temperature24hrs[][] after each five-minute interval **************
Ksenia 0:5d3131d1b142 56 **************************************************************************************************************************/
Ksenia 0:5d3131d1b142 57 uint64_t Statistics::Update24hrsData(uint64_t changeSecondsOffset)
Ksenia 0:5d3131d1b142 58 {
Ksenia 0:5d3131d1b142 59 // after each five-minute interval we moving to next value if it's availiable
Ksenia 0:5d3131d1b142 60 // OR shifting the entire array and update just last value if 24 hrs are already gone
Ksenia 0:5d3131d1b142 61 if (Counter24hrs < 287) {
Ksenia 0:5d3131d1b142 62 Counter24hrs ++;
Ksenia 0:5d3131d1b142 63 } else {
Ksenia 0:5d3131d1b142 64 for (int i = 0; i < 288; i++) {
Ksenia 0:5d3131d1b142 65 humidity24hrs[0][i] = humidity24hrs[0][i + 1];
Ksenia 0:5d3131d1b142 66 humidity24hrs[1][i] = humidity24hrs[1][i + 1];
Ksenia 0:5d3131d1b142 67 humidity24hrs[2][i] = humidity24hrs[2][i + 1];
Ksenia 0:5d3131d1b142 68 temperature24hrs[0][i] = temperature24hrs[0][i + 1];
Ksenia 0:5d3131d1b142 69 temperature24hrs[1][i] = temperature24hrs[1][i + 1];
Ksenia 0:5d3131d1b142 70 temperature24hrs[2][i] = temperature24hrs[2][i + 1];
Ksenia 0:5d3131d1b142 71 }
Ksenia 0:5d3131d1b142 72 Counter24hrs = 287;
Ksenia 0:5d3131d1b142 73 changeSecondsOffset += 300;
Ksenia 0:5d3131d1b142 74 }
Ksenia 0:5d3131d1b142 75
Ksenia 0:5d3131d1b142 76 // update the current value
Ksenia 0:5d3131d1b142 77 humidity24hrs[0][Counter24hrs] = humidity5minAverage;
Ksenia 0:5d3131d1b142 78 humidity24hrs[1][Counter24hrs] = humidity5minMin;
Ksenia 0:5d3131d1b142 79 humidity24hrs[2][Counter24hrs] = humidity5minMax;
Ksenia 0:5d3131d1b142 80 temperature24hrs[0][Counter24hrs] = temperature5minAverage;
Ksenia 0:5d3131d1b142 81 temperature24hrs[1][Counter24hrs] = temperature5minMin;
Ksenia 0:5d3131d1b142 82 temperature24hrs[2][Counter24hrs] = temperature5minMax;
Ksenia 0:5d3131d1b142 83
Ksenia 0:5d3131d1b142 84 // initialize all values using for calculations "inside" five-minute interval
Ksenia 0:5d3131d1b142 85 for (int i = 0; i < 300; i++) {
Ksenia 0:5d3131d1b142 86 humidity5min[i] = INIT_STATISTICS_NUMBER;
Ksenia 0:5d3131d1b142 87 temperature5min[i] = INIT_STATISTICS_NUMBER;
Ksenia 0:5d3131d1b142 88 }
Ksenia 0:5d3131d1b142 89 humidity5minSum = 0;
Ksenia 0:5d3131d1b142 90 humidity5minMax = INIT_STATISTICS_NUMBER;
Ksenia 0:5d3131d1b142 91 humidity5minMin = INIT_STATISTICS_NUMBER;
Ksenia 0:5d3131d1b142 92 temperature5minSum = 0;
Ksenia 0:5d3131d1b142 93 temperature5minMax = INIT_STATISTICS_NUMBER;
Ksenia 0:5d3131d1b142 94 temperature5minMin = INIT_STATISTICS_NUMBER;
Ksenia 0:5d3131d1b142 95
Ksenia 0:5d3131d1b142 96 // changeSecondsOffset is nessesary for changing time-grid if more then 24 hours left since devise was turned on
Ksenia 0:5d3131d1b142 97 return changeSecondsOffset;
Ksenia 0:5d3131d1b142 98 }
Ksenia 0:5d3131d1b142 99
Ksenia 0:5d3131d1b142 100 /**************************************************************************************************************************
Ksenia 0:5d3131d1b142 101 ************************** Initialization for all statistics values and arrays ********************************************
Ksenia 0:5d3131d1b142 102 **************************************************************************************************************************/
Ksenia 0:5d3131d1b142 103 void Statistics::InitValues(float humidity, float temperature)
Ksenia 0:5d3131d1b142 104 {
Ksenia 0:5d3131d1b142 105 for (int i = 0; i < 300; i++) {
Ksenia 0:5d3131d1b142 106 humidity5min[i] = INIT_STATISTICS_NUMBER;
Ksenia 0:5d3131d1b142 107 temperature5min[i] = INIT_STATISTICS_NUMBER;
Ksenia 0:5d3131d1b142 108 }
Ksenia 0:5d3131d1b142 109 for (int i = 0; i < 288; i++) {
Ksenia 0:5d3131d1b142 110 humidity24hrs[0][i] = INIT_STATISTICS_NUMBER;
Ksenia 0:5d3131d1b142 111 humidity24hrs[1][i] = INIT_STATISTICS_NUMBER;
Ksenia 0:5d3131d1b142 112 humidity24hrs[2][i] = INIT_STATISTICS_NUMBER;
Ksenia 0:5d3131d1b142 113 temperature24hrs[0][i] = INIT_STATISTICS_NUMBER;
Ksenia 0:5d3131d1b142 114 temperature24hrs[1][i] = INIT_STATISTICS_NUMBER;
Ksenia 0:5d3131d1b142 115 temperature24hrs[2][i] = INIT_STATISTICS_NUMBER;
Ksenia 0:5d3131d1b142 116 }
Ksenia 0:5d3131d1b142 117 humidity5min[0] = humidity;
Ksenia 0:5d3131d1b142 118 humidity5minMin = humidity;
Ksenia 0:5d3131d1b142 119 humidity5minMax = humidity;
Ksenia 0:5d3131d1b142 120 humidity24hrs[0][0] = humidity;
Ksenia 0:5d3131d1b142 121 humidity24hrs[1][0] = humidity;
Ksenia 0:5d3131d1b142 122 humidity24hrs[2][0] = humidity;
Ksenia 0:5d3131d1b142 123
Ksenia 0:5d3131d1b142 124 temperature5min[0] = temperature * TEMPERATURE_MULTIPLIER;
Ksenia 0:5d3131d1b142 125 temperature5minMin = temperature * TEMPERATURE_MULTIPLIER;
Ksenia 0:5d3131d1b142 126 temperature5minMax = temperature * TEMPERATURE_MULTIPLIER;
Ksenia 0:5d3131d1b142 127 temperature24hrs[0][0] = temperature * TEMPERATURE_MULTIPLIER;
Ksenia 0:5d3131d1b142 128 temperature24hrs[1][0] = temperature * TEMPERATURE_MULTIPLIER;
Ksenia 0:5d3131d1b142 129 temperature24hrs[2][0] = temperature * TEMPERATURE_MULTIPLIER;
Ksenia 0:5d3131d1b142 130
Ksenia 0:5d3131d1b142 131 Counter24hrs = 0;
Ksenia 0:5d3131d1b142 132 }