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