Официальный сайт компании Arduino по адресу arduino.cc
Калибровка экрана tft-lcd-7
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Добрый день!
Пытаюсь произвести калибровку экрана
Есть такой экран - http://roboparts.ru/products/tft-lcd-7-inch-module
Такой шилд - http://devicter.ru/goods/ITDB02-LCD-Mega-Shield-V2-0
Калибровку произвёл, в итоге получил вот такие данные, которые прописал в
UTouchCD.h
#define CAL_X 0x01DE8811UL
#define CAL_Y 0x028A074FUL
#define CAL_S 0x001DF31FUL
НО на выходе получается какая-то ерунда
Тач экран стоит криво, пототму что не дотягивается шлейф, может из-за этого такие глюки?
На экране я вывожу просто координату - х, того места куда кликнули.
Получается какая-то абракадабра с координатами.
Вот код вывода координат
myTouch.read(); x=myTouch.getX(); y=myTouch.getY(); if(x > 0 && y>0) { myGLCD.printNumI(y, x, y); }
А вот вот код скетча.
// UTouch_ButtonTest // Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved // web: http://www.RinkyDinkElectronics.com/ // // 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> // Initialize display // ------------------ // Set the pins to the correct ones for your development board // ----------------------------------------------------------- // Standard Arduino Uno/2009 Shield : <display model>,19,18,17,16 // Standard Arduino Mega/Due shield : <display model>,38,39,40,41 // CTE TFT LCD/SD Shield for Arduino Due : <display model>,25,26,27,28 // Teensy 3.x TFT Test Board : <display model>,23,22, 3, 4 // ElecHouse TFT LCD/SD Shield for Arduino Due : <display model>,22,23,31,33 // // Remember to change the model parameter to suit your display module! UTFT myGLCD(CTE70,38,39,40,41); // Initialize touchscreen // ---------------------- // Set the pins to the correct ones for your development board // ----------------------------------------------------------- // Standard Arduino Uno/2009 Shield : 15,10,14, 9, 8 // Standard Arduino Mega/Due shield : 6, 5, 4, 3, 2 // CTE TFT LCD/SD Shield for Arduino Due : 6, 5, 4, 3, 2 // Teensy 3.x TFT Test Board : 26,31,27,28,29 // ElecHouse TFT LCD/SD Shield for Arduino Due : 25,26,27,29,30 // UTouch myTouch( 6, 5, 4, 3, 2); // Declare which fonts we will be using extern uint8_t BigFont[]; 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) { myTouch.read(); x=myTouch.getX(); y=myTouch.getY(); if(x > 0 && y>0) { myGLCD.printNumI(y, x, y); } 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); } } } } } }
Это начало кода калибровки
#include <UTFT.h> #include <UTouch.h> #define TOUCH_ORIENTATION PORTRAIT UTFT myGLCD(CTE70,38,39,40,41); UTouch myTouch(6, 5, 4, 3, 2);
И еще мне не понятно, какой параметр надо выставлять в TOUCH_ORIENTATION
Если я выставляю LANDSCAPE , то пропадает реакция на тач.
Спасибо
У тача есть X и Y выводы.
Xl, Xr, Yu, Yd т.е. лево, право, верх, низ. Убедитесь что выводы подключены правильно. Очень похоже что у вас как минимум перепутаны X c Y выводы. Значения разрешения меняли перед компиляцией. При работе с 7" TFT поддерживается только ориентация LANDSCAPE, читайте мануал к библиотеке.
http://arduino.ru/forum/apparatnye-voprosy/arduno-2560-7-ekran-lcd-tft#c...