Реализация меню TFT Touch

Нет ответов
dranenkov
Offline
Зарегистрирован: 30.11.2017
Подскажите новичку. Слишком дилетантский подход к реализации многоуровневого меню? Может не в ту сторону роюсь? И есть ли варианты путешествия по меню не в loop?
#include <UTFT.h>                           //подключаем библиотеку UTFT
#include <URTouch.h>                        //подключаем библиотеку сенсорного экрана
UTFT    myGLCD(ILI9341_16,38,39,40,41);     //тип дисплея и контакты
URTouch  myTouch( 6, 5, 4, 3, 2);           //сенсор и контакты

extern uint8_t SmallFontRus[];                //подключаем маленький русский шрифт
extern uint8_t BigFontRus[];                  //подключаем большой русский шрифт
extern uint8_t SmallFont[];                   //подключаем маленький шрифт
extern uint8_t BigFont[];                     //подключаем большой шрифт
extern uint8_t SevenSegNumFont[];             //подключаем цыфры 

int x, y;
int currentpage = 0;
void setup()
{
  myGLCD.InitLCD();
  myGLCD.clrScr();
  myTouch.InitTouch();
  myTouch.setPrecision(PREC_MEDIUM);
  myGLCD.setFont(BigFont, BigFontRus);
  myGLCD.setBackColor(0, 0, 255);
    dispScreen0();
   
}
void clearScreen()
{
    myGLCD.clrScr();
    myGLCD.fillScr(0, 0, 255);
            
}

//рисуем кнопки

void dispScreen0()                                //экран 0
{
    myGLCD.fillScr(0, 0, 255);                    //закрасить фон
    //кнопка меню
    myGLCD.setColor(0, 0, 255);                   //цвет прямоугольника
    myGLCD.fillRoundRect (10, 10, 310, 115);      //закрашенный прямоугольник
    myGLCD.setColor(255, 255, 255);               //цвет рамки
    myGLCD.drawRoundRect (10, 10, 310, 115);      //прямоугольник
    myGLCD.print("МЕНЮ",128,57);                  //выводим надпись
    //кнопка мониторинг
    myGLCD.setColor(0, 0, 255);                   //цвет прямоугольника
    myGLCD.fillRoundRect (10, 125, 310, 230);     //закрашенный прямоугольник
    myGLCD.setColor(255, 255, 255);               //цвет рамки
    myGLCD.drawRoundRect (10, 125, 310, 230);     //прямоугольник
    myGLCD.print("МОНИТОРИНГ",80,170);            //выводим надпись

}
void dispScreen1()                               //экран 1 меню
{
    myGLCD.fillScr(0,0,255);                      //закрасить фон
//кнопка назад   
    myGLCD.setColor(0, 0, 255);                   //цвет прямоугольника
    myGLCD.fillRoundRect (10, 200, 145, 230);      //закрашенный прямоугольник
    myGLCD.setColor(255, 255, 255);               //цвет рамки
    myGLCD.drawRoundRect (10, 200, 145, 230);      //прямоугольник
    myGLCD.print("НАЗАД",38,207);

//вторая кнопка
    myGLCD.setColor(0, 0, 255);                                   //цвет прямоугольника
    myGLCD.fillRoundRect (165, 200, 310, 230);      //закрашенный прямоугольник
    myGLCD.setColor(255, 255, 255);                               //цвет рамки
    myGLCD.drawRoundRect (165, 200, 310, 230);      //прямоугольник
    myGLCD.print("ВПЕРЕД",190,207);
}

void waitForIt(int x1, int y1, int x2, int y2)
{
  myGLCD.setColor(255, 0, 0);
  myGLCD.drawRoundRect (x1, y1, x2, y2);
  while (myTouch.dataAvailable())
  myTouch.read();
  myGLCD.setColor(255, 255, 255);
  myGLCD.drawRoundRect (x1, y1, x2, y2);
}


void loop()
{
if (currentpage == 0)
{
if (myTouch.dataAvailable())
{
    myTouch.read();
    x=myTouch.getX();
    y=myTouch.getY();
{      
    if(y>=10 && y<=115 && x>=10 && x<=310)
{
    waitForIt(10,10,310,115);
    currentpage = 1;
    dispScreen1();
}    
}  
}  
}


if (currentpage == 1)
  {
    if (myTouch.dataAvailable())
      {
        myTouch.read();
        x=myTouch.getX();
        y=myTouch.getY();
      }      
          if(y>=200 && y<=230 && x>=10 && x<=145)
            {
               waitForIt(10,200,145,230);
               currentpage = 0;
               dispScreen0();
             }  
}
}