FT810 DISCO-429ZI
Dependencies: BSP_DISCO_F429ZI EEPROM_DISCO_F429ZI FT810_DISCO-F429ZI GYRO_DISCO_F429ZI KEYPAD_DISCO_F429ZI LCD_DISCO_F429ZI SDRAM_DISCO_F429ZI TS_DISCO_F429ZI mbed
main.cpp
00001 #include "mbed.h" 00002 #include "FT_Platform.h" 00003 #include "Image.h" 00004 #include "pictures.h" 00005 #include "mbcrc.h" 00006 #include "parameters.h" 00007 #include <string> 00008 00009 DigitalOut ho(PF_0); 00010 00011 typedef enum { 00012 NONE_PRESS, 00013 BUTTON_1_PRESS, 00014 BUTTON_2_PRESS, 00015 BUTTON_3_PRESS, 00016 BUTTON_LEFT, 00017 BUTTON_RIGHT, 00018 MENU_PRESS, 00019 } pressValues; 00020 00021 // all screens available in app 00022 typedef enum { 00023 MENU_SCREEN, 00024 AUTOMATIC_SCREEN, 00025 MANUAL_SCREEN, 00026 CALIBRATION_SCREEN, 00027 } screenValues; 00028 00029 char pressedButton; 00030 char activeScreen; 00031 00032 00033 void main_menu(void); 00034 void LoadImagesAndFonts(void); 00035 void HandleAllBitmaps(void); 00036 void StartDL(void); 00037 void FinishDL(void); 00038 void show_logo(void); 00039 void show_logo1(void); 00040 00041 unsigned char command[8]={0x03,0x06,0x20,0x00,0x00,0x01,0x00,0x00}; 00042 00043 Serial RS485(PA_9, PA_10); 00044 FT800 TFT( PE_6, PE_5, PE_2, PE_4, PC_13, PC_15); //(mosi, miso, sclk, ss, intr, pd ); 00045 00046 00047 00048 void send_command_to_RS485(unsigned char cmd) 00049 { 00050 RS485.format(8, Serial::None, 1); 00051 RS485.baud(9600); 00052 uint16_t crc16; 00053 crc16 = usMBCRC16( ( unsigned char * ) command, 6 ); 00054 command[5] = cmd; 00055 command[6] = ( unsigned char )( crc16 >> 8 ); 00056 command[7] = ( unsigned char )( crc16 & 0xFF ); 00057 00058 ho = 1; // En high 00059 RS485.putc(command[0]); // slave add 00060 RS485.putc(command[1]); // function code 00061 RS485.putc(command[2]); // Hi PDU add 00062 RS485.putc(command[3]); // low PDU add 00063 RS485.putc(command[4]); // Hi N reg 00064 RS485.putc(command[5]); // Lo N reg 00065 RS485.putc(command[6]); // Hi CRC 00066 RS485.putc(command[7]); // Lo CRC 00067 ho=0; // En low 00068 } 00069 00070 void CalibrationTS() 00071 { 00072 char calibration[25] = {98, 99, 0, 0, 182, 254, 255, 255, 245, 142, 248, 255, 117, 254, 255, 255, 34, 98, 0, 0, 123, 154, 248, 255}; //value for calibration TS, must be changed!!! 00073 for (int i = 0; i < 24; i++) { 00074 TFT.Wr8(REG_TOUCH_TRANSFORM_A + i, calibration[i]); 00075 } 00076 } 00077 00078 00079 void main_menu() 00080 { 00081 StartDL(); 00082 00083 TFT.DL(COLOR_RGB(0, 0, 0)); 00084 TFT.Text((TFT.DispWidth/2), TFT.DispHeight/24, 31, OPT_CENTERX, "Menu\0"); 00085 00086 TFT.DL(TAG_MASK(1)); 00087 TFT.DL(TAG(BUTTON_1_PRESS)); 00088 TFT.FgColor(0x703800); 00089 // if rectangle is already pressed, draw it lighter 00090 //if (pressedButton == BUTTON_1_PRESS) TFT.FgColor(0x387000); 00091 TFT.Button(100, 80, 600, 100, 31, 0, "Automatic mode"); //B1 00092 TFT.DL(TAG_MASK(0)); 00093 00094 TFT.DL(TAG_MASK(1)); 00095 TFT.DL(TAG(BUTTON_2_PRESS)); 00096 TFT.FgColor(0x387000); 00097 TFT.Button(100, 200, 600, 100, 31, 0, "Manual mode"); //B2 00098 TFT.DL(TAG_MASK(0)); 00099 00100 TFT.DL(TAG_MASK(1)); 00101 TFT.DL(TAG(BUTTON_3_PRESS)); 00102 TFT.FgColor(0x387000); 00103 TFT.Button(100, 320, 600, 100, 31, 0, "Calibration mode"); //B3 00104 TFT.DL(TAG_MASK(0)); 00105 00106 00107 TFT.Text((TFT.DispWidth/4), TFT.DispHeight*7.5/8, 28, OPT_CENTERX, "Button: \0"); // draw Text with font 31 00108 TFT.Number((TFT.DispWidth/2), (TFT.DispHeight*7.5/8),28,OPT_CENTERX, pressedButton); 00109 00110 FinishDL(); 00111 } 00112 00113 void automatic_menu() 00114 { 00115 StartDL(); 00116 00117 TFT.DL(TAG(0)); // assign TAG value 0 to everything else 00118 00119 TFT.DL(COLOR_RGB(0, 0, 0)); 00120 TFT.Text((TFT.DispWidth/2), TFT.DispHeight/24, 31, OPT_CENTERX, "Automatic mode\0"); 00121 00122 00123 //TFT.FgColor(0x703800); 00124 TFT.FgColor(0x387000); 00125 TFT.Button(100, 80, 100, 100, 31, 0, "<"); //B1 00126 TFT.FgColor(0x387000); 00127 TFT.Button(400, 80, 100, 100, 31, 0, ">"); //B2 00128 00129 00130 00131 TFT.Number((TFT.DispWidth/2), (TFT.DispHeight*7/8),31,OPT_CENTERX, pressedButton); 00132 00133 00134 TFT.Text((TFT.DispWidth/2), 80, 31, OPT_CENTERX, "Radius (mm):\0"); 00135 TFT.Text((TFT.DispWidth/2), 200, 31, OPT_CENTERX, "Number:\0"); 00136 TFT.Text((TFT.DispWidth/2), 320, 31, OPT_CENTERX, "Run out (mm):\0"); 00137 00138 00139 FinishDL(); 00140 } 00141 00142 void manual_menu() 00143 { 00144 StartDL(); 00145 00146 TFT.DL(COLOR_RGB(0, 0, 0)); 00147 TFT.Text((TFT.DispWidth/2), TFT.DispHeight/24, 31, OPT_CENTERX, "Manual mode\0"); 00148 00149 //display the screen 00150 FinishDL(); 00151 } 00152 00153 00154 void calibration_menu() 00155 { 00156 StartDL(); 00157 00158 TFT.DL(TAG(0)); // assign TAG value 0 to everything else 00159 00160 TFT.DL(COLOR_RGB(0, 0, 0)); 00161 TFT.Text((TFT.DispWidth/2), TFT.DispHeight/24, 31, OPT_CENTERX, "Calibration\0"); 00162 00163 //display the screen 00164 FinishDL(); 00165 } 00166 00167 void StartDL(void) 00168 { 00169 TFT.DLstart(); 00170 TFT.DL(CLEAR_COLOR_RGB(255, 255, 255)); 00171 TFT.DL(CLEAR(1, 1, 1)); 00172 } 00173 00174 void FinishDL(void) 00175 { 00176 TFT.DL(DISPLAY()); 00177 TFT.Swap(); 00178 TFT.Flush_Co_Buffer(); 00179 TFT.WaitCmdfifo_empty(); 00180 } 00181 00182 void show_logo(void) 00183 { 00184 /* 00185 TFT.WrCmd32(CMD_INFLATE); 00186 TFT.WrCmd32(IMAGE_ADDR_LOGO); 00187 TFT.WrCmdBufFromFlash(logo, sizeof(logo)); 00188 00189 StartDL(); 00190 TFT.DL(BITMAP_HANDLE(0)); 00191 TFT.DL(BITMAP_SOURCE(IMAGE_ADDR_LOGO)); 00192 TFT.DL(BITMAP_LAYOUT(ARGB1555, 0, 309)); 00193 //TFT.DL(BITMAP_SIZE(NEAREST, BORDER, BORDER, 840, 480)); 00194 TFT.DL(BITMAP_SIZE(BILINEAR, BORDER, BORDER, 0, 309)); 00195 FinishDL(); 00196 00197 StartDL(); 00198 TFT.DL(BEGIN(BITMAPS)); 00199 TFT.DL(VERTEX2II(0, 0, 0, 0)); 00200 TFT.DL(END()); 00201 FinishDL(); 00202 */ 00203 } 00204 00205 void LoadImagesAndFonts(void) 00206 { 00207 TFT.WrCmd32(CMD_INFLATE); 00208 TFT.WrCmd32(IMAGE_ADDR_HUMIDITY); 00209 TFT.WrCmdBufFromFlash(hum_icon, sizeof(hum_icon)); 00210 /* 00211 TFT.WrCmd32(CMD_INFLATE); 00212 TFT.WrCmd32(IMAGE_ADDR_TEMPERATURE); 00213 TFT.WrCmdBufFromFlash(temp_icon, sizeof(temp_icon)); 00214 00215 TFT.WrCmd32(CMD_INFLATE); 00216 TFT.WrCmd32(IMAGE_ADDR_SENSOR); 00217 TFT.WrCmdBufFromFlash(HYT_photo, sizeof(HYT_photo)); 00218 00219 TFT.WrCmd32(CMD_INFLATE); 00220 TFT.WrCmd32(FONT_SET_ROBOTO_REGULAR_30); 00221 TFT.WrCmdBufFromFlash(font_RobotoRegular30, sizeof(font_RobotoRegular30)); 00222 00223 TFT.WrCmd32(CMD_INFLATE); 00224 TFT.WrCmd32(FONT_SET_ROBOTO_REGULAR_16); 00225 TFT.WrCmdBufFromFlash(font_RobotoRegular16, sizeof(font_RobotoRegular16)); 00226 */ 00227 } 00228 00229 00230 void HandleAllBitmaps(void) 00231 { 00232 StartDL(); 00233 TFT.DL(BITMAP_HANDLE(0)); 00234 TFT.DL(BITMAP_SOURCE(IMAGE_ADDR_HUMIDITY)); 00235 TFT.DL(BITMAP_LAYOUT(ARGB4, 60, 38)); 00236 TFT.DL(BITMAP_SIZE(NEAREST, BORDER, BORDER, 30, 38)); 00237 /* 00238 TFT.DL(BITMAP_HANDLE(1)); 00239 TFT.DL(BITMAP_SOURCE(IMAGE_ADDR_TEMPERATURE)); 00240 TFT.DL(BITMAP_LAYOUT(ARGB4, 42, 42)); 00241 TFT.DL(BITMAP_SIZE(NEAREST, BORDER, BORDER, 21, 42)); 00242 00243 TFT.DL(BITMAP_HANDLE(2)); 00244 TFT.DL(BITMAP_SOURCE(IMAGE_ADDR_SENSOR)); 00245 TFT.DL(BITMAP_LAYOUT(RGB332, 101, 147)); 00246 TFT.DL(BITMAP_SIZE(NEAREST, BORDER, BORDER, 101, 147)); 00247 00248 TFT.DL(BITMAP_HANDLE(3)); 00249 TFT.DL(BITMAP_SOURCE(FONT_ADDR_ROBOTO_REGULAR_30)); 00250 TFT.DL(BITMAP_LAYOUT(L4, 16, 33)); 00251 TFT.DL(BITMAP_SIZE(NEAREST, BORDER, BORDER, 32, 33)); 00252 00253 TFT.DL(BITMAP_HANDLE(4)); 00254 TFT.DL(BITMAP_SOURCE(FONT_ADDR_ROBOTO_REGULAR_16)); 00255 TFT.DL(BITMAP_LAYOUT(L4, 8, 20)); 00256 TFT.DL(BITMAP_SIZE(NEAREST, BORDER, BORDER, 16, 20)); 00257 00258 TFT.SetFont(3, FONT_SET_ROBOTO_REGULAR_30); 00259 TFT.SetFont(4, FONT_SET_ROBOTO_REGULAR_16); 00260 */ 00261 FinishDL(); 00262 } 00263 00264 int main(void) 00265 { 00266 TFT.Calibrate(); 00267 //CalibrationTS(); 00268 //DigitalOut led2(LED2); led2=1; 00269 activeScreen = MENU_SCREEN; 00270 pressedButton = NONE_PRESS; 00271 main_menu(); 00272 00273 while(1) { 00274 wait_ms(9000); 00275 pressedButton = TFT.Rd8(REG_TOUCH_TAG); 00276 00277 switch(activeScreen) 00278 { 00279 case MENU_SCREEN: { 00280 main_menu(); 00281 if (pressedButton == BUTTON_1_PRESS) {activeScreen = AUTOMATIC_SCREEN; pressedButton = NONE_PRESS; break;} 00282 else if (pressedButton == BUTTON_2_PRESS) {activeScreen = MANUAL_SCREEN; pressedButton = NONE_PRESS; break;} 00283 else if (pressedButton == BUTTON_3_PRESS) {activeScreen = CALIBRATION_SCREEN; pressedButton = NONE_PRESS; break;} 00284 } 00285 case AUTOMATIC_SCREEN: automatic_menu(); 00286 case MANUAL_SCREEN: manual_menu(); 00287 case CALIBRATION_SCREEN: calibration_menu(); 00288 break; 00289 } 00290 00291 00292 } 00293 } 00294 00295 00296 00297 00298 00299 00300 00301 00302 00303 00304 00305 00306 00307 00308 00309 00310 00311 00312 00313 /* 00314 00315 nt main(void) 00316 { 00317 TFT.Calibrate(); 00318 //CalibrationTS(); 00319 //DigitalOut led2(LED2); led2=1; 00320 activeScreen = MENU_SCREEN; 00321 pressedButton = NONE_PRESS; 00322 main_menu(); 00323 00324 while(1) { 00325 00326 pressedButton = TFT.Rd8(REG_TOUCH_TAG); 00327 00328 switch(activeScreen) 00329 { 00330 case MENU_SCREEN: main_menu(); 00331 case AUTOMATIC_SCREEN: automatic_menu(); 00332 case MANUAL_SCREEN: manual_menu(); 00333 case CALIBRATION_SCREEN: calibration_menu() 00334 } 00335 00336 if (activeScreen == MENU_SCREEN) { 00337 main_menu(); 00338 if (pressedButton) { 00339 wait_ms(10); 00340 if (pressedButton == BUTTON_1_PRESS) {activeScreen = AUTOMATIC_SCREEN;} 00341 else if (pressedButton == BUTTON_2_PRESS) {activeScreen = MANUAL_SCREEN;} 00342 else if (pressedButton == BUTTON_3_PRESS) {activeScreen = CALIBRATION_SCREEN;} 00343 pressedButton = NONE_PRESS; 00344 } 00345 } 00346 else { 00347 switch(activeScreen) 00348 if (activeScreen == AUTOMATIC_SCREEN ) automatic_menu(); 00349 else if (activeScreen == MANUAL_SCREEN) manual_menu(); 00350 else if (activeScreen == CALIBRATION_SCREEN) calibration_menu(); 00351 00352 } 00353 00354 00355 00356 if (activeScreen == MENU_SCREEN) { 00357 main_menu(); 00358 if (pressedButton) { 00359 wait_ms(150); 00360 if (pressedButton == BUTTON_1_PRESS) { 00361 activeScreen = AUTOMATIC_SCREEN; 00362 } else if (pressedButton == BUTTON_2_PRESS) { 00363 activeScreen = MANUAL_SCREEN; 00364 } else if (pressedButton == BUTTON_3_PRESS) { 00365 activeScreen = CALIBRATION_SCREEN; 00366 } 00367 pressedButton = NONE_PRESS; 00368 } 00369 else { 00370 if (activeScreen == AUTOMATIC_SCREEN ) automatic_menu(); 00371 else if (activeScreen == MANUAL_SCREEN) manual_menu(); 00372 else if (activeScreen == TEST_SCREEN) calibration_menu(); 00373 00374 } 00375 pressedButton = NONE_PRESS; 00376 } 00377 } 00378 */
Generated on Thu Jul 14 2022 01:07:02 by 1.7.2