Started a gui menuflow

Dependencies:   LCD_DISCO_F429ZI mbed TS_DISCO_F429ZI BSP_DISCO_F429ZI

main.cpp

Committer:
Clancy_SENDSOR
Date:
2020-06-09
Revision:
1:35eb0c8fa2c0
Parent:
0:e7b2dc7d7a7f
Child:
2:5828e6917e75

File content as of revision 1:35eb0c8fa2c0:

#include "mbed.h"
#include "TS_DISCO_F429ZI.h"
#include "LCD_DISCO_F429ZI.h"

#define y_max 310
DigitalOut led1(LED1);
Ticker ts_service;

AnalogIn   pdiff(PC_5);
AnalogIn   p_guage(PC_4);

LCD_DISCO_F429ZI lcd;
TS_DISCO_F429ZI ts;
//PwmOut led(LED1);
PwmOut motor(PB_0);

TS_StateTypeDef TS_State;
TS_StateTypeDef Old_TS_State;

uint8_t text[30];
uint8_t status;

uint16_t x, y = 0;
uint16_t touch_x, touch_y = 0;
bool press_detected = false;

uint16_t setPressure = 0;
uint8_t isr_text[30];
uint8_t display_screen = 1;

int showScreen(uint8_t screen)
{
    switch(screen) 
    {
        case 1 :
            BSP_LCD_SetFont(&Font20);
            setPressure = (y*20)/y_max;
            sprintf((char*)isr_text, "SetP=%2d", setPressure);   
            lcd.DisplayStringAt(0, LINE(1), (uint8_t *)&isr_text, CENTER_MODE);
            sprintf((char*)isr_text, "PDIFF=%.2f", pdiff.read()*6.0f);
            lcd.DisplayStringAt(0, LINE(2), (uint8_t *)&isr_text, CENTER_MODE);
            sprintf((char*)isr_text, "PGUAGE=%.2f", p_guage.read()*38.0f);
            lcd.DisplayStringAt(0, LINE(3), (uint8_t *)&isr_text, CENTER_MODE);
            
            BSP_LCD_SetFont(&Font12);
            lcd.DrawRect(5, 100, 70, 50);
            lcd.DrawRect(85, 100, 70, 50);
            lcd.DrawRect(165, 100, 70, 50);
            sprintf((char*)isr_text, "  Start");   
            lcd.DisplayStringAt(10, 130, (uint8_t *)&isr_text, LEFT_MODE);
            sprintf((char*)isr_text, "Settings");   
            lcd.DisplayStringAt(95, 130, (uint8_t *)&isr_text, LEFT_MODE);
            sprintf((char*)isr_text, "  Stop");   
            lcd.DisplayStringAt(165, 130, (uint8_t *)&isr_text, LEFT_MODE);
            
            lcd.DrawRect(5, 160, 70, 50);
            lcd.DrawRect(85, 160, 70, 50);
            lcd.DrawRect(165, 160, 70, 50);            
            
            lcd.DrawRect(5, 220, 70, 50);
            lcd.DrawRect(85, 220, 70, 50);
            lcd.DrawRect(165, 220, 70, 50);
            break;
        case 2 :
            BSP_LCD_SetFont(&Font20);
            setPressure = (y*20)/y_max;
            sprintf((char*)isr_text, "SetPress=%2d", setPressure);   
            lcd.DisplayStringAt(0, LINE(1), (uint8_t *)&isr_text, CENTER_MODE);
            sprintf((char*)isr_text, "PDIFF=%.2f", pdiff.read()*6.0f);
            lcd.DisplayStringAt(0, LINE(2), (uint8_t *)&isr_text, CENTER_MODE);
            sprintf((char*)isr_text, "PGUAGE=%.2f", p_guage.read()*38.0f);
            lcd.DisplayStringAt(0, LINE(3), (uint8_t *)&isr_text, CENTER_MODE);
            
            BSP_LCD_SetFont(&Font12);
            lcd.DrawRect(5, 100, 70, 50);
            lcd.DrawRect(85, 100, 70, 50);
            lcd.DrawRect(165, 100, 70, 50);
            sprintf((char*)isr_text, "  Start");   
            lcd.DisplayStringAt(10, 130, (uint8_t *)&isr_text, LEFT_MODE);
            sprintf((char*)isr_text, "Settings");   
            lcd.DisplayStringAt(95, 130, (uint8_t *)&isr_text, LEFT_MODE);
            sprintf((char*)isr_text, "  Stop");   
            lcd.DisplayStringAt(165, 130, (uint8_t *)&isr_text, LEFT_MODE);
            
            lcd.DrawRect(5, 160, 70, 50);
            lcd.DrawRect(85, 160, 70, 50);
            lcd.DrawRect(165, 160, 70, 50);            
            
            lcd.DrawRect(5, 220, 70, 50);
            lcd.DrawRect(85, 220, 70, 50);
            lcd.DrawRect(165, 220, 70, 50);
    }
    return screen;
}

void CheckPress()
{
    if(press_detected)
    {
        display_screen = 2;
    }
    
}

void CheckTs()
{
    ts.GetState(&TS_State);      
    if (TS_State.TouchDetected)
    {
        x = TS_State.X;
        y = TS_State.Y;
    }
    if ((Old_TS_State.TouchDetected) && (!TS_State.TouchDetected))
    {
     touch_x = x;
     touch_y = y;
     press_detected = true;
    }   
    Old_TS_State = TS_State;
}

int main()
{
    motor.period(0.1f);
    
    BSP_LCD_SetFont(&Font20);
  
    lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN", CENTER_MODE);
    lcd.DisplayStringAt(0, LINE(6), (uint8_t *)"DEMO", CENTER_MODE);
    
     
    wait(1);
  
    status = ts.Init(lcd.GetXSize(), lcd.GetYSize());
  
    if (status != TS_OK)
    {
      lcd.Clear(LCD_COLOR_RED);
      lcd.SetBackColor(LCD_COLOR_RED);
      lcd.SetTextColor(LCD_COLOR_WHITE);
      lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN", CENTER_MODE);
      lcd.DisplayStringAt(0, LINE(6), (uint8_t *)"INIT FAIL", CENTER_MODE);
    }
    else
    {
      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);
    lcd.Clear(LCD_COLOR_BLUE);
    lcd.SetBackColor(LCD_COLOR_BLUE);
    lcd.SetTextColor(LCD_COLOR_WHITE);
    
    ts_service.attach(&CheckTs, 0.2); // the address of the function to be attached (flip) and the interval (2 seconds)
  
    while(1)
    {
      led1 = !led1;
      wait(0.2);
      CheckPress();
      showScreen(display_screen);
    }
}