Проблема с Touchscreen'ом
- Войдите на сайт для отправки комментариев
Проблема следующая.
Есть экран 2.8 ITDB02 SHIELD http://devicter.ru/goods/2-8-TFT-Touch-Shield-2?from=ZTA1
Есть arduino mega 2560, freeduino mega 2560.
Экран заработал только после того как сделал как по ссылке указано http://arduino.ru/forum/apparatnye-voprosy/raznitsa-pri-podklyuchenii-tft-k-leonardo-i-mega-2560
Я делал меню для тача, все нормально работало. В один прекрасный момент перестал работать экран. Загрузка одназначно рабочего скетча не принесла результатов. Начал разбираться, ничего не менялось. Т.к. отключал экран несколько раз находу решил что спалил экран, и купил новый. На новом экране та же фигня. Купил фридуину, скетч загружается, то что должно происходить при нажатии на экран происходит, но не выводится.
Я уже голову сломал, подскажите, что может быть не так?
Пример скетча
#include <UTFT.h>
#include <UTouch.h>
extern uint8_t BigFont[];
UTFT myGLCD(ILI9325D_8,A5,A4,A3,A2);
UTouch myTouch(A1,A2,A0,8,9);
int x, y, a, b, c, h, t, p, h1, t1,m;
int Vib = A7;
int Aud = A6;
/*************************
** Custom functions **
*************************/
void drawSettings()
{
// Основное меню
// Рисуется верхняя кнопка
myGLCD.setColor(100, 200, 140);
myGLCD.fillRoundRect (5, 5, 310, 120);
myGLCD.setColor(0, 0, 0);
myGLCD.drawRoundRect (5, 5, 310, 120);
myGLCD.print("SETTINGS", 90, 60);
}
void drawStart()
{
// Рисуется нижняя кнопка
myGLCD.setColor(100, 200, 140);
myGLCD.fillRoundRect (5, 130, 310, 240);
myGLCD.setColor(0, 0, 0);
myGLCD.drawRoundRect (5, 130, 310, 240);
myGLCD.print("START", 115, 180);
}
void drawProcess()
{
// Рисуется PROCESS
myGLCD.setColor(100, 200, 140);
myGLCD.fillRoundRect (70, 70, 245, 170);
myGLCD.setColor(0, 0, 0);
myGLCD.drawRoundRect (70, 70, 245, 170);
myGLCD.print("PROCESS", 100, 112);
}
void secMenu11()
{
// Меню настроек
// Рисуется левая кнопка скорости
myGLCD.setColor(100, 200, 140);
myGLCD.fillRoundRect (5, 5, 65, 60);
myGLCD.setColor(0, 0, 0);
myGLCD.drawRoundRect (5, 5, 65, 60);
myGLCD.print("<-", 20, 25);
}
void secMenu12()
{
// Рисуется скорость
myGLCD.setColor(100, 200, 140);
myGLCD.fillRoundRect (70, 5, 170, 60);
myGLCD.setColor(0, 0, 0);
myGLCD.drawRoundRect (70, 5, 170, 60);
myGLCD.print("Speed", 80, 25);
}
void secMenu13()
{
// Рисуется правая кнопка скорости
myGLCD.setColor(100, 200, 140);
myGLCD.fillRoundRect (175, 5, 235, 60);
myGLCD.setColor(0, 0, 0);
myGLCD.drawRoundRect (175, 5, 235, 60);
myGLCD.print("->", 190, 25);
}
void secMenu14()
{
// Рисуется значение скорости
myGLCD.setColor(100, 200, 140);
myGLCD.fillRoundRect (240, 5, 310, 60);
myGLCD.setColor(0, 0, 0);
myGLCD.drawRoundRect (240, 5, 310, 60);
myGLCD.printNumI(a, 252, 25);
}
void secMenu21()
{
// Усилие
// Рисуется левая кнопка усилия
myGLCD.setColor(100, 200, 140);
myGLCD.fillRoundRect (5, 65, 65, 120);
myGLCD.setColor(0, 0, 0);
myGLCD.drawRoundRect (5, 65, 65, 120);
myGLCD.print("<-", 20, 85);
}
void secMenu22()
{
// Рисуется Усилие
myGLCD.setColor(100, 200, 140);
myGLCD.fillRoundRect (70, 65, 170, 120);
myGLCD.setColor(0, 0, 0);
myGLCD.drawRoundRect (70, 65, 170, 120);
myGLCD.print("Force", 80, 85);
}
void secMenu23()
{
// Рисуется значение усилия
myGLCD.setColor(100, 200, 140);
myGLCD.fillRoundRect (175, 65, 235, 120);
myGLCD.setColor(0, 0, 0);
myGLCD.drawRoundRect (175, 65, 235, 120);
myGLCD.print("->", 190, 85);
}
void secMenu24()
{
// Рисуется правая кнопка усилия
myGLCD.setColor(100, 200, 140);
myGLCD.fillRoundRect (240, 65, 310, 120);
myGLCD.setColor(0, 0, 0);
myGLCD.drawRoundRect (240, 65, 310, 120);
myGLCD.printNumI(b, 252, 85);
}
void secMenu31()
{
// Повторения
// Рисуется левая кнопка Повторения
myGLCD.setColor(100, 200, 140);
myGLCD.fillRoundRect (5, 125, 65, 180);
myGLCD.setColor(0, 0, 0);
myGLCD.drawRoundRect (5, 125, 65, 180);
myGLCD.print("<-", 20, 145);
}
void secMenu32()
{
// Рисуется Повторения
myGLCD.setColor(100, 200, 140);
myGLCD.fillRoundRect (70, 125, 170, 180);
myGLCD.setColor(0, 0, 0);
myGLCD.drawRoundRect (70, 125, 170, 180);
myGLCD.print("REPS", 80, 145);
}
void secMenu33()
{
// Рисуется значение Повторения
myGLCD.setColor(100, 200, 140);
myGLCD.fillRoundRect (175, 125, 235, 180);
myGLCD.setColor(0, 0, 0);
myGLCD.drawRoundRect (175, 125, 235, 180);
myGLCD.print("->", 190, 145);
}
void secMenu34()
{
// Рисуется правая кнопка Повторения
myGLCD.setColor(100, 200, 140);
myGLCD.fillRoundRect (240, 125, 310, 180);
myGLCD.setColor(0, 0, 0);
myGLCD.drawRoundRect (240, 125, 310, 180);
myGLCD.printNumI(c, 252, 145);
}
void secMenu4()
{
// Возврат в меню
// Рисуется возврат в меню
myGLCD.setColor(100, 200, 140);
myGLCD.fillRoundRect (5, 185, 310, 235);
myGLCD.setColor(0, 0, 0);
myGLCD.drawRoundRect (5, 185, 310, 235);
myGLCD.print("Apply", 120, 200);
}
void Vibration()
{
digitalWrite(Vib, HIGH);
digitalWrite(Aud, HIGH);
delay(150);
digitalWrite(Vib, LOW);
digitalWrite(Aud, LOW);
delay(150);
}
void Vibration2()
{
digitalWrite(Vib, HIGH);
digitalWrite(Aud, HIGH);
delay(150);
digitalWrite(Vib, LOW);
digitalWrite(Aud, LOW);
delay(50);
digitalWrite(Vib, HIGH);
digitalWrite(Aud, HIGH);
delay(150);
digitalWrite(Vib, LOW);
digitalWrite(Aud, LOW);
delay(50);
digitalWrite(Vib, HIGH);
digitalWrite(Aud, HIGH);
delay(500);
digitalWrite(Vib, LOW);
digitalWrite(Aud, LOW);
delay(50);
}
/*************************
** Required functions **
*************************/
void setup()
{
myGLCD.InitLCD();
myGLCD.clrScr();
myTouch.InitTouch();
myTouch.setPrecision(PREC_MEDIUM);
myGLCD.setFont(BigFont);
myGLCD.setBackColor(100,200,140);
drawSettings();
drawStart();
a=4;
b=4;
c=4;
p=0;
m=0;
pinMode(Vib, OUTPUT);
pinMode(Aud, OUTPUT);
}
void loop()
{
back:
drawSettings();
drawStart();
while (true)
{
if (myTouch.dataAvailable())
{
myTouch.read();
x=myTouch.getX();
y=myTouch.getY();
if ((x>=5)&&(x<=310))
{
if ((y>=5)&&(y<=120))
{
Vibration();
myGLCD.clrScr();
secMenu11();secMenu12();secMenu13();secMenu14();
secMenu21();secMenu22();secMenu23();secMenu24();
secMenu31();secMenu32();secMenu33();secMenu34();
secMenu4();
while(true)
{if (myTouch.dataAvailable())
{
myTouch.read();
t=myTouch.getX();
h=myTouch.getY();
{
if ((h>=5)&&(h<=60)) //настройка скорости
{if ((t>=5)&&(t<=65))
{if (a>0) {a=a-1; Vibration();} if (a==0) {a=0; Vibration();} secMenu14();}
if ((t>=175)&&(t<=235))
{if (a>0) {a=a+1; Vibration();} if (a==0) {a=a+1; Vibration();} secMenu14();}
}
if ((h>=65)&&(h<=120)) //настройка усилия
{
if ((t>=5)&&(t<=65))
{if (b>0) {b=b-1; Vibration();} if (b==0) {b=0; Vibration();} secMenu24();}
if ((t>=175)&&(t<=235))
{if (b>0) {b=b+1; Vibration();} if (b==0) {b=b+1; Vibration();} secMenu24();}
}
if ((h>=125)&&(h<=180)) //настройка повторений
{
if ((t>=5)&&(t<=65))
{if (c>0) {c=c-1; Vibration();} if (c==0) {c=0; Vibration();} secMenu34();}
if ((t>=175)&&(t<=235))
{if (c>0) {c=c+1; Vibration();} if (c==0) {c=c+1; Vibration();} secMenu34();}
}
if ((h>=185)&&(h<=235)) //APPLY
{
if ((t>=5)&&(t<=310))
{p=0; Vibration2(); myGLCD.clrScr(); goto back;}
}
}
}
}
}
if ((y>=130)&&(y<=240))
{
Vibration();
myGLCD.clrScr();
drawProcess();
while(true)
{
if (myTouch.dataAvailable())
{
myTouch.read();
t1=myTouch.getX();
h1=myTouch.getY();
{
if ((h1>=5)&&(h1<=310))
{if ((t1>=5)&&(t1<=240))
{myGLCD.clrScr(); Vibration2(); goto back;}
}
}
}
}
}
}
}
}
}//end loop
А что значит - "перестал работать экран"?
- Нет реакции от тачскрина (что напрашивается, исходя из названия темы)?
- Отсутствует изображение (что больше соответствует комбинации слов "экран+работа")?
- Еще что-нибудь?
Отсутствует изображение.
Действие при нажатии на тач есть...
Я, побаловавшись подобным шильдиком, отложил его в сторону - уж очень капризное у него соединение, в некоторых положениях отказывалось служить, как положено. Возможно и у вас проблема с правильным контактом.
Удалось решить проблему. Оказалось, что видимо были внесены изменения в библиотеку UTFT, новая версия не работает с редактированным файлом HW_AVR.h. Если библиотеку не обновлять и оставить старую версию, все прекрано работает.
а можете дать ссылку на старые библиотеки? пожалуйста