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