Проблема с Touchscreen'ом

Otheral
Offline
Зарегистрирован: 22.10.2012

Проблема следующая.

Есть экран 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

 

step962
Offline
Зарегистрирован: 23.05.2011

А что значит - "перестал работать экран"?

- Нет реакции от тачскрина (что напрашивается, исходя из названия темы)?

- Отсутствует изображение (что больше соответствует комбинации слов "экран+работа")?

- Еще что-нибудь?

Otheral
Offline
Зарегистрирован: 22.10.2012

Отсутствует изображение.

Действие при нажатии на тач есть...

step962
Offline
Зарегистрирован: 23.05.2011

Я, побаловавшись подобным шильдиком, отложил его в сторону - уж очень капризное у него соединение, в некоторых положениях отказывалось служить, как положено. Возможно  и у вас проблема с правильным контактом.

Otheral
Offline
Зарегистрирован: 22.10.2012

Удалось решить проблему. Оказалось, что видимо были внесены изменения в библиотеку UTFT, новая версия не работает с редактированным файлом HW_AVR.h. Если библиотеку не обновлять и оставить старую версию, все прекрано работает.

Апрайсин
Апрайсин аватар
Offline
Зарегистрирован: 05.08.2013

а можете дать ссылку на старые библиотеки? пожалуйста