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
Diff: main.cpp
- Revision:
- 1:2e00250c31c8
- Parent:
- 0:4fcdf32ad508
--- a/main.cpp Sat Sep 16 23:40:27 2017 +0000 +++ b/main.cpp Wed Jan 10 07:08:31 2018 +0000 @@ -1,66 +1,378 @@ -//Serial pc(SERIAL_TX, SERIAL_RX); pc.printf("Press '1' to turn LED1 ON, '0' to turn it OFF\n"); -//DigitalOut led(LED1); led = 1; - #include "mbed.h" #include "FT_Platform.h" -//#include "LCD_DISCO_F429ZI.h" +#include "Image.h" +#include "pictures.h" +#include "mbcrc.h" +#include "parameters.h" +#include <string> + +DigitalOut ho(PF_0); + +typedef enum { + NONE_PRESS, + BUTTON_1_PRESS, + BUTTON_2_PRESS, + BUTTON_3_PRESS, + BUTTON_LEFT, + BUTTON_RIGHT, + MENU_PRESS, +} pressValues; + +// all screens available in app +typedef enum { + MENU_SCREEN, + AUTOMATIC_SCREEN, + MANUAL_SCREEN, + CALIBRATION_SCREEN, +} screenValues; + +char pressedButton; +char activeScreen; + -void screen1(uint32_t tracker, uint8_t tag); +void main_menu(void); +void LoadImagesAndFonts(void); +void HandleAllBitmaps(void); +void StartDL(void); +void FinishDL(void); +void show_logo(void); +void show_logo1(void); + +unsigned char command[8]={0x03,0x06,0x20,0x00,0x00,0x01,0x00,0x00}; + +Serial RS485(PA_9, PA_10); +FT800 TFT( PE_6, PE_5, PE_2, PE_4, PC_13, PC_15); //(mosi, miso, sclk, ss, intr, pd ); + + + +void send_command_to_RS485(unsigned char cmd) +{ + RS485.format(8, Serial::None, 1); + RS485.baud(9600); + uint16_t crc16; + crc16 = usMBCRC16( ( unsigned char * ) command, 6 ); + command[5] = cmd; + command[6] = ( unsigned char )( crc16 >> 8 ); + command[7] = ( unsigned char )( crc16 & 0xFF ); + + ho = 1; // En high + RS485.putc(command[0]); // slave add + RS485.putc(command[1]); // function code + RS485.putc(command[2]); // Hi PDU add + RS485.putc(command[3]); // low PDU add + RS485.putc(command[4]); // Hi N reg + RS485.putc(command[5]); // Lo N reg + RS485.putc(command[6]); // Hi CRC + RS485.putc(command[7]); // Lo CRC + ho=0; // En low +} + +void CalibrationTS() +{ + 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!!! + for (int i = 0; i < 24; i++) { + TFT.Wr8(REG_TOUCH_TRANSFORM_A + i, calibration[i]); + } +} + + +void main_menu() +{ + StartDL(); + + TFT.DL(COLOR_RGB(0, 0, 0)); + TFT.Text((TFT.DispWidth/2), TFT.DispHeight/24, 31, OPT_CENTERX, "Menu\0"); + + TFT.DL(TAG_MASK(1)); + TFT.DL(TAG(BUTTON_1_PRESS)); + TFT.FgColor(0x703800); + // if rectangle is already pressed, draw it lighter + //if (pressedButton == BUTTON_1_PRESS) TFT.FgColor(0x387000); + TFT.Button(100, 80, 600, 100, 31, 0, "Automatic mode"); //B1 + TFT.DL(TAG_MASK(0)); + + TFT.DL(TAG_MASK(1)); + TFT.DL(TAG(BUTTON_2_PRESS)); + TFT.FgColor(0x387000); + TFT.Button(100, 200, 600, 100, 31, 0, "Manual mode"); //B2 + TFT.DL(TAG_MASK(0)); + + TFT.DL(TAG_MASK(1)); + TFT.DL(TAG(BUTTON_3_PRESS)); + TFT.FgColor(0x387000); + TFT.Button(100, 320, 600, 100, 31, 0, "Calibration mode"); //B3 + TFT.DL(TAG_MASK(0)); + + + TFT.Text((TFT.DispWidth/4), TFT.DispHeight*7.5/8, 28, OPT_CENTERX, "Button: \0"); // draw Text with font 31 + TFT.Number((TFT.DispWidth/2), (TFT.DispHeight*7.5/8),28,OPT_CENTERX, pressedButton); + + FinishDL(); +} -//LCD_DISCO_F429ZI lcd; -//Serial pc(SERIAL_TX, SERIAL_RX); -FT800 TFT( PE_6, PE_5, PE_2, PE_4, PC_13, PC_15); -// ( mosi, miso, sclk, ss, intr, pd ); +void automatic_menu() +{ + StartDL(); + + TFT.DL(TAG(0)); // assign TAG value 0 to everything else + + TFT.DL(COLOR_RGB(0, 0, 0)); + TFT.Text((TFT.DispWidth/2), TFT.DispHeight/24, 31, OPT_CENTERX, "Automatic mode\0"); + + + //TFT.FgColor(0x703800); + TFT.FgColor(0x387000); + TFT.Button(100, 80, 100, 100, 31, 0, "<"); //B1 + TFT.FgColor(0x387000); + TFT.Button(400, 80, 100, 100, 31, 0, ">"); //B2 + + + + TFT.Number((TFT.DispWidth/2), (TFT.DispHeight*7/8),31,OPT_CENTERX, pressedButton); + + + TFT.Text((TFT.DispWidth/2), 80, 31, OPT_CENTERX, "Radius (mm):\0"); + TFT.Text((TFT.DispWidth/2), 200, 31, OPT_CENTERX, "Number:\0"); + TFT.Text((TFT.DispWidth/2), 320, 31, OPT_CENTERX, "Run out (mm):\0"); + + + FinishDL(); +} + +void manual_menu() +{ + StartDL(); + + TFT.DL(COLOR_RGB(0, 0, 0)); + TFT.Text((TFT.DispWidth/2), TFT.DispHeight/24, 31, OPT_CENTERX, "Manual mode\0"); + + //display the screen + FinishDL(); +} + + +void calibration_menu() +{ + StartDL(); + + TFT.DL(TAG(0)); // assign TAG value 0 to everything else + + TFT.DL(COLOR_RGB(0, 0, 0)); + TFT.Text((TFT.DispWidth/2), TFT.DispHeight/24, 31, OPT_CENTERX, "Calibration\0"); + + //display the screen + FinishDL(); +} + +void StartDL(void) +{ + TFT.DLstart(); + TFT.DL(CLEAR_COLOR_RGB(255, 255, 255)); + TFT.DL(CLEAR(1, 1, 1)); +} + +void FinishDL(void) +{ + TFT.DL(DISPLAY()); + TFT.Swap(); + TFT.Flush_Co_Buffer(); + TFT.WaitCmdfifo_empty(); +} + +void show_logo(void) +{ + /* + TFT.WrCmd32(CMD_INFLATE); + TFT.WrCmd32(IMAGE_ADDR_LOGO); + TFT.WrCmdBufFromFlash(logo, sizeof(logo)); + + StartDL(); + TFT.DL(BITMAP_HANDLE(0)); + TFT.DL(BITMAP_SOURCE(IMAGE_ADDR_LOGO)); + TFT.DL(BITMAP_LAYOUT(ARGB1555, 0, 309)); + //TFT.DL(BITMAP_SIZE(NEAREST, BORDER, BORDER, 840, 480)); + TFT.DL(BITMAP_SIZE(BILINEAR, BORDER, BORDER, 0, 309)); + FinishDL(); + + StartDL(); + TFT.DL(BEGIN(BITMAPS)); + TFT.DL(VERTEX2II(0, 0, 0, 0)); + TFT.DL(END()); + FinishDL(); + */ +} + +void LoadImagesAndFonts(void) +{ + TFT.WrCmd32(CMD_INFLATE); + TFT.WrCmd32(IMAGE_ADDR_HUMIDITY); + TFT.WrCmdBufFromFlash(hum_icon, sizeof(hum_icon)); + /* + TFT.WrCmd32(CMD_INFLATE); + TFT.WrCmd32(IMAGE_ADDR_TEMPERATURE); + TFT.WrCmdBufFromFlash(temp_icon, sizeof(temp_icon)); + + TFT.WrCmd32(CMD_INFLATE); + TFT.WrCmd32(IMAGE_ADDR_SENSOR); + TFT.WrCmdBufFromFlash(HYT_photo, sizeof(HYT_photo)); + + TFT.WrCmd32(CMD_INFLATE); + TFT.WrCmd32(FONT_SET_ROBOTO_REGULAR_30); + TFT.WrCmdBufFromFlash(font_RobotoRegular30, sizeof(font_RobotoRegular30)); + + TFT.WrCmd32(CMD_INFLATE); + TFT.WrCmd32(FONT_SET_ROBOTO_REGULAR_16); + TFT.WrCmdBufFromFlash(font_RobotoRegular16, sizeof(font_RobotoRegular16)); + */ +} + + +void HandleAllBitmaps(void) +{ + StartDL(); + TFT.DL(BITMAP_HANDLE(0)); + TFT.DL(BITMAP_SOURCE(IMAGE_ADDR_HUMIDITY)); + TFT.DL(BITMAP_LAYOUT(ARGB4, 60, 38)); + TFT.DL(BITMAP_SIZE(NEAREST, BORDER, BORDER, 30, 38)); + /* + TFT.DL(BITMAP_HANDLE(1)); + TFT.DL(BITMAP_SOURCE(IMAGE_ADDR_TEMPERATURE)); + TFT.DL(BITMAP_LAYOUT(ARGB4, 42, 42)); + TFT.DL(BITMAP_SIZE(NEAREST, BORDER, BORDER, 21, 42)); + + TFT.DL(BITMAP_HANDLE(2)); + TFT.DL(BITMAP_SOURCE(IMAGE_ADDR_SENSOR)); + TFT.DL(BITMAP_LAYOUT(RGB332, 101, 147)); + TFT.DL(BITMAP_SIZE(NEAREST, BORDER, BORDER, 101, 147)); + + TFT.DL(BITMAP_HANDLE(3)); + TFT.DL(BITMAP_SOURCE(FONT_ADDR_ROBOTO_REGULAR_30)); + TFT.DL(BITMAP_LAYOUT(L4, 16, 33)); + TFT.DL(BITMAP_SIZE(NEAREST, BORDER, BORDER, 32, 33)); + + TFT.DL(BITMAP_HANDLE(4)); + TFT.DL(BITMAP_SOURCE(FONT_ADDR_ROBOTO_REGULAR_16)); + TFT.DL(BITMAP_LAYOUT(L4, 8, 20)); + TFT.DL(BITMAP_SIZE(NEAREST, BORDER, BORDER, 16, 20)); + + TFT.SetFont(3, FONT_SET_ROBOTO_REGULAR_30); + TFT.SetFont(4, FONT_SET_ROBOTO_REGULAR_16); + */ + FinishDL(); +} + int main(void) { - /* - BSP_LCD_SetFont(&Font20); - - lcd.Clear(LCD_COLOR_GREEN); - lcd.SetBackColor(LCD_COLOR_GREEN); - lcd.SetTextColor(LCD_COLOR_WHITE); - lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN", CENTER_MODE); - lcd.DisplayStringAt(0, LINE(6), (uint8_t *)"INIT OK", CENTER_MODE); - wait(1); + TFT.Calibrate(); + //CalibrationTS(); + //DigitalOut led2(LED2); led2=1; + activeScreen = MENU_SCREEN; + pressedButton = NONE_PRESS; + main_menu(); - pc.printf("Press '1' to turn LED1 ON, '0' to turn it OFF\n"); - */ - //DigitalOut led(LED1); led=1; - - //screen1(0x0,0x0); - set_time(0); // Set RTC time to 0 - wait(1); - TFT.Logo(); - TFT.WaitLogo_Finish(); - return 0; + while(1) { + wait_ms(9000); + pressedButton = TFT.Rd8(REG_TOUCH_TAG); + + switch(activeScreen) + { + case MENU_SCREEN: { + main_menu(); + if (pressedButton == BUTTON_1_PRESS) {activeScreen = AUTOMATIC_SCREEN; pressedButton = NONE_PRESS; break;} + else if (pressedButton == BUTTON_2_PRESS) {activeScreen = MANUAL_SCREEN; pressedButton = NONE_PRESS; break;} + else if (pressedButton == BUTTON_3_PRESS) {activeScreen = CALIBRATION_SCREEN; pressedButton = NONE_PRESS; break;} + } + case AUTOMATIC_SCREEN: automatic_menu(); + case MANUAL_SCREEN: manual_menu(); + case CALIBRATION_SCREEN: calibration_menu(); + break; + } + + + } } - -void screen1(uint32_t tracker, uint8_t tag) + + + + + + + + + + + + + + + + + + + + /* + +nt main(void) { - time_t seconds = time(NULL); - - //start new display list - TFT.DLstart(); // start a new display command list - TFT.DL(CLEAR_COLOR_RGB(255,255,255)); // set the clear color to white - TFT.DL(CLEAR(1,1,1)); // clear buffers -> color buffer,stencil buffer, tag buffer - - TFT.DL(TAG(0)); // assign TAG value 0 to everything else - - //title text - TFT.DL(COLOR_RGB(0, 0, 0)); - TFT.Text((TFT.DispWidth/2), TFT.DispHeight/8, 28, OPT_CENTERX, "test\0"); // draw Text with font 31 - - // time - TFT.Text((TFT.DispWidth/4), TFT.DispHeight*7/8, 28, OPT_CENTERX, "Run time [s]: \0"); // draw Text with font 31 - TFT.Number((TFT.DispWidth/2), (TFT.DispHeight*7/8),28,OPT_CENTERX, seconds); - - //author text - TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); - TFT.Text((TFT.DispWidth*7/8)+9, (TFT.DispHeight*15/16), 28, OPT_CENTERX, "by Curtis Mattull\0"); // draw Text with font 31 - - //display the screen - TFT.DL(DISPLAY()); // display the image - TFT.Swap(); // swap the current display list - TFT.Flush_Co_Buffer(); // download the command list into fifo - TFT.WaitCmdfifo_empty(); // wait till coprocessor completes the operation -} \ No newline at end of file + TFT.Calibrate(); + //CalibrationTS(); + //DigitalOut led2(LED2); led2=1; + activeScreen = MENU_SCREEN; + pressedButton = NONE_PRESS; + main_menu(); + + while(1) { + + pressedButton = TFT.Rd8(REG_TOUCH_TAG); + + switch(activeScreen) + { + case MENU_SCREEN: main_menu(); + case AUTOMATIC_SCREEN: automatic_menu(); + case MANUAL_SCREEN: manual_menu(); + case CALIBRATION_SCREEN: calibration_menu() + } + + if (activeScreen == MENU_SCREEN) { + main_menu(); + if (pressedButton) { + wait_ms(10); + if (pressedButton == BUTTON_1_PRESS) {activeScreen = AUTOMATIC_SCREEN;} + else if (pressedButton == BUTTON_2_PRESS) {activeScreen = MANUAL_SCREEN;} + else if (pressedButton == BUTTON_3_PRESS) {activeScreen = CALIBRATION_SCREEN;} + pressedButton = NONE_PRESS; + } + } + else { + switch(activeScreen) + if (activeScreen == AUTOMATIC_SCREEN ) automatic_menu(); + else if (activeScreen == MANUAL_SCREEN) manual_menu(); + else if (activeScreen == CALIBRATION_SCREEN) calibration_menu(); + + } + + + + if (activeScreen == MENU_SCREEN) { + main_menu(); + if (pressedButton) { + wait_ms(150); + if (pressedButton == BUTTON_1_PRESS) { + activeScreen = AUTOMATIC_SCREEN; + } else if (pressedButton == BUTTON_2_PRESS) { + activeScreen = MANUAL_SCREEN; + } else if (pressedButton == BUTTON_3_PRESS) { + activeScreen = CALIBRATION_SCREEN; + } + pressedButton = NONE_PRESS; + } + else { + if (activeScreen == AUTOMATIC_SCREEN ) automatic_menu(); + else if (activeScreen == MANUAL_SCREEN) manual_menu(); + else if (activeScreen == TEST_SCREEN) calibration_menu(); + + } + pressedButton = NONE_PRESS; + } +} +*/ \ No newline at end of file