Measuring air flow, relative humidity & temperature, then showing results at TFT

Dependencies:   FT800_2 HYT mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Draw_MainScreen.cpp Source File

Draw_MainScreen.cpp

00001 #include "Display.h"
00002 
00003 /**************************************************************************************************************************
00004 ************************** Display Main Menu ******************************************************************************
00005 **************************************************************************************************************************/
00006 void Display::MainScreen()
00007 {
00008     uint8_t numberOfGraphs = showHumidity + showFlow + showTemperature;
00009 
00010     // start FT800 display list
00011     StartDL();
00012 
00013     /****************************************************************************************************/
00014     (*_TFT).DL(SET_BACKGROUND_COLOR);
00015     (*_TFT).DL(TAG_MASK(1));
00016     (*_TFT).DL(TAG(SHOW_HUMIDITY));
00017     (*_TFT).DL(BEGIN(RECTS));
00018     (*_TFT).DL(VERTEX2II(0, 0, 0, 0));
00019     (*_TFT).DL(VERTEX2II(0 + BUTTON_1_WIDTH + X_LEFT_OFFSET, Y_UPPER_OFFSET + BUTTON_HEIGHT + Y_UPPER_OFFSET, 0, 0));
00020     (*_TFT).DL(END());
00021     (*_TFT).DL(TAG_MASK(0));
00022 
00023     (*_TFT).DL(TAG_MASK(1));
00024     (*_TFT).DL(TAG(SHOW_FLOW));
00025     (*_TFT).DL(BEGIN(RECTS));
00026     (*_TFT).DL(VERTEX2II(X_LEFT_OFFSET + BUTTON_1_WIDTH + X_LEFT_OFFSET / 2, 0, 0, 0));
00027     (*_TFT).DL(VERTEX2II(X_LEFT_OFFSET + BUTTON_1_WIDTH + X_LEFT_OFFSET + BUTTON_2_WIDTH + X_LEFT_OFFSET / 2, Y_UPPER_OFFSET + BUTTON_HEIGHT + Y_UPPER_OFFSET, 0, 0));
00028     (*_TFT).DL(END());
00029     (*_TFT).DL(TAG_MASK(0));
00030 
00031     (*_TFT).DL(TAG_MASK(1));
00032     (*_TFT).DL(TAG(SHOW_TEMPERATURE));
00033     (*_TFT).DL(BEGIN(RECTS));
00034     (*_TFT).DL(VERTEX2II(X_LEFT_OFFSET + BUTTON_1_WIDTH + X_LEFT_OFFSET + BUTTON_2_WIDTH + X_LEFT_OFFSET / 2, 0, 0, 0));
00035     (*_TFT).DL(VERTEX2II(X_LEFT_OFFSET + BUTTON_1_WIDTH + X_LEFT_OFFSET + BUTTON_2_WIDTH + X_LEFT_OFFSET + BUTTON_3_WIDTH + X_LEFT_OFFSET / 2, Y_UPPER_OFFSET + BUTTON_HEIGHT + Y_UPPER_OFFSET, 0, 0));
00036     (*_TFT).DL(END());
00037     (*_TFT).DL(TAG_MASK(0));
00038 
00039     /****************************************************************************************************/
00040     if (showHumidity) {
00041         (*_TFT).DL(SET_HUMIDITY_COLOR);
00042     } else {
00043         (*_TFT).DL(SET_HUMIDITY_LOW_COLOR);
00044     }
00045     (*_TFT).DL(BEGIN(RECTS));
00046     (*_TFT).DL(VERTEX2II(X_LEFT_OFFSET, Y_UPPER_OFFSET, 0, 0));
00047     (*_TFT).DL(VERTEX2II(X_LEFT_OFFSET + BUTTON_1_WIDTH, Y_UPPER_OFFSET + BUTTON_HEIGHT, 0, 0));
00048     (*_TFT).DL(END());
00049     if (showHumidity) {
00050         (*_TFT).DL(SET_HUMIDITY_LOW_COLOR);
00051         (*_TFT).DL(BEGIN(LINES));
00052         (*_TFT).DL(VERTEX2II(X_LEFT_OFFSET, Y_UPPER_OFFSET + BUTTON_HEIGHT, 0, 0));
00053         (*_TFT).DL(VERTEX2II(X_LEFT_OFFSET + BUTTON_1_WIDTH, Y_UPPER_OFFSET + BUTTON_HEIGHT, 0, 0));
00054         (*_TFT).DL(END());
00055         (*_TFT).DL(BEGIN(LINES));
00056         (*_TFT).DL(VERTEX2II(X_LEFT_OFFSET, Y_UPPER_OFFSET, 0, 0));
00057         (*_TFT).DL(VERTEX2II(X_LEFT_OFFSET, Y_UPPER_OFFSET + BUTTON_HEIGHT, 0, 0));
00058         (*_TFT).DL(END());
00059         (*_TFT).DL(SET_WHITE_COLOR);
00060     } else {
00061         (*_TFT).DL(COLOR_RGB(100, 100, 100));
00062     }
00063     CreateStringRussian("Отн. влажность");
00064     (*_TFT).Text(X_LEFT_OFFSET + 5, Y_UPPER_OFFSET + 5, 4, 0, russianStr);
00065 
00066 
00067     (*_TFT).DL(SET_FLOW_COLOR);
00068     if (showFlow)
00069         (*_TFT).DL(SET_FLOW_COLOR);
00070     else
00071         (*_TFT).DL(SET_FLOW_LOW_COLOR);
00072     (*_TFT).DL(BEGIN(RECTS));
00073     (*_TFT).DL(VERTEX2II(X_LEFT_OFFSET + BUTTON_1_WIDTH + X_LEFT_OFFSET, Y_UPPER_OFFSET, 0, 0));
00074     (*_TFT).DL(VERTEX2II(X_LEFT_OFFSET + BUTTON_1_WIDTH + X_LEFT_OFFSET + BUTTON_2_WIDTH, Y_UPPER_OFFSET + BUTTON_HEIGHT, 0, 0));
00075     (*_TFT).DL(END());
00076     if (showFlow) {
00077         (*_TFT).DL(SET_FLOW_LOW_COLOR);
00078         (*_TFT).DL(BEGIN(LINES));
00079         (*_TFT).DL(VERTEX2II(X_LEFT_OFFSET + BUTTON_1_WIDTH + X_LEFT_OFFSET, Y_UPPER_OFFSET + BUTTON_HEIGHT, 0, 0));
00080         (*_TFT).DL(VERTEX2II(X_LEFT_OFFSET + BUTTON_1_WIDTH + X_LEFT_OFFSET + BUTTON_2_WIDTH, Y_UPPER_OFFSET + BUTTON_HEIGHT, 0, 0));
00081         (*_TFT).DL(END());
00082         (*_TFT).DL(BEGIN(LINES));
00083         (*_TFT).DL(VERTEX2II(X_LEFT_OFFSET + BUTTON_1_WIDTH + X_LEFT_OFFSET, Y_UPPER_OFFSET, 0, 0));
00084         (*_TFT).DL(VERTEX2II(X_LEFT_OFFSET + BUTTON_1_WIDTH + X_LEFT_OFFSET, Y_UPPER_OFFSET + BUTTON_HEIGHT, 0, 0));
00085         (*_TFT).DL(END());
00086         (*_TFT).DL(SET_WHITE_COLOR);
00087     } else {
00088         (*_TFT).DL(COLOR_RGB(100, 100, 100));
00089     }
00090     CreateStringRussian("Скорость потока");
00091     (*_TFT).Text(X_LEFT_OFFSET + BUTTON_1_WIDTH + X_LEFT_OFFSET + 5, Y_UPPER_OFFSET + 5, 4, 0, russianStr);
00092 
00093 
00094     if (showTemperature)
00095         (*_TFT).DL(SET_TEMPERATURE_COLOR);
00096     else
00097         (*_TFT).DL(SET_TEMPERATURE_LOW_COLOR);
00098     (*_TFT).DL(BEGIN(RECTS));
00099     (*_TFT).DL(VERTEX2II(X_LEFT_OFFSET + BUTTON_1_WIDTH + X_LEFT_OFFSET + BUTTON_2_WIDTH + X_LEFT_OFFSET, Y_UPPER_OFFSET, 0, 0));
00100     (*_TFT).DL(VERTEX2II(X_LEFT_OFFSET + BUTTON_1_WIDTH + X_LEFT_OFFSET + BUTTON_2_WIDTH + X_LEFT_OFFSET + BUTTON_3_WIDTH, Y_UPPER_OFFSET + BUTTON_HEIGHT, 0, 0));
00101     (*_TFT).DL(END());
00102     if (showTemperature) {
00103         (*_TFT).DL(SET_TEMPERATURE_LOW_COLOR);
00104         (*_TFT).DL(BEGIN(LINES));
00105         (*_TFT).DL(VERTEX2II(X_LEFT_OFFSET + BUTTON_1_WIDTH + X_LEFT_OFFSET + BUTTON_2_WIDTH + X_LEFT_OFFSET, Y_UPPER_OFFSET + BUTTON_HEIGHT, 0, 0));
00106         (*_TFT).DL(VERTEX2II(X_LEFT_OFFSET + BUTTON_1_WIDTH + X_LEFT_OFFSET + BUTTON_2_WIDTH + X_LEFT_OFFSET + BUTTON_3_WIDTH, Y_UPPER_OFFSET + BUTTON_HEIGHT, 0, 0));
00107         (*_TFT).DL(END());
00108         (*_TFT).DL(BEGIN(LINES));
00109         (*_TFT).DL(VERTEX2II(X_LEFT_OFFSET + BUTTON_1_WIDTH + X_LEFT_OFFSET + BUTTON_2_WIDTH + X_LEFT_OFFSET, Y_UPPER_OFFSET, 0, 0));
00110         (*_TFT).DL(VERTEX2II(X_LEFT_OFFSET + BUTTON_1_WIDTH + X_LEFT_OFFSET + BUTTON_2_WIDTH + X_LEFT_OFFSET, Y_UPPER_OFFSET + BUTTON_HEIGHT, 0, 0));
00111         (*_TFT).DL(END());
00112         (*_TFT).DL(SET_WHITE_COLOR);
00113     } else {
00114         (*_TFT).DL(COLOR_RGB(100, 100, 100));
00115     }
00116     CreateStringRussian("Температура");
00117     (*_TFT).Text(X_LEFT_OFFSET + BUTTON_1_WIDTH + X_LEFT_OFFSET + BUTTON_2_WIDTH + X_LEFT_OFFSET + 5, Y_UPPER_OFFSET + 5, 4, 0, russianStr);
00118 
00119 
00120 /****************************************************************************************************/
00121     if (showTemperature) {
00122         (*_TFT).DL(BEGIN(EDGE_STRIP_B));
00123         for (int i = 0; i <= POINTS_NUMBER; i++) {
00124             if (i <= current_X) {
00125                 (*_TFT).DL(COLOR_RGB(210,255,2016));
00126                 (*_TFT).DL(VERTEX2II((i * X_AXIS_MULTIPLIER + X_LEFT_OFFSET), my_DispHeight - temperature_Y[i], 0, 0));
00127             }
00128         }
00129     }
00130     if (showHumidity) {
00131         (*_TFT).DL(BEGIN(EDGE_STRIP_B));
00132         for (int i = 0; i <= POINTS_NUMBER; i++) {
00133             if (i <= current_X) {
00134                 (*_TFT).DL(COLOR_RGB(184,213,255));
00135                 (*_TFT).DL(VERTEX2II((i * X_AXIS_MULTIPLIER + X_LEFT_OFFSET), my_DispHeight - humidity_Y[i], 0, 0));
00136             }
00137         }
00138     }
00139     if (showFlow) {
00140         (*_TFT).DL(BEGIN(EDGE_STRIP_B));
00141         for (int i = 0; i <= POINTS_NUMBER; i++) {
00142             if (i <= current_X) {
00143                 (*_TFT).DL(COLOR_RGB(255,198,255));
00144                 (*_TFT).DL(VERTEX2II((i * X_AXIS_MULTIPLIER + X_LEFT_OFFSET), my_DispHeight - flow_Y[i], 0, 0));
00145             }
00146         }
00147     }
00148 
00149 /****************************************************************************************************/
00150     if (numberOfGraphs != 1) {
00151         HorisontalGrid();
00152     } else {
00153         if (showHumidity)
00154             HorisontalGrid_Humidity();
00155         if (showFlow)
00156             HorisontalGrid_Flow();
00157         if (showTemperature)
00158             HorisontalGrid_Temperature();
00159     }
00160     
00161     VerticalGrid();
00162 
00163 /****************************************************************************************************/
00164     for (int i = 0; i <= POINTS_NUMBER; i++) {
00165         (*_TFT).DL(BEGIN(POINTS));
00166         (*_TFT).DL(POINT_SIZE(40));
00167         if (i <= current_X || i >= current_X + 13) {
00168             (*_TFT).DL(SET_HUMIDITY_COLOR);
00169             if (showHumidity)
00170                 (*_TFT).DL(VERTEX2II((i * X_AXIS_MULTIPLIER + X_LEFT_OFFSET), my_DispHeight - humidity_Y[i], 0, 0));
00171             (*_TFT).DL(SET_FLOW_COLOR);
00172             if (showFlow)
00173                 (*_TFT).DL(VERTEX2II((i * X_AXIS_MULTIPLIER + X_LEFT_OFFSET), my_DispHeight - flow_Y[i], 0, 0));
00174             (*_TFT).DL(SET_TEMPERATURE_COLOR);
00175             if (showTemperature)
00176                 (*_TFT).DL(VERTEX2II((i * X_AXIS_MULTIPLIER + X_LEFT_OFFSET), my_DispHeight - temperature_Y[i], 0, 0));
00177         }
00178         (*_TFT).DL(END());
00179     }
00180 
00181 /****************************************************************************************************/
00182     (*_TFT).DL(SET_HUMIDITY_COLOR);
00183     if (showHumidity)
00184         (*_TFT).Text((current_X * X_AXIS_MULTIPLIER + X_LEFT_OFFSET), my_DispHeight - humidity_Y[current_X] - 25, 4, 0, humidityStr);
00185     (*_TFT).DL(SET_FLOW_COLOR);
00186     if (showFlow)
00187         (*_TFT).Text((current_X * X_AXIS_MULTIPLIER + X_LEFT_OFFSET), my_DispHeight - flow_Y[current_X] - 25, 4, 0, flowStr);
00188     (*_TFT).DL(SET_TEMPERATURE_COLOR);
00189     if (showTemperature)
00190         (*_TFT).Text((current_X * X_AXIS_MULTIPLIER + X_LEFT_OFFSET), my_DispHeight - temperature_Y[current_X] - 25, 4, 0, temperatureStr);
00191 
00192 /****************************************************************************************************/
00193 //    (*_TFT).Number(my_DispWidth - 25, my_DispHeight - 150, 27, 0, sec / 60);
00194 //    (*_TFT).Number(my_DispWidth - 25, my_DispHeight - 135, 27, 0, sec % 60);
00195 
00196 /****************************************************************************************************/
00197     (*_TFT).DL(SCISSOR_XY(0, my_DispHeight - Y_BOTTOM_OFFSET + 3));
00198     (*_TFT).DL(SCISSOR_SIZE(X_LEFT_OFFSET + (POINTS_NUMBER * X_AXIS_MULTIPLIER + 5), Y_BOTTOM_OFFSET - 3));
00199     (*_TFT).Gradient(0, my_DispHeight, BACKGROUND_COLOR, X_LEFT_OFFSET + (POINTS_NUMBER * X_AXIS_MULTIPLIER + 5), my_DispHeight - Y_BOTTOM_OFFSET + 3, BACKGROUND_COLOR);
00200 
00201 
00202     // finish FT801 display list
00203     FinishDL();
00204 }