HYT humidity & temp sensor polling / showing received data at TFT with capacitive touchscreen
Dependencies: FT800_2 HYT mbed
display.Draw_CurrentValues.cpp
00001 #include "display.h" 00002 00003 /************************************************************************************************************************** 00004 ************************** Display real-time humidity ********************************************************************* 00005 **************************************************************************************************************************/ 00006 00007 void Display::CurrentHumidity(float humidity) 00008 { 00009 // accelerator for x-axis data output 00010 char accelerator = 6; 00011 // create string including current humididty and " %" 00012 CreateStringTempHum(humidityStr, humidity, 0); 00013 // write the new scalable (* 1.5) data to the next available array position 00014 currentHumidity_Y[currentHumidity_X] = (char)(humidity * 1.5); 00015 00016 // start FT800 display list 00017 StartDL(); 00018 00019 // draw bottom color for graph line 00020 (*_TFT).DL(COLOR_RGB(200, 200, 200)); 00021 (*_TFT).DL(BEGIN(EDGE_STRIP_B)); 00022 for (int i = 0; i < 68; i++) { 00023 if (currentHumidity_Y[i] != 0 && i <= currentHumidity_X) { 00024 (*_TFT).DL(VERTEX2F((i * accelerator + 15) * 16, (220 - currentHumidity_Y[i]) * 16)); 00025 } 00026 } 00027 00028 // draw horisontal grid for humidity (0 .. 100) 00029 HorisontalGrid_Current_Humidity(); 00030 00031 // draw main graph line 00032 (*_TFT).DL(COLOR_RGB(9, 0, 63)); 00033 (*_TFT).DL(BEGIN(POINTS)); 00034 (*_TFT).DL(POINT_SIZE(25)); 00035 for (int i = 0; i < 68; i++) { 00036 if (currentHumidity_Y[i] != 0 && (i < currentHumidity_X || i >= currentHumidity_X + 13)) { 00037 (*_TFT).DL(VERTEX2F((i * accelerator + 15) * 16, (222 - currentHumidity_Y[i]) * 16)); 00038 } 00039 } 00040 00041 // draw subtitle for main graph line 00042 (*_TFT).DL(COLOR_RGB(255, 255, 255)); 00043 (*_TFT).DL(BEGIN(RECTS)); 00044 (*_TFT).DL(VERTEX2II((currentHumidity_X * accelerator + 40) + 25, (200 - currentHumidity_Y[currentHumidity_X]), 0, 0)); 00045 (*_TFT).DL(VERTEX2II((currentHumidity_X * accelerator + 40), (177 - currentHumidity_Y[currentHumidity_X]), 0, 0)); 00046 (*_TFT).DL(COLOR_RGB(255, 0, 0)); 00047 (*_TFT).Text((currentHumidity_X * accelerator + 30), (180 - currentHumidity_Y[currentHumidity_X] - 7), 28, 0, humidityStr); 00048 (*_TFT).DL(BEGIN(LINES)); 00049 (*_TFT).DL(LINE_WIDTH(8)); 00050 (*_TFT).DL(VERTEX2F((currentHumidity_X * accelerator + 15) * 16, (220 - currentHumidity_Y[currentHumidity_X]) * 16)); 00051 (*_TFT).DL(VERTEX2F((currentHumidity_X * accelerator + 35) * 16, (200 - currentHumidity_Y[currentHumidity_X]) * 16)); 00052 (*_TFT).DL(COLOR_RGB(255, 30, 33)); 00053 (*_TFT).DL(BEGIN(POINTS)); 00054 (*_TFT).DL(POINT_SIZE(33)); 00055 (*_TFT).DL(VERTEX2F((currentHumidity_X * accelerator + 15) * 16, (220 - currentHumidity_Y[currentHumidity_X]) * 16)); 00056 (*_TFT).DL(END()); 00057 00058 // write main title 00059 (*_TFT).DL(COLOR_RGB(0, 0, 0)); 00060 (*_TFT).Text(11, 15, 30, 0, "Current humidity, rH"); 00061 00062 // clean the space under the plot, create link to the main menu 00063 (*_TFT).DL(SCISSOR_XY(15, 222)); 00064 (*_TFT).DL(SCISSOR_SIZE(420, 53)); 00065 (*_TFT).Gradient(0, 256, 0xFFFFFF, 450, 16, 0xFFFFFF); 00066 MainMenuReference(); 00067 00068 // finish FT800 display list 00069 FinishDL(); 00070 00071 // manage the index for array with real-time humidity 00072 if (currentHumidity_X >= 68) { 00073 currentHumidity_X = 0; 00074 } else { 00075 currentHumidity_X ++; 00076 } 00077 if (pressedButton == MENU_PRESS) { 00078 for (int i = 0; i < 68; i++) { 00079 currentHumidity_Y[i] = 0; 00080 currentHumidity_X = 0; 00081 } 00082 } 00083 } 00084 00085 /************************************************************************************************************************** 00086 ************************** Display real-time temperature ****************************************************************** 00087 **************************************************************************************************************************/ 00088 00089 void Display::CurrentTemperature(float temperature) 00090 { 00091 // accelerator for x-axis data output 00092 char accelerator = 6; 00093 // create string including current temperature with decimal mark and " С" 00094 char degreeOffset = CreateStringTempHum(temperatureStr, temperature, 1); 00095 // write the new scalable (* 0.88 + 45) data to the next available array position 00096 currentTemperature_Y[currentTemperature_X] = (char)(temperature * 0.88 + 45); 00097 00098 // start FT800 display list 00099 StartDL(); 00100 00101 // draw bottom color for graph line 00102 (*_TFT).DL(COLOR_RGB(200, 177, 199)); 00103 (*_TFT).DL(BEGIN(EDGE_STRIP_B)); 00104 for (int i = 0; i < 68; i++) { 00105 if (currentTemperature_Y[i] != 0 && i <= currentTemperature_X) { 00106 (*_TFT).DL(VERTEX2F((i * accelerator + 15) * 16, (220 - currentTemperature_Y[i]) * 16)); 00107 } 00108 } 00109 00110 // draw horisontal grid for temperature (-50 .. +125) 00111 HorisontalGrid_Current_Temperature(); 00112 00113 // draw main graph line 00114 (*_TFT).DL(COLOR_RGB(9, 0, 63)); 00115 (*_TFT).DL(BEGIN(POINTS)); 00116 (*_TFT).DL(POINT_SIZE(25)); 00117 for (int i = 0; i < 68; i++) { 00118 if (currentTemperature_Y[i] != 0 && (i < currentTemperature_X || i >= currentTemperature_X + 13)) { 00119 (*_TFT).DL(VERTEX2F((i * accelerator + 15) * 16, (222 - currentTemperature_Y[i]) * 16)); 00120 } 00121 } 00122 00123 // draw subtitle for main graph line 00124 (*_TFT).DL(COLOR_RGB(255, 255, 255)); 00125 (*_TFT).DL(BEGIN(RECTS)); 00126 (*_TFT).DL(VERTEX2II((currentTemperature_X * accelerator + 40) + 25, (200 - currentTemperature_Y[currentTemperature_X]), 0, 0)); 00127 (*_TFT).DL(VERTEX2II((currentTemperature_X * accelerator + 40), (177 - currentTemperature_Y[currentTemperature_X]), 0, 0)); 00128 (*_TFT).DL(COLOR_RGB(255, 0, 0)); 00129 (*_TFT).Text((currentTemperature_X * accelerator + 25), (173 - currentTemperature_Y[currentTemperature_X]), 28, 0, temperatureStr); 00130 (*_TFT).Text((currentTemperature_X * accelerator + 25) + (degreeOffset * 8 + 3), (173 - currentTemperature_Y[currentTemperature_X]) - 4, 20, 0, "o"); 00131 (*_TFT).DL(BEGIN(LINES)); 00132 (*_TFT).DL(LINE_WIDTH(8)); 00133 (*_TFT).DL(VERTEX2F((currentTemperature_X * accelerator + 15) * 16, (220 - currentTemperature_Y[currentTemperature_X]) * 16)); 00134 (*_TFT).DL(VERTEX2F((currentTemperature_X * accelerator + 35) * 16, (200 - currentTemperature_Y[currentTemperature_X]) * 16)); 00135 (*_TFT).DL(COLOR_RGB(255, 30, 33)); 00136 (*_TFT).DL(BEGIN(POINTS)); 00137 (*_TFT).DL(POINT_SIZE(33)); 00138 (*_TFT).DL(VERTEX2F((currentTemperature_X * accelerator + 15) * 16, (220 - currentTemperature_Y[currentTemperature_X]) * 16)); 00139 (*_TFT).DL(END()); 00140 00141 // write main title 00142 (*_TFT).DL(COLOR_RGB(0, 0, 0)); 00143 (*_TFT).Text(11, 15, 30, 0, "Current temperature"); 00144 00145 // clean the space under the plot, create link to the main menu 00146 (*_TFT).DL(SCISSOR_XY(15, 225)); 00147 (*_TFT).DL(SCISSOR_SIZE(420, 53)); 00148 (*_TFT).Gradient(0, 256, 0xFFFFFF, 450, 16, 0xFFFFFF); 00149 MainMenuReference(); 00150 00151 // finish FT800 display list 00152 FinishDL(); 00153 00154 if (currentTemperature_X >= 68) { 00155 currentTemperature_X = 0; 00156 } else { 00157 currentTemperature_X ++; 00158 } 00159 if (pressedButton == MENU_PRESS) { 00160 for (int i = 0; i < 68; i++) { 00161 currentTemperature_Y[i] = 0; 00162 currentTemperature_X = 0; 00163 } 00164 } 00165 }
Generated on Tue Jul 12 2022 20:15:53 by
1.7.2