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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 */