Реализация меню TFT Touch
- Войдите на сайт для отправки комментариев
Втр, 05/12/2017 - 00:18
Подскажите новичку. Слишком дилетантский подход к реализации многоуровневого меню? Может не в ту сторону роюсь? И есть ли варианты путешествия по меню не в 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();
}
}
}