lcd lib

Dependencies:   mbed LCD_DISCO_F469NI TS_DISCO_F469NI BSP_DISCO_F469NI EasyCAT_lib

main.cpp

Committer:
haddad1995
Date:
2022-03-11
Revision:
2:4a0d3be00487
Parent:
1:8574e7a8fcde
Child:
4:186727e0bdea

File content as of revision 2:4a0d3be00487:

//---------------------------------------------------------------
//
//---------------------------------------------------------------
#include "mbed.h"
#include "F469_BUTTON.hpp"
#include "F469_SLIDER.hpp"
#include "EasyCAT.h"                // EasyCAT library to interface the LAN9252

DigitalOut led_green(LED1);
DigitalOut led_orange(LED2);
DigitalOut led_red(LED3);
DigitalOut led_blue(LED4);

TS_DISCO_F469NI ts_;
LCD_DISCO_F469NI lcd_;

EasyCAT EASYCAT;                    // EasyCAT istantiation

char char_SliderDisplayValue[4];    // String Value to display for the Slider Control value 
uint16_t SliderDisplayValue_;       // Variable used to access Slider Control Value in F469SLIDER.cpp

//---- global variables ---------------------------------------------------------------------------
int menu = 0;

UWORD ContaUp;                      // used for sawthoot test generation
UWORD ContaDown;                    //

unsigned long Millis = 0;
unsigned long Millis2 = 0;
unsigned long PreviousSaw = 0;
unsigned long PreviousCycle = 0;

int8_t stand = 0; // data to test 
int8_t start = 0; // data to test 
int8_t stepping = 0; // data to test 
int8_t endStep = 0; // data to test 

int8_t enable = 0; // data to test 
int8_t enable_Lateral = 0; // data to test 
int8_t quick_Stop = 0; // data to test 
int8_t clear_Fault = 0; // data to test 

float Standing_Time = 2.0 ;
char Standing_Time_S[10];
float Step_Time = 2.0 ;
char Step_Time_S[10];
float Wait_COM_Tr_Time = 0.5 ;
char Wait_COM_Tr_Time_S[10];
int COM_Tr_Threshold = 20 ;
char COM_Tr_Threshold_S[10];

int8_t Ethercat = 0 ; 
char Ethercat_S[10];
float Running_Time = 0.0 ;
char Running_Time_S[20];
int State_Step = 0 ;
char State_Step_S[10];
int Status_Driver = 0 ;
char Status_Driver_S[10];
int END = 0 ;
char END_S[10];

//---- declarations for Arduino "millis()" emulation ----------------------- 

static Ticker uS_Tick;
static volatile uint32_t MillisVal = 0;

void InitMillis(void);    
void mS_Tick(void);
  
inline static uint32_t millis (void) 
{
    return MillisVal; 
};
 
      

//---------------------------------------------------------------------------------------------
int main()
{
    led_green = 1;         // Switch off all LEDs
    led_orange = 1;
    led_red = 1;
    led_blue = 1; 

    lcd_.Clear(LCD_COLOR_WHITE);                                        // Set LCD Background colour
    
                                                          // Set Text colour to Black

    lcd_.SetTextColor(LCD_COLOR_BLACK);   
    lcd_.SetFont(&Font24);                                                                      // Font size 24
    lcd_.DisplayStringAt(10, 20, (uint8_t *)" Status EtherCAT: ", LEFT_MODE);            // Display main header text
    lcd_.SetFont(&Font24);      
    lcd_.DisplayStringAt(400, 20, (uint8_t *)" Running Time: ", LEFT_MODE);            // Display main header text
    lcd_.SetFont(&Font24);  
    lcd_.DisplayStringAt(10, 60, (uint8_t *)" State Step: ", LEFT_MODE);            // Display main header text
    lcd_.SetFont(&Font24);      
    lcd_.DisplayStringAt(400, 60, (uint8_t *)" Status Driver: ", LEFT_MODE);            // Display main header text
    lcd_.SetFont(&Font24);      
    lcd_.DisplayStringAt(10, 440, (uint8_t *)" END ? : ", LEFT_MODE);            // Display main header text
    lcd_.DrawHLine(20, 90, 760);
    lcd_.DrawHLine(20, 91, 760);
    
    lcd_.SetTextColor(LCD_COLOR_RED); 
    lcd_.SetFont(&Font24);                                                                 // Font size 24
    lcd_.DisplayStringAt(10, 110, (uint8_t *)" Driver Controle ", LEFT_MODE);            // Display main header text     
    
    Button btn1(lcd_, ts_, 20, 160, 160, 70,            
              LCD_COLOR_GREEN , LCD_COLOR_DARKBLUE, 1, "Enable", Font20);  // Define btn1 button           
    btn1.Render();                                                         // Draw btn1 button
    
    Button btn2(lcd_, ts_, 220, 160, 160, 70,
                 LCD_COLOR_GREEN , LCD_COLOR_DARKBLUE, 1, "Lateral", Font20);  // Define test button                   
    btn2.Render();                                                         // Draw btn2 button
    Button btn3(lcd_, ts_, 420, 160, 160, 70,            
              LCD_COLOR_BROWN, LCD_COLOR_GRAY, 1, "Quick Stop", Font20);  // Define btn3 button            
    btn3.Render();                                                         // Draw btn3 button
    
    Button btn4(lcd_, ts_, 620, 160, 160, 70,
                 LCD_COLOR_BROWN, LCD_COLOR_GRAY, 1, "Clear Fault", Font20);  // Define btn4 button                   
    btn4.Render();                                                             // Draw btn3 button
    
    lcd_.SetTextColor(LCD_COLOR_RED); 
    lcd_.SetFont(&Font24);                                                                      // Font size 24
    lcd_.DisplayStringAt(10, 250, (uint8_t *)" Step Control ", LEFT_MODE);            // Display main header text  

    
    Button button3D1(lcd_, ts_, 20, 300, 160, 70,            
                 LCD_COLOR_BLUE, LCD_COLOR_YELLOW, 2, "Stand", Font20);    // Define button3D1 button            
    button3D1.Render(); 
    
    Button button3D2(lcd_, ts_, 220, 300, 160, 70,            
                 LCD_COLOR_BLUE, LCD_COLOR_YELLOW, 2, "Start", Font20);    // Define button3D2 button            
    button3D2.Render();  
       
    Button button3D3(lcd_, ts_, 420, 300, 160, 70,            
                 LCD_COLOR_BLUE, LCD_COLOR_YELLOW, 2, "Stepping", Font20);    // Define button3D3 button            
    button3D3.Render();   
    Button button3D4(lcd_, ts_, 620, 300, 160, 70,            
                 LCD_COLOR_BLUE, LCD_COLOR_YELLOW, 2, "EndStep", Font20);    // Define button3D3 button            
    button3D4.Render();     
    
    lcd_.SetTextColor(LCD_COLOR_RED);   
    lcd_.SetFont(&Font24);                                                                      // Font size 24
    lcd_.DisplayStringAt(280, 440, (uint8_t *)" MOTION PROJECT ", LEFT_MODE);            // Display main header text
    
    Button btn5(lcd_, ts_, 660, 410, 120, 60,
                 LCD_COLOR_ORANGE, LCD_COLOR_GRAY, 1, "Next", Font20);  // Define btn4 button                   
    btn5.Render();  
          
 // printf ("\nEasyCAT - Generic EtherCAT slave\n");      // print the banner

  InitMillis();                                         // init Arduino "millis()" emulation                

  ContaDown.Word = 0x0000;
  ContaUp.Word = 0x0000; 

    while (true)                                                    // Main program loop
    {    
        led_green = 1;                                              // Switch off all LEDs
        led_orange = 1;
        led_red = 1;
        led_blue = 1;  
                                                                                
        if (btn1.Press() )                                         // Check if btn1 button was touched and run instructions if true
        {    
            if (enable==0)
                {
                    enable=1;
                }
            else enable=0;
            lcd_.SetFont(&Font16);
            lcd_.SetTextColor(LCD_COLOR_BLACK);
            lcd_.DisplayStringAt(5, 460, (uint8_t *)"Enable pressed - switch on orange LED", LEFT_MODE);
            led_orange = 0; 
            wait(0.2); 
            lcd_.DisplayStringAt(5, 460, (uint8_t *)"                                        ", LEFT_MODE);
            
        }  
                                                              // End btn1 button instructions       
        if (btn2.Press())                                         // Check if test button was touched and run instructions if true
        {
             if (enable_Lateral==0)
                {
                    enable_Lateral=1;
                }
            else enable_Lateral=0;
            lcd_.SetFont(&Font16);
            lcd_.SetTextColor(LCD_COLOR_BLACK);
            lcd_.DisplayStringAt(5, 460, (uint8_t *)"Enable Lateral pressed - switch on red LED", LEFT_MODE);
            led_red = 0;
            wait(0.2);
            lcd_.DisplayStringAt(5, 460, (uint8_t *)"                                            ", LEFT_MODE);
            
        }                                                           // End test button instructions        
        
         if (btn3.Press())                                  // Check if 3Dbutton button was touched and run instructions if true
        {    
            if (quick_Stop==0)
                {
                    quick_Stop=1;
                }
            else quick_Stop=0;
            lcd_.SetFont(&Font16);
            lcd_.SetTextColor(LCD_COLOR_BLACK);
            lcd_.DisplayStringAt(5, 460, (uint8_t *)"Quick Stop pressed - switch on blue LED", LEFT_MODE);
            led_blue = 0;
            wait(0.2);
            lcd_.DisplayStringAt(5, 460, (uint8_t *)"                                           ", LEFT_MODE);
        }                                                           // End 3D button instructions        
        if (btn4.Press())                                         // Check if test button was touched and run instructions if true
        {
             if (clear_Fault==0)
                {
                    clear_Fault=1;
                }
            else clear_Fault=0;
            lcd_.SetFont(&Font16);
            lcd_.SetTextColor(LCD_COLOR_BLACK);
            lcd_.DisplayStringAt(5, 460, (uint8_t *)"Clear Fault pressed - switch on red LED", LEFT_MODE);
            led_red = 0;
            wait(0.2);
            lcd_.DisplayStringAt(5, 460, (uint8_t *)"                                         ", LEFT_MODE);
            
        }  
      

        if (button3D1.Press() )                                         // Check if btn1 button was touched and run instructions if true
        {    
            if (stand==0)
                {
                    stand=1;
                }
            else stand=0;
            lcd_.SetFont(&Font16);
            lcd_.SetTextColor(LCD_COLOR_BLACK);
            lcd_.DisplayStringAt(5, 460, (uint8_t *)"Stand pressed - switch on orange LED", LEFT_MODE);
            led_orange = 0; 
            wait(0.2); 
            lcd_.DisplayStringAt(5, 460, (uint8_t *)"                                        ", LEFT_MODE);
            
        }  
                                                              // End btn1 button instructions
        
        if (button3D2.Press())                                         // Check if test button was touched and run instructions if true
        {
             if (start==0)
                {
                    start=1;
                }
            else start=0;
            lcd_.SetFont(&Font16);
            lcd_.SetTextColor(LCD_COLOR_BLACK);
            lcd_.DisplayStringAt(5, 460, (uint8_t *)"Start pressed - switch on red LED", LEFT_MODE);
            led_red = 0;
            wait(0.2);
            lcd_.DisplayStringAt(5, 460, (uint8_t *)"                                        ", LEFT_MODE);
            
        }                                                           // End test button instructions
        
         if (button3D3.Press())                                  // Check if 3Dbutton button was touched and run instructions if true
        {    
            if (stepping==0)
                {
                    stepping=1;
                }
            else stepping=0;
            lcd_.SetFont(&Font16);
            lcd_.SetTextColor(LCD_COLOR_BLACK);
            lcd_.DisplayStringAt(5, 460, (uint8_t *)"Stepping pressed - switch on blue LED", LEFT_MODE);
            led_blue = 0;
            wait(0.2);
            lcd_.DisplayStringAt(5, 460, (uint8_t *)"                                           ", LEFT_MODE);
        }
        
         if (button3D4.Press())                                  // Check if 3Dbutton button was touched and run instructions if true
        {    
            if (endStep==0)
                {
                    endStep=1;
                }
            else endStep=0;
            lcd_.SetFont(&Font16);
            lcd_.SetTextColor(LCD_COLOR_BLACK);
            lcd_.DisplayStringAt(5, 460, (uint8_t *)"EndStep pressed - switch on blue LED", LEFT_MODE);
            led_blue = 0;
            wait(0.2);
            lcd_.DisplayStringAt(5, 460, (uint8_t *)"                                           ", LEFT_MODE);
        }
        
                        if ( btn5.Press() )                                         // Check if btn1 button was touched and run instructions if true
        {   menu = 1 ;
            lcd_.Clear(LCD_COLOR_WHITE);
            led_orange = 0; 
            wait(0.1);
            led_orange = 1;                                         // Set LCD Background colour
            
            lcd_.SetTextColor(LCD_COLOR_BLACK);   
            lcd_.SetFont(&Font24);                                                                      // Font size 24
            lcd_.DisplayStringAt(20, 65, (uint8_t *)"Standing Time", LEFT_MODE);            // Display main header text
            sprintf(Standing_Time_S, "%0.2f", Standing_Time);
            lcd_.SetFont(&Font24);
            lcd_.SetTextColor(LCD_COLOR_BLACK);
            lcd_.DisplayStringAt(320, 65, (uint8_t *)Standing_Time_S, LEFT_MODE); 
            Button btn11(lcd_, ts_, 400, 40, 160, 70,            
            LCD_COLOR_GREEN , LCD_COLOR_DARKBLUE, 1, " + ", Font24);  // Define btn1 button           
            btn11.Render();
            Button btn12(lcd_, ts_, 600, 40, 160, 70,            
            LCD_COLOR_RED , LCD_COLOR_DARKBLUE, 1, " - ", Font24);  // Define btn1 button           
            btn12.Render();
            
            lcd_.SetTextColor(LCD_COLOR_BLACK);   
            lcd_.SetFont(&Font24);                                                                      // Font size 24
            lcd_.DisplayStringAt(20, 165, (uint8_t *)"Step Time", LEFT_MODE);            // Display main header text
            sprintf(Step_Time_S, "%0.2f", Step_Time);
            lcd_.SetFont(&Font24);
            lcd_.SetTextColor(LCD_COLOR_BLACK);
            lcd_.DisplayStringAt(320, 165, (uint8_t *)Step_Time_S, LEFT_MODE);
            Button btn13(lcd_, ts_, 400, 140, 160, 70,            
            LCD_COLOR_GREEN , LCD_COLOR_DARKBLUE, 1, " + ", Font24);  // Define btn1 button           
            btn13.Render();
            Button btn14(lcd_, ts_, 600, 140, 160, 70,            
            LCD_COLOR_RED , LCD_COLOR_DARKBLUE, 1, " - ", Font24);  // Define btn1 button           
            btn14.Render();
            
            lcd_.SetTextColor(LCD_COLOR_BLACK);   
            lcd_.SetFont(&Font24);                                                                      // Font size 24
            lcd_.DisplayStringAt(20, 265, (uint8_t *)"Wait COM Tr Time", LEFT_MODE);            // Display main header text
            sprintf(Wait_COM_Tr_Time_S, "%0.2f", Wait_COM_Tr_Time);
            lcd_.SetFont(&Font24);
            lcd_.SetTextColor(LCD_COLOR_BLACK);
            lcd_.DisplayStringAt(320, 265, (uint8_t *)Wait_COM_Tr_Time_S, LEFT_MODE);
            Button btn15(lcd_, ts_, 400, 240, 160, 70,            
            LCD_COLOR_GREEN , LCD_COLOR_DARKBLUE, 1, " + ", Font24);  // Define btn1 button           
            btn15.Render();
            Button btn16(lcd_, ts_, 600, 240, 160, 70,            
            LCD_COLOR_RED , LCD_COLOR_DARKBLUE, 1, " - ", Font24);  // Define btn1 button           
            btn16.Render();
            
            lcd_.SetTextColor(LCD_COLOR_BLACK);   
            lcd_.SetFont(&Font24);                                                                      // Font size 24
            lcd_.DisplayStringAt(20, 365, (uint8_t *)"COM Tr Threshold", LEFT_MODE);            // Display main header text
            sprintf(COM_Tr_Threshold_S, "%d", COM_Tr_Threshold);
            lcd_.SetFont(&Font24);
            lcd_.SetTextColor(LCD_COLOR_BLACK);
            lcd_.DisplayStringAt(320, 365, (uint8_t *)COM_Tr_Threshold_S, LEFT_MODE);
            lcd_.DisplayStringAt(370, 365, (uint8_t *)"%", LEFT_MODE);
            Button btn17(lcd_, ts_, 400, 340, 160, 70,            
            LCD_COLOR_GREEN , LCD_COLOR_DARKBLUE, 1, " + ", Font24);  // Define btn1 button           
            btn17.Render();
            Button btn18(lcd_, ts_, 600, 340, 160, 70,            
            LCD_COLOR_RED , LCD_COLOR_DARKBLUE, 1, " - ", Font24);  // Define btn1 button           
            btn18.Render();
            
            Button btn6(lcd_, ts_, 20, 410, 120, 60,
            LCD_COLOR_ORANGE, LCD_COLOR_GRAY, 1, "Back", Font20);  // Define btn4 button                   
            btn6.Render();  
            
            lcd_.SetTextColor(LCD_COLOR_RED);   
            lcd_.SetFont(&Font24);                                                                      // Font size 24
            lcd_.DisplayStringAt(280, 440, (uint8_t *)" MOTION PROJECT ", LEFT_MODE);            // Display main header text
           
            while (menu==1)
            {           if (btn11.Press() )                                         // Check if btn1 button was touched and run instructions if true
                        {   
                            Standing_Time = Standing_Time + 0.5 ;
                            sprintf(Standing_Time_S, "%0.2f", Standing_Time);
                            lcd_.SetFont(&Font24);
                            lcd_.SetTextColor(LCD_COLOR_BLACK);
                            lcd_.DisplayStringAt(320, 65, (uint8_t *)"    ", LEFT_MODE);
                            lcd_.DisplayStringAt(320, 65, (uint8_t *)Standing_Time_S, LEFT_MODE); 
                            
                        }
                        if (btn12.Press() )                                         // Check if btn1 button was touched and run instructions if true
                        {   if (Standing_Time>0)
                            {
                            Standing_Time = Standing_Time - 0.5 ;
                            sprintf(Standing_Time_S, "%0.2f", Standing_Time);
                            lcd_.SetFont(&Font24);
                            lcd_.SetTextColor(LCD_COLOR_BLACK);
                            lcd_.DisplayStringAt(320, 65, (uint8_t *)"    ", LEFT_MODE);
                            lcd_.DisplayStringAt(320, 65, (uint8_t *)Standing_Time_S, LEFT_MODE); 
                            }
                        }
                        if (btn13.Press() )                                         // Check if btn1 button was touched and run instructions if true
                        {   
                            Step_Time = Step_Time + 0.5 ;
                            sprintf(Step_Time_S, "%0.2f", Step_Time);
                            lcd_.SetFont(&Font24);
                            lcd_.SetTextColor(LCD_COLOR_BLACK);
                            lcd_.DisplayStringAt(320, 165, (uint8_t *)"    ", LEFT_MODE);
                            lcd_.DisplayStringAt(320, 165, (uint8_t *)Step_Time_S, LEFT_MODE); 
                            
                        }
                        if (btn14.Press() )                                         // Check if btn1 button was touched and run instructions if true
                        {   if (Step_Time>0)
                            {
                            Step_Time = Step_Time - 0.5 ;
                            sprintf(Step_Time_S, "%0.2f", Step_Time);
                            lcd_.SetFont(&Font24);
                            lcd_.SetTextColor(LCD_COLOR_BLACK);
                            lcd_.DisplayStringAt(320, 165, (uint8_t *)"    ", LEFT_MODE);
                            lcd_.DisplayStringAt(320, 165, (uint8_t *)Step_Time_S, LEFT_MODE); 
                            }
                        }
                        if (btn15.Press() )                                         // Check if btn1 button was touched and run instructions if true
                        {   
                            Wait_COM_Tr_Time = Wait_COM_Tr_Time + 0.5 ;
                            sprintf(Wait_COM_Tr_Time_S, "%0.2f", Wait_COM_Tr_Time);
                            lcd_.SetFont(&Font24);
                            lcd_.SetTextColor(LCD_COLOR_BLACK);
                            lcd_.DisplayStringAt(320, 265, (uint8_t *)"    ", LEFT_MODE);
                            lcd_.DisplayStringAt(320, 265, (uint8_t *)Wait_COM_Tr_Time_S, LEFT_MODE); 
                            
                        }
                        if (btn16.Press() )                                         // Check if btn1 button was touched and run instructions if true
                        {   if (Wait_COM_Tr_Time>0)
                            {
                            Wait_COM_Tr_Time = Wait_COM_Tr_Time - 0.5 ;
                            sprintf(Wait_COM_Tr_Time_S, "%0.2f", Wait_COM_Tr_Time);
                            lcd_.SetFont(&Font24);
                            lcd_.SetTextColor(LCD_COLOR_BLACK);
                            lcd_.DisplayStringAt(320, 265, (uint8_t *)"    ", LEFT_MODE);
                            lcd_.DisplayStringAt(320, 265, (uint8_t *)Wait_COM_Tr_Time_S, LEFT_MODE); 
                            }
                        }
                        if (btn17.Press() )                                         // Check if btn1 button was touched and run instructions if true
                        {   
                            COM_Tr_Threshold = COM_Tr_Threshold + 5 ;
                            sprintf(COM_Tr_Threshold_S, "%d", COM_Tr_Threshold);
                            lcd_.SetFont(&Font24);
                            lcd_.SetTextColor(LCD_COLOR_BLACK);
                            lcd_.DisplayStringAt(320, 365, (uint8_t *)"   ", LEFT_MODE);
                            lcd_.DisplayStringAt(320, 365, (uint8_t *)COM_Tr_Threshold_S, LEFT_MODE); 
                            
                        }
                        if (btn18.Press() )                                         // Check if btn1 button was touched and run instructions if true
                        {   if (COM_Tr_Threshold>0)
                            {
                            COM_Tr_Threshold = COM_Tr_Threshold - 5 ;
                            sprintf(COM_Tr_Threshold_S, "%d", COM_Tr_Threshold);
                            lcd_.SetFont(&Font24);
                            lcd_.SetTextColor(LCD_COLOR_BLACK);
                            lcd_.DisplayStringAt(320, 365, (uint8_t *)"  ", LEFT_MODE);
                            lcd_.DisplayStringAt(320, 365, (uint8_t *)COM_Tr_Threshold_S, LEFT_MODE); 
                            }
                        }
                        if (btn6.Press() )                                         // Check if btn1 button was touched and run instructions if true
                        {
                        menu=0;   
                        led_orange = 0; 
                        lcd_.Clear(LCD_COLOR_WHITE);                                        // Set LCD Background colour                                                            
                        lcd_.SetTextColor(LCD_COLOR_BLACK);                                 // Set Text colour to Black
                        lcd_.SetFont(&Font24);                                                                      // Font size 24
                        lcd_.DisplayStringAt(10, 20, (uint8_t *)" Status EtherCAT: ", LEFT_MODE);            // Display main header text
                        lcd_.SetFont(&Font24);      
                        lcd_.DisplayStringAt(400, 20, (uint8_t *)" Running Time: ", LEFT_MODE);            // Display main header text
                        lcd_.SetFont(&Font24);  
                        lcd_.DisplayStringAt(10, 60, (uint8_t *)" State Step: ", LEFT_MODE);            // Display main header text
                        lcd_.SetFont(&Font24);      
                        lcd_.DisplayStringAt(400, 60, (uint8_t *)" Status Driver: ", LEFT_MODE);            // Display main header text
                        lcd_.SetFont(&Font24);      
                        lcd_.DisplayStringAt(10, 440, (uint8_t *)" END ? : ", LEFT_MODE);            // Display main header text
                        lcd_.DrawHLine(20, 90, 760);
                        lcd_.DrawHLine(20, 91, 760);
    
                        lcd_.SetTextColor(LCD_COLOR_RED); 
                        lcd_.SetFont(&Font24);                                                                 // Font size 24
                        lcd_.DisplayStringAt(10, 110, (uint8_t *)" Driver Controle ", LEFT_MODE);            // Display main header text     
                        
                        Button btn1(lcd_, ts_, 20, 160, 160, 70,            
                                  LCD_COLOR_GREEN , LCD_COLOR_DARKBLUE, 1, "Enable", Font20);  // Define btn1 button           
                        btn1.Render();                                                         // Draw btn1 button
                        
                        Button btn2(lcd_, ts_, 220, 160, 160, 70,
                                     LCD_COLOR_GREEN , LCD_COLOR_DARKBLUE, 1, "Lateral", Font20);  // Define test button                   
                        btn2.Render();                                                         // Draw btn2 button
                        Button btn3(lcd_, ts_, 420, 160, 160, 70,            
                                  LCD_COLOR_BROWN, LCD_COLOR_GRAY, 1, "Quick Stop", Font20);  // Define btn3 button            
                        btn3.Render();                                                         // Draw btn3 button
    
                        Button btn4(lcd_, ts_, 620, 160, 160, 70,
                                     LCD_COLOR_BROWN, LCD_COLOR_GRAY, 1, "Clear Fault", Font20);  // Define btn4 button                   
                        btn4.Render();                                                             // Draw btn3 button
                        
                        lcd_.SetTextColor(LCD_COLOR_RED); 
                        lcd_.SetFont(&Font24);                                                                      // Font size 24
                        lcd_.DisplayStringAt(10, 250, (uint8_t *)" Step Control ", LEFT_MODE);            // Display main header text  
                    
                        
                        Button button3D1(lcd_, ts_, 20, 300, 160, 70,            
                                     LCD_COLOR_BLUE, LCD_COLOR_YELLOW, 2, "Stand", Font20);    // Define button3D1 button            
                        button3D1.Render(); 
    
                        Button button3D2(lcd_, ts_, 220, 300, 160, 70,            
                                     LCD_COLOR_BLUE, LCD_COLOR_YELLOW, 2, "Start", Font20);    // Define button3D2 button            
                        button3D2.Render();  
                           
                        Button button3D3(lcd_, ts_, 420, 300, 160, 70,            
                                     LCD_COLOR_BLUE, LCD_COLOR_YELLOW, 2, "Stepping", Font20);    // Define button3D3 button            
                        button3D3.Render();   
                        Button button3D4(lcd_, ts_, 620, 300, 160, 70,            
                                     LCD_COLOR_BLUE, LCD_COLOR_YELLOW, 2, "EndStep", Font20);    // Define button3D3 button            
                        button3D4.Render();     
                        
                        lcd_.SetTextColor(LCD_COLOR_RED);   
                        lcd_.SetFont(&Font24);                                                                      // Font size 24
                        lcd_.DisplayStringAt(280, 440, (uint8_t *)" MOTION PROJECT ", LEFT_MODE);            // Display main header text
                        
                        Button btn5(lcd_, ts_, 660, 410, 120, 60,
                                     LCD_COLOR_ORANGE, LCD_COLOR_GRAY, 1, "Next", Font20);  // Define btn4 button                   
                        btn5.Render();  
                        
                        wait(0.2); 
                        } 
            wait(0.02f);           
            }   
        }                                                          // End test button instructions                                                                // End 3D button instructions

        wait(0.02f);   
           
            Millis = millis();                                  //
    if (Millis - PreviousCycle >= 10)                   // each 10 mS   
    {                                                   // 
      PreviousCycle = Millis;                           //
    
      EASYCAT.MainTask();                               // execute the EasyCAT task
      
      
      
      EASYCAT.BufferIn.Cust.Standing_Time_T= Standing_Time;
      
      EASYCAT.BufferIn.Cust.Step_Time_T= Step_Time;
      
      EASYCAT.BufferIn.Cust.Wait_COM_Tr_Time_T= Wait_COM_Tr_Time;
      
      EASYCAT.BufferIn.Cust.COM_Tr_Threshold_T= (COM_Tr_Threshold/100);    
      
      
      
      EASYCAT.BufferIn.Cust.Stand= stand;
      
      EASYCAT.BufferIn.Cust.Start = start;
      
      EASYCAT.BufferIn.Cust.Stepping = stepping;

      EASYCAT.BufferIn.Cust.EndStep = endStep;
      
      EASYCAT.BufferIn.Cust.Enable= enable;

      EASYCAT.BufferIn.Cust.EnableLateral = enable_Lateral;

      EASYCAT.BufferIn.Cust.QuickStop = quick_Stop;
      
      EASYCAT.BufferIn.Cust.ClearFault = clear_Fault;
      
      //Ethercat = EASYCAT.BufferOut.Cust.EtherCAT;
      
      //Running_Time = EASYCAT.BufferOut.Cust.Running_Time_T ;
      
      //State_Step = EASYCAT.BufferOut.Cust.State_Step_T ;
      
      //Status_Driver = EASYCAT.BufferOut.Cust.Status_Driver_T ;
      
      //END = EASYCAT.BufferOut.Cust.END_T ;
      
                                                           
    }   
        sprintf(Ethercat_S, "%d", Ethercat);
        lcd_.SetFont(&Font24);
        lcd_.SetTextColor(LCD_COLOR_BLACK);
        lcd_.DisplayStringAt(320, 20, (uint8_t *)Ethercat_S, LEFT_MODE);            // Display main header text
        
        
        sprintf(Running_Time_S, "%0.2f", Running_Time);
        lcd_.SetFont(&Font24);
        lcd_.SetTextColor(LCD_COLOR_BLACK);
        lcd_.DisplayStringAt(700, 20, (uint8_t *)Running_Time_S, LEFT_MODE);            // Display main header text
        
        sprintf(State_Step_S, "%d", State_Step);
        lcd_.SetFont(&Font24);
        lcd_.SetTextColor(LCD_COLOR_BLACK);
        lcd_.DisplayStringAt(320, 60, (uint8_t *)State_Step_S, LEFT_MODE);            // Display main header text
        
        sprintf(Status_Driver_S, "%d", Status_Driver);
        lcd_.SetFont(&Font24);
        lcd_.SetTextColor(LCD_COLOR_BLACK);
        lcd_.DisplayStringAt(700, 60, (uint8_t *)Status_Driver_S, LEFT_MODE);            // Display main header text
        
        sprintf(END_S, "%d", END);
        lcd_.SetFont(&Font24);
        lcd_.SetTextColor(LCD_COLOR_BLACK);
        lcd_.DisplayStringAt(150, 440, (uint8_t *)END_S, LEFT_MODE);            // Display main header text       
    }                                                               // End Main program loop
}                                                                   // End Main program 


//--- functions for Arduino "millis()" emulation -------------------------------------


void InitMillis(void) 
{
  uS_Tick.attach (&mS_Tick, 0.001);        
}

void mS_Tick(void)
{
  MillisVal++;
}
void Menu0(void)
{

    }