Сбивается калибровка сенсорного дисплея.

hoha24
Offline
Зарегистрирован: 23.11.2013

Доброго дня!

Почему сбивается калибровка сенсорного дисплея?

Имеется : MEGA 2560 , 3.2 TFT LCD Display , TFT LCD Shield.

Скачал библиотеки, откалибровал сенсор, загружаю скетч все нормально работает.

Стоит только обесточить и снова подключить питание ,  сразу сбивается калибровка сенсорного дисплея.

Программа работает и сенсор тоже (это можно понять по неправильным срабатываниям), а калибровка сбита.

Заливаю скетчи из "примеров".

Если загрузить скетч заново, все опять работает.

Почему так происходит?

Клапауций
Offline
Зарегистрирован: 10.02.2013

результаты калибровки вкуда-то пишутся для последующей загрузки после включения халабуды?

hoha24
Offline
Зарегистрирован: 23.11.2013

Калибровал как написано тут : http://habrahabr.ru/post/196864/

Результаты калибровки вписываются в фаил UTouch_CD.h, в библиотеке UTouch.

Клапауций
Offline
Зарегистрирован: 10.02.2013

hoha24 пишет:

Калибровал как написано тут : http://habrahabr.ru/post/196864/

Результаты калибровки вписываются в фаил UTouch_CD.h, в библиотеке UTouch.

если записываются(проверить - записываются ли) и считываются при запуске программы(проверить), то должно работать, иначе что-то одно двух не выполняется - тем более, если на самом хабре написано, как нужно

и, код опубликуйте - иначе, чисто теоретически можно предполагать... или телепатически

hoha24
Offline
Зарегистрирован: 23.11.2013

Код например такой ( роботает до отключиния питания ) :

// UTouch_ButtonTest (C)2010-2012 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
//
// This program is a quick demo of how create and use buttons.
//
// This program requires the UTFT library.
//
// It is assumed that the display module is connected to an
// appropriate shield or that you know how to change the pin 
// numbers in the setup.
//

#include <UTFT.h>
#include <UTouch.h>

// Declare which fonts we will be using
extern uint8_t BigFont[];

// Uncomment the next two lines for the Arduino 2009/UNO
//UTFT        myGLCD(ITDB24D,19,18,17,16);   // Remember to change the model parameter to suit your display module!
//UTouch      myTouch(15,10,14,9,8);

// Uncomment the next two lines for the Arduino Mega
UTFT        myGLCD(ITDB32S, 38,39,40,41);   // Remember to change the model parameter to suit your display module!
UTouch      myTouch(6,5,4,3,2);

int x, y;
char stCurrent[20]="";
int stCurrentLen=0;
char stLast[20]="";

/*************************
**   Custom functions   **
*************************/

void drawButtons()
{
// Draw the upper row of buttons
  for (x=0; x<5; x++)
  {
    myGLCD.setColor(0, 0, 255);
    myGLCD.fillRoundRect (10+(x*60), 10, 60+(x*60), 60);
    myGLCD.setColor(255, 255, 255);
    myGLCD.drawRoundRect (10+(x*60), 10, 60+(x*60), 60);
    myGLCD.printNumI(x+1, 27+(x*60), 27);
  }
// Draw the center row of buttons
  for (x=0; x<5; x++)
  {
    myGLCD.setColor(0, 0, 255);
    myGLCD.fillRoundRect (10+(x*60), 70, 60+(x*60), 120);
    myGLCD.setColor(255, 255, 255);
    myGLCD.drawRoundRect (10+(x*60), 70, 60+(x*60), 120);
    if (x<4)
      myGLCD.printNumI(x+6, 27+(x*60), 87);
  }
  myGLCD.print("0", 267, 87);
// Draw the lower row of buttons
  myGLCD.setColor(0, 0, 255);
  myGLCD.fillRoundRect (10, 130, 150, 180);
  myGLCD.setColor(255, 255, 255);
  myGLCD.drawRoundRect (10, 130, 150, 180);
  myGLCD.print("Clear", 40, 147);
  myGLCD.setColor(0, 0, 255);
  myGLCD.fillRoundRect (160, 130, 300, 180);
  myGLCD.setColor(255, 255, 255);
  myGLCD.drawRoundRect (160, 130, 300, 180);
  myGLCD.print("Enter", 190, 147);
  myGLCD.setBackColor (0, 0, 0);
}

void updateStr(int val)
{
  if (stCurrentLen<20)
  {
    stCurrent[stCurrentLen]=val;
    stCurrent[stCurrentLen+1]='\0';
    stCurrentLen++;
    myGLCD.setColor(0, 255, 0);
    myGLCD.print(stCurrent, LEFT, 224);
  }
  else
  {
    myGLCD.setColor(255, 0, 0);
    myGLCD.print("BUFFER FULL!", CENTER, 192);
    delay(500);
    myGLCD.print("            ", CENTER, 192);
    delay(500);
    myGLCD.print("BUFFER FULL!", CENTER, 192);
    delay(500);
    myGLCD.print("            ", CENTER, 192);
    myGLCD.setColor(0, 255, 0);
  }
}

// Draw a red frame while a button is touched
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);
}

/*************************
**  Required functions  **
*************************/

void setup()
{
// Initial setup
  myGLCD.InitLCD();
  myGLCD.clrScr();

  myTouch.InitTouch();
  myTouch.setPrecision(PREC_MEDIUM);

  myGLCD.setFont(BigFont);
  myGLCD.setBackColor(0, 0, 255);
  drawButtons();  
}

void loop()
{
  while (true)
  {
    if (myTouch.dataAvailable())
    {
      myTouch.read();
      x=myTouch.getX();
      y=myTouch.getY();
      
      if ((y>=10) && (y<=60))  // Upper row
      {
        if ((x>=10) && (x<=60))  // Button: 1
        {
          waitForIt(10, 10, 60, 60);
          updateStr('1');
        }
        if ((x>=70) && (x<=120))  // Button: 2
        {
          waitForIt(70, 10, 120, 60);
          updateStr('2');
        }
        if ((x>=130) && (x<=180))  // Button: 3
        {
          waitForIt(130, 10, 180, 60);
          updateStr('3');
        }
        if ((x>=190) && (x<=240))  // Button: 4
        {
          waitForIt(190, 10, 240, 60);
          updateStr('4');
        }
        if ((x>=250) && (x<=300))  // Button: 5
        {
          waitForIt(250, 10, 300, 60);
          updateStr('5');
        }
      }

      if ((y>=70) && (y<=120))  // Center row
      {
        if ((x>=10) && (x<=60))  // Button: 6
        {
          waitForIt(10, 70, 60, 120);
          updateStr('6');
        }
        if ((x>=70) && (x<=120))  // Button: 7
        {
          waitForIt(70, 70, 120, 120);
          updateStr('7');
        }
        if ((x>=130) && (x<=180))  // Button: 8
        {
          waitForIt(130, 70, 180, 120);
          updateStr('8');
        }
        if ((x>=190) && (x<=240))  // Button: 9
        {
          waitForIt(190, 70, 240, 120);
          updateStr('9');
        }
        if ((x>=250) && (x<=300))  // Button: 0
        {
          waitForIt(250, 70, 300, 120);
          updateStr('0');
        }
      }

      if ((y>=130) && (y<=180))  // Upper row
      {
        if ((x>=10) && (x<=150))  // Button: Clear
        {
          waitForIt(10, 130, 150, 180);
          stCurrent[0]='\0';
          stCurrentLen=0;
          myGLCD.setColor(0, 0, 0);
          myGLCD.fillRect(0, 224, 319, 239);
        }
        if ((x>=160) && (x<=300))  // Button: Enter
        {
          waitForIt(160, 130, 300, 180);
          if (stCurrentLen>0)
          {
            for (x=0; x<stCurrentLen+1; x++)
            {
              stLast[x]=stCurrent[x];
            }
            stCurrent[0]='\0';
            stCurrentLen=0;
            myGLCD.setColor(0, 0, 0);
            myGLCD.fillRect(0, 208, 319, 239);
            myGLCD.setColor(0, 255, 0);
            myGLCD.print(stLast, LEFT, 208);
          }
          else
          {
            myGLCD.setColor(255, 0, 0);
            myGLCD.print("BUFFER EMPTY", CENTER, 192);
            delay(500);
            myGLCD.print("            ", CENTER, 192);
            delay(500);
            myGLCD.print("BUFFER EMPTY", CENTER, 192);
            delay(500);
            myGLCD.print("            ", CENTER, 192);
            myGLCD.setColor(0, 255, 0);
          }
        }
      }
    }
  }
}

 

Клапауций
Offline
Зарегистрирован: 10.02.2013

на хабре процедура калибровки описана более чем подробно

Прежде чем продолжить работу необходимо выполнить еще одну важную процедуру – калибровку сенсорного экрана. В примерах программ, поставляемых с дополнением Utouch есть один очень важный пример, который называется UTouch_Calibration

Для выполнения калибровки необходимо открыть этот пример через меню:

«Файл->Примеры->UTouch->Arduino->UTouch_Calibration». 



ВНИМАНИЕ! Перед компиляцией не забудьте заменить строки UTFT myGLCD(….) и UTouch myTouch(….) на те, что нужны для нашего дисплея.

 

abt
Offline
Зарегистрирован: 23.11.2013

у меня калибровка сбивалась из за не хватки мощности питания когда работал только от USB. Если еще что то висит сверху кроме экрана, тока может не хватить.. чуток убрал подсветочку экрана регулятором, более стабильно заработало.

А так настройки, по моему нужно самому вбивать в файл который вы указали, они там не меняются. Программа вам выдает только значения, которые вы записываете в файл сами.

hoha24
Offline
Зарегистрирован: 23.11.2013

Настройки конечно нужно вбивать самому,что я и сделал.

Регулировка подсветки результатов не дала. Убирал на минимум.

Клапауций
Offline
Зарегистрирован: 10.02.2013

hoha24 пишет:

Настройки конечно нужно вбивать самому,что я и сделал.

Регулировка подсветки результатов не дала. Убирал на минимум.

запитайте подсветку от отдельного блока питания и ищите, что вы неправильно делаете

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

вообще не понятно. ниразу не калибровал. достал с коробки, включил и все работает.. нафиг вы лезете в ту каблировку если в большинстве случаев оно нафиг не нада? скучно?

hoha24
Offline
Зарегистрирован: 23.11.2013

Мы не ищем легких путей :)

hoha24
Offline
Зарегистрирован: 23.11.2013

Лечится использованием библиотеки ITDB02_Touch  вместо UTouch

Villi
Offline
Зарегистрирован: 06.09.2015

Не могу откалибровать тачскрин.

Наборт такой: MEGA 2560, 3.95 TFT LCD Display от mcufriend.com 400x272, дисплей нормально работает с библиотекой UTFT.h при инициализации R61581  (правда сначала было зеркальное изображение, сейчас нормально).

Но с тачскрином - проблема. Библиотеку использую UTouch.h. На стандартной калибровке тач работает, но некорректно, например в скетче UTouch_QuickDraw при рисовании рисунок не на весь екран, и тоже рисует зеркально. Сделал калибровку UTouch_Calibration по инструкции, заменил константы - не работает, при рисовании екран пустой, только иногда появляються одинокие точки по периметру дисплея. Если CAL_X и CAL_Y оставить стандартные, а CAL_S использовать тот что дала калибровка, тогда рисунок получается на весь дисплей, но рисуется зеркально, т.е. я рисую от центра влево и вниз, а линия получается вправо и вверх.

UTouch_Calibration конечно же оригинальный, только инициализация под свой контроллер.

Подскажите, куда копать???

Villi
Offline
Зарегистрирован: 06.09.2015

Народ, посоветуте плиз!