TFT 3,5" и Ардуино

awarm
Offline
Зарегистрирован: 09.02.2012

Ну в моем есть еще тач. В результате зона применения весьма расширяется. Ведь Вы согласитесь, что есть разница между обычным дисплеем и к примеру планшетом? И кроме отображения информации появляется весьма нехилая интерактивность. У меня правда версия для уно. Поэтому и скорость и количество портов маловаты. В варианте с мегой все намного интересней. Что и показано на вашем фото.

URkA
Offline
Зарегистрирован: 21.03.2014

Puhlyaviy Не пойму это инстаграм ? Какого тут делают фотки "такого"  использования, ни пояснений, ничего!? В чем её ценность, трудно найти человека , решившего купить дисплей , приладить к ардуино и не видевшего тестовой картинки. Завязывай про паяльник и свою " крутизну". Столько постов нахерачил , а толку от них на одно предложение. Скучно тебе? Так заведи свою тему и думаю, найдутся люди , которым будет интересно глядеть твои фотки и читать про свою ущербность рядом с крутым яйцом.

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

awarm пишет:

Ну в моем есть еще тач. В результате зона применения весьма расширяется. Ведь Вы согласитесь, что есть разница между обычным дисплеем и к примеру планшетом? И кроме отображения информации появляется весьма нехилая интерактивность. У меня правда версия для уно. Поэтому и скорость и количество портов маловаты. В варианте с мегой все намного интересней. Что и показано на вашем фото.

тач есть во всех :) нафиг дисплей без тача?

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

URkA пишет:

Puhlyaviy Не пойму это инстаграм ? Какого тут делают фотки "такого"  использования, ни пояснений, ничего!? В чем её ценность, трудно найти человека , решившего купить дисплей , приладить к ардуино и не видевшего тестовой картинки. Завязывай про паяльник и свою " крутизну". Столько постов нахерачил , а толку от них на одно предложение. Скучно тебе? Так заведи свою тему и думаю, найдутся люди , которым будет интересно глядеть твои фотки и читать про свою ущербность рядом с крутым яйцом.

это вы флудите типа? на фото вы видите шильд? вот и нет его так. есть пучек проводов и шилд эзернета... но вам наверно тяжело думать и потому вы флудите :)

URkA
Offline
Зарегистрирован: 21.03.2014

Брехун ты! Не будет работать, если повесить дисплей( шильд) на проводах. Его нужно обязательно только ВТЫКАТЬ в ардуино, иначе никак. Фотожабу убери свою.

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

URkA пишет:

Брехун ты! Не будет работать, если повесить дисплей( шильд) на проводах. Его нужно обязательно только ВТЫКАТЬ в ардуино, иначе никак. Фотожабу убери свою.

дадада. именно так. и еще прям все пины обязательно соединять :) а то совсем не будет работать :)

Дядя Вова
Дядя Вова аватар
Offline
Зарегистрирован: 31.07.2014

PhOSTU пишет:

Удалось кому-нибудь заставить одновременно работать и lcd, и touchscreen? У меня тач без микросхемы. Отдельно пример из библиотеки touchscreen.h работает. Но совместно с UTFT, конечно, нет. Выводы тача подключаются к пинам A1, A2, 6, 7. Но одновременно A1 = WR, A2 = RS. Выходит, что работая с пинами тача, я дергаю контроллер дисплея. Каким образом обойти эту ситуацию? 

О какой библиотеке идет речь? В UTouch такого нет :(

Короче, конкретный вопрос: что прописать в настройках библиотеки UTouch для Arduino Uno R3 + 3,5 TFTLCD 8 бит ili9327 ? Что-то доки не попадаются.

UTouch      myTouch(x,x,x, x, x);

awarm
Offline
Зарегистрирован: 09.02.2012

У меня не полетел. Насколько я понял, в utouch требуется еще генерация прерывания от тача. Но код не курил. Информация с форума поддержки. Работает с библиотекой touchscreen. Сейчас ссылку не дам, т.к. нахожусь на отдыхе, но в в принципе гуглится. Или может кто из местных жителей подскажет. Там только надо пару строк в код добавить. Я писал на предыдущей странице.

Дядя Вова
Дядя Вова аватар
Offline
Зарегистрирован: 31.07.2014

awarm пишет:
У меня не полетел. Насколько я понял, в utouch требуется еще генерация прерывания от тача. Но код не курил. Информация с форума поддержки. Работает с библиотекой touchscreen. Сейчас ссылку не дам, т.к. нахожусь на отдыхе, но в в принципе гуглится. Или может кто из местных жителей подскажет. Там только надо пару строк в код добавить. Я писал на предыдущей странице.

Ну, наверное, да!

в UTouch объявление идет через параметры типа CLK CS Din Dout IRQ, что наводит на мысль о последовательной передаче и прерывании.

А в библиотеке TFTLCD, там где файлы TouchScreen.h TouchScreen.cpp YP, XM, YM, XP == A1 A2 7 6

В этом случае у меня заработал такой скетч:

[Arduino uno r3 + 3.5" TFTLCD 8bit ILI9327]

// Touch screen library with X Y and Z (pressure) readings as well
// as oversampling to avoid 'bouncing'
// This demo code returns raw readings, public domain

#include <stdint.h>
#include "TouchScreen.h"

// These are the pins for the shield!
#define YP A1  // must be an analog pin, use "An" notation!
#define XM A2  // must be an analog pin, use "An" notation!
#define YM 7   // can be a digital pin
#define XP 6   // can be a digital pin

#define MINPRESSURE 2
#define MAXPRESSURE 1000

// For better pressure precision, we need to know the resistance
// between X+ and X- Use any multimeter to read it
// For the one we're using, its 300 ohms across the X plate
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

void setup(void) {
  Serial.begin(9600);
}

void loop(void) {
  // a point object holds x y and z coordinates
  Point p = ts.getPoint();
///  Serial.print("Z = "); Serial.println(p.z);
  // we have some minimum pressure we consider 'valid'
  // pressure of 0 means no pressing!
  if (p.z > MINPRESSURE && p.z < MAXPRESSURE) {
     Serial.print("X = "); Serial.print(p.x);
     Serial.print("\tY = "); Serial.print(p.y);
     Serial.print("\tPressure = "); Serial.println(p.z);
  }
}

 

awarm
Offline
Зарегистрирован: 09.02.2012

Во-во. Оно самое. Только чтобы тач работал одновременно с экраном, в getPoint надо пару строк добавить, которые сохраняют, а потом восстанавливают настройки портов

Дядя Вова
Дядя Вова аватар
Offline
Зарегистрирован: 31.07.2014

awarm пишет:
Во-во. Оно самое. Только чтобы тач работал одновременно с экраном, в getPoint надо пару строк добавить, которые сохраняют, а потом восстанавливают настройки портов

Читал. Но забыл добавить. Вовремя сказал! Нажимаю на экран - данные считываются, но как только ему надо нарисовать - серый экран. Скорее всего порты переназначены ... но это завтра. Тоже хочу искупаться разок :)

PhOSTU
Offline
Зарегистрирован: 20.06.2014

Дядя Вова пишет:

Короче, конкретный вопрос: что прописать в настройках библиотеки UTouch для Arduino Uno R3 + 3,5 TFTLCD 8 бит ili9327 ? Что-то доки не попадаются.

Конкретный ответ. С UTouch данный шилд не работает, т.к. у него 4пина тача непосредственно подключены к пинам ардуино. Поэтому необходимо пользоваться библиотекой Touchscreen.h с дописанными двумя строками в ней (ищи пост выше). На данный момент я несколько подправил данную либу, что позволило увеличить скорость опроса до приемлего для меня уровня, но редко-редко происходит ложное срабатывание. Пока пилю ее дальше. Сейчас планирую заняться адаптацией библиотеки UTouch под наш шилд, чтобы в будущем иметь возможность использования либы UTFT_Buttons. чуть позже выложу либы и тестовый проект (я обедаю сейчас))

(спустя полчаса) пообедал. Вариант с UTFT_Buttons не вариант из-за чрезмерного аппетита на память. В уно столько нету. Прийдется самому реализовывать работу с кнопками.

Выкладываю промежуточный вариант библиотек UTFT и Touchscreen для зелененького UNO шилда 400x240 на ili9327 8bit. А также пример использования типа Paint.

https://yadi.sk/d/CxztS1anZ7b9G

В процессе работы возникли проблемы с выбором белого цвета. Вместо него  отображается розово-сиреневый какой-то. И лишь снизив значения до (251,251,251) получаю адекватный  цвет. 

 

Дядя Вова
Дядя Вова аватар
Offline
Зарегистрирован: 31.07.2014

Видел один раз розовое. Как-то само прошло.

В догонку. Тест "Цифровая клава" на основе известного теста к UTouch, замененого на TouchScreen.h

 

// Тест совместной работы UTFT и тача TFTLCD
// Arduino Uno R3 3.5 inch TFTLCD 8bit
// Правка в файле TouchScreen.cpp:
/////////////////////////////////////////////////////////////////////////////
// Point TouchScreen::getPoint(void) {
//    byte c = DDRC; // http://arduino.ru/forum/apparatnye-voprosy/tft-35-i-arduino?page=3#comme...
// ...........
//    DDRC = c; //restore port c directional settings
//   return Point(x, y, z);
//}
/////////////////////////////////////////////////////////////////////////////
// UTouch_ButtonTest (C)2010-2012 Henning Karlsen
// web: <a href="http://www.henningkarlsen.com/electronics" title="http://www.henningkarlsen.com/electronics" rel="nofollow">http://www.henningkarlsen.com/electronics</a>
//
// 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 <stdint.h>
#include "TouchScreen.h"

bool Debug = false; //режим отладки

// These are the pins for the shield!
#define YP A1  // must be an analog pin, use "An" notation!
#define XM A2  // must be an analog pin, use "An" notation!
#define YM 7   // can be a digital pin
#define XP 6   // can be a digital pin

#define MINPRESSURE 2
#define MAXPRESSURE 1000

// For better pressure precision, we need to know the resistance
// between X+ and X- Use any multimeter to read it
// For the one we're using, its 300 ohms across the X plate
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);


// 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!
UTFT myGLCD(ILI9327_8, A2,A1,A3,A4);

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)
{
if(Debug)
 { Serial.print("\tx1:");  Serial.print(x1);
  Serial.print("\ty1");Serial.print(y1);
  Serial.print("\tx2");Serial.print(x2);
  Serial.print("\ty2");Serial.println(y2);}

myGLCD.setColor(255, 255, 0);
  myGLCD.drawRoundRect (x1, y1, x2, y2);
  delay(500);
  Point p = ts.getPoint();
  while      (p.z > MINPRESSURE && p.z < MAXPRESSURE) 
    Point p = ts.getPoint();

  myGLCD.setColor(255, 0, 0);
  myGLCD.drawRoundRect (x1, y1, x2, y2);
  }

/*************************
**  Required functions  **
*************************/
void setup()
{
 if (Debug) { Serial.begin(9600);}
// 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)
  {
  // a point object holds x y and z coordinates
  Point p = ts.getPoint();
  if (p.z > MINPRESSURE && p.z < MAXPRESSURE) 
//    if (myTouch.dataAvailable())
    {
/*
      myTouch.read();
      x=myTouch.getX();
      y=myTouch.getY();
*/
      x=(927-p.x)>>1;
if (Debug)  {  Serial.print("p,x:");Serial.print(x);}
      y=int((p.y-150)/3); // подгоняем
if (Debug)  {  Serial.print("\ty:");Serial.println(y);}

      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);
          }
        }
      }
    }
  }
}

 

PhOSTU
Offline
Зарегистрирован: 20.06.2014

PhOSTU пишет:

кладываю промежуточный вариант библиотек UTFT и Touchscreen 

Обновил Touchscreen. работает быстрее и надеюсь четче.

https://yadi.sk/d/rULxUWyvZ7jQ3

J-Tec
Offline
Зарегистрирован: 23.07.2014

дядя вова скиньте свои измененые файлы.

а то при компиляции вылазят ошибки

PhOSTU
Offline
Зарегистрирован: 20.06.2014

Дядя Вова пишет:

 Тест "Цифровая клава" на основе известного теста к UTouch, замененого на TouchScreen.h

Чуток подправил и завелось. Но медленно и спустя какое-то время напрочь виснет

// Тест совместной работы UTFT и тача TFTLCD
// Arduino Uno R3 3.5 inch TFTLCD 8bit
// Правка в файле TouchScreen.cpp:
/////////////////////////////////////////////////////////////////////////////
// Point TouchScreen::getPoint(void) {
//    byte c = DDRC; // <a href="http://arduino.ru/forum/apparatnye-voprosy/tft-35-i-arduino?page=3#comment-73960" title="http://arduino.ru/forum/apparatnye-voprosy/tft-35-i-arduino?page=3#comment-73960" rel="nofollow">http://arduino.ru/forum/apparatnye-voprosy/tft-35-i-arduino?page=3#comme...</a>
// ...........
//    DDRC = c; //restore port c directional settings
//   return Point(x, y, z);
//}
/////////////////////////////////////////////////////////////////////////////
// UTouch_ButtonTest (C)2010-2012 Henning Karlsen
// web: <a href="<a href="http://www.henningkarlsen.com/electronics" rel="nofollow">http://www.henningkarlsen.com/electronics</a>" title="<a href="http://www.henningkarlsen.com/electronics" rel="nofollow">http://www.henningkarlsen.com/electronics</a>" rel="nofollow"><a href="http://www.henningkarlsen.com/electronics" rel="nofollow">http://www.henningkarlsen.com/electronics</a></a>
//
// 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 <stdint.h>
#include "TouchScreen.h"

bool Debug = false; //режим отладки

// These are the pins for the shield!
#define YP A2  
#define XM A1 
#define YM  6 
#define XP  7

#define MINPRESSURE 10
#define MAXPRESSURE 1000
#define TS_MAXX 92
#define TS_MINX 936
#define TS_MAXY 135
#define TS_MINY 900

// For better pressure precision, we need to know the resistance
// between X+ and X- Use any multimeter to read it
// For the one we're using, its 300 ohms across the X plate
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);


// 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!
UTFT myGLCD(ILI9327_8, A2,A1,A3,A4);

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)
{
if(Debug)
 { Serial.print("\tx1:");  Serial.print(x1);
  Serial.print("\ty1");Serial.print(y1);
  Serial.print("\tx2");Serial.print(x2);
  Serial.print("\ty2");Serial.println(y2);}

myGLCD.setColor(255, 255, 0);
  myGLCD.drawRoundRect (x1, y1, x2, y2);
  delay(500);
  TSPoint p = ts.getPoint();
  while      (p.z > MINPRESSURE && p.z < MAXPRESSURE) 
    TSPoint p = ts.getPoint();

  myGLCD.setColor(255, 0, 0);
  myGLCD.drawRoundRect (x1, y1, x2, y2);
  }

/*************************
**  Required functions  **
*************************/
void setup()
{
 if (Debug) { Serial.begin(9600);}
// 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)
  {
  // a point object holds x y and z coordinates
  TSPoint p = ts.getPoint();
  if (p.z > MINPRESSURE && p.z < MAXPRESSURE) 
//    if (myTouch.dataAvailable())
    {
/*
      myTouch.read();
      x=myTouch.getX();
      y=myTouch.getY();
*/
  x = map(p.x, TS_MINX, TS_MAXX, 399, 0);
  y = map(p.y, TS_MINY, TS_MAXY, 239, 0);
     // x=(927-p.x)>>1;
if (Debug)  {  Serial.print("p,x:");Serial.print(x);}
    //  y=int((p.y-150)/3); // подгоняем
if (Debug)  {  Serial.print("\ty:");Serial.println(y);}

      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
Зарегистрирован: 31.07.2014

J-Tec пишет:

дядя вова скиньте свои измененые файлы.

а то при компиляции вылазят ошибки

да, расплодилось версий :( Не буду выкладывать - меньше путаницы. И у меня тоже требует замены типа Point <-> TSPoint.

Вопрос ускорилась отрисовка или тач? Если тач, то разве он тормозит?

awarm
Offline
Зарегистрирован: 09.02.2012

И снова привет.

Сегодня пришел ко мне Due. и вот решил я на нем запустить шилд для UNO. Но не полетело.

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

[update]

Что интересно, тестовый пример от производителя (rectangles) работает нормально. Не работает именно UTFT

Дядя Вова
Дядя Вова аватар
Offline
Зарегистрирован: 31.07.2014

Коллеги, кто схемку на 3.5" TFTLCD Aruino Uno выкладывал? Ткните носом - где?

Вопрос вот в чем: несмотря на то, что при инициализации задействованы только выводы A2 A1 A3 A4, выводом A0 тоже пользоваться нельзя :(

В UTFT есть такое чУдное место:

    pinMode(A0,OUTPUT);
    digitalWrite(A0, HIGH);
 

Без этого не работает.

ОТсюда вопрос - какова функция этого вывода?

PS Переопределение этого вывода как INPUT, на время работы с датчиком, приводит к "помехе" на экране.

Т.е. еще прошу совета: какой из А1-A4 выводов  можно переопределить как вход без порчи картинки?

awarm
Offline
Зарегистрирован: 09.02.2012

Насколько я понял, A0 - это CS - то есть когда в высоком статусе, то команды на диплей идут, когда в низком нет. 

Что касается переназначения выводов - то можно переназначать без проблем. Но только на какое-то время. И при этом учитывать входной импеданс дисплея. После измерения опять надо настроить на OUTPUT.

Если будут проблемы с переключениями, попробуй delay проставить после смены режимов. Надо какое то время для переключения. IMHO

UPDATE: Можно опробовать установить A0 в LOW, и по идее тогда вообще не должно быть реакции на остальные. Правда насчет A4 не знаю, т.к. он обозначен как LCD_RESET. Ну да метод научного тыка поможет ;)

Дядя Вова
Дядя Вова аватар
Offline
Зарегистрирован: 31.07.2014

awarm пишет:

Насколько я понял, A0 - это CS - то есть когда в высоком статусе, то команды на диплей идут, когда в низком нет.

На некоторых фотках дисплея и какой-то схеме вывод А0 обозначен как LCD_RD. Это к слову.

Цитата:
Если будут проблемы с переключениями, попробуй delay проставить после смены режимов. Надо какое то время для переключения. IMHO

Интересно. Попробую.
Цитата:

UPDATE: Можно опробовать установить A0 в LOW, и по идее тогда вообще не должно быть реакции на остальные. Правда насчет A4 не знаю, т.к. он обозначен как LCD_RESET. Ну да метод научного тыка поможет ;)

Примерно так и было. Дисплей был девственно черен

Думаю, что нужно откусить/загнуть штырек разъема А0 на плате дисплея, подпаяв туда +3В

 

Ozligia
Offline
Зарегистрирован: 26.08.2014

Бублик пишет:

Всем привет)
Вообщем сам попал я с таким дисплеем...
Заказывал вот тут http://ru.aliexpress.com/item/Free-shipping-LCD-module-TFT-3-5-inch-TFT-LCD-screen-for-Arduino-MEGA2560-Board/1683788780.html как видно из описания: Контроллер: R61581, Разрешение: 480x320, бит данных: 8 -16.
Приехал дисплей через 3 недели, свиду вроде такой но другой)))
http://ru.aliexpress.com/item/Free-shipping-5pcs-lot-LCD-module-TFT-3-5-inch-TFT-LCD-screen-for-Arduino-MEGA/1875046350.html обратите внимание на колличество резисторных сборок! их явно хватало только на 8bit! Про то, что это совсем другая плата я уже промолчу. Два дня секса по запуску этого чуда привели в полный тупик... стал искать по фотке(!) что за чудо. В описаниях на Али по прежнему твердили что это тоже контроллер: r61581, разрешение: 480x320, биты данных:8-16...
И тут я натыкаюсь на фото этого же дисплея но с другими харрактеристиками и выясняется, что этот хлам собран на ILI9327 и имеет разрешение 240х400 точек. Помним что битность шины определена была опытным путем - 8бит. UTFT от Уважаемого Карлсона поддерживает этот проц ТОЛЬКО в 16 битном режиме... Ещё два дня ковыряния в библиотеке UTFT (дабы переделать её в 8 бит) ни к чему не привели, дисплей светился белым цветом и все. Отчаявшись я стал искать хоть какой то выход и у одного из продаванов на али нашел чат) не долго думая написал китайцу о своих проблемах и получил по почте библиотеку для дисплея, распиновку в pdfке и биб-ку под тач.
Каково же было моё изумление, когда после загрузки, я увидел буквы на экране!!!!!! Надо сказать, что UTFT присланная китайцем жутко старая и кривая до невозможности)))) нно она дала понимание, что надо править, чтобы перевести её на работу в 8битном режиме! Сколько букофффф)))
Буду рад, если кому-то помог) http://revera.tv/UserFiles/Nic/3.5_inch_for_mega.zip

Бублик, огромное вам спасибо, что докопались до правды. Вы мне секономили много времени.

Такая же история, тот же продавец. Только с дуру сразу не проверил, написал, что все ОК. Но благодаря вам, Бублик, экран все же работает. Остальные товарищи, остерегайтесь подделок, надеюсь пост будет полезен, кто собирается покупать именно у этого продавца.

mif_fm
Offline
Зарегистрирован: 28.07.2014

Бублик пишет:

Всем привет)
Вообщем сам попал я с таким дисплеем...
Заказывал вот тут http://ru.aliexpress.com/item/Free-shipping-LCD-module-TFT-3-5-inch-TFT-LCD-screen-for-Arduino-MEGA2560-Board/1683788780.html как видно из описания: Контроллер: R61581, Разрешение: 480x320, бит данных: 8 -16.
Приехал дисплей через 3 недели, свиду вроде такой но другой)))
http://ru.aliexpress.com/item/Free-shipping-5pcs-lot-LCD-module-TFT-3-5-inch-TFT-LCD-screen-for-Arduino-MEGA/1875046350.html обратите внимание на колличество резисторных сборок! их явно хватало только на 8bit! Про то, что это совсем другая плата я уже промолчу. Два дня секса по запуску этого чуда привели в полный тупик... стал искать по фотке(!) что за чудо. В описаниях на Али по прежнему твердили что это тоже контроллер: r61581, разрешение: 480x320, биты данных:8-16...
И тут я натыкаюсь на фото этого же дисплея но с другими харрактеристиками и выясняется, что этот хлам собран на ILI9327 и имеет разрешение 240х400 точек. Помним что битность шины определена была опытным путем - 8бит. UTFT от Уважаемого Карлсона поддерживает этот проц ТОЛЬКО в 16 битном режиме... Ещё два дня ковыряния в библиотеке UTFT (дабы переделать её в 8 бит) ни к чему не привели, дисплей светился белым цветом и все. Отчаявшись я стал искать хоть какой то выход и у одного из продаванов на али нашел чат) не долго думая написал китайцу о своих проблемах и получил по почте библиотеку для дисплея, распиновку в pdfке и биб-ку под тач.
Каково же было моё изумление, когда после загрузки, я увидел буквы на экране!!!!!! Надо сказать, что UTFT присланная китайцем жутко старая и кривая до невозможности)))) нно она дала понимание, что надо править, чтобы перевести её на работу в 8битном режиме! Сколько букофффф)))
Буду рад, если кому-то помог) http://revera.tv/UserFiles/Nic/3.5_inch_for_mega.zip

Таже история. Странно, но подружить сей девай c UTFT версии старше 2 у меня не получается (tinyFAT требует не младше). 

Вопрос к собратьям по несчастью, как бы еще заставить работать ILI9327  с SD ???  

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

А ручками не пробовали? Читаем строчку с сд, пишем ее на дисплей, читаем следующую и пишем. И все работает.
Как читать побайтно с сд полно примеров. И как рисовать посмотрите внутрь библиотеки utft.

mif_fm
Offline
Зарегистрирован: 28.07.2014

Я бы и рад, но SD.begin(10)  и SD.begin(53) выдают false. 

Бублик
Бублик аватар
Offline
Зарегистрирован: 05.12.2012

mif_fm пишет:

Таже история. Странно, но подружить сей девай c UTFT версии старше 2 у меня не получается (tinyFAT требует не младше). 

Я ж вроде выкладывал модернизированную UTFT 2.77 тут: http://arduino.ru/forum/apparatnye-voprosy/tft-35-i-arduino?page=2#comment-70291

mif_fm
Offline
Зарегистрирован: 28.07.2014

Бублик пишет:

Я ж вроде выкладывал модернизированную UTFT 2.77 тут: http://arduino.ru/forum/apparatnye-voprosy/tft-35-i-arduino?page=2#comment-70291

Спасибо огромное БУБЛИК. Замечательная библиотека получилась, дисплей заработал на ура. Правда пришлось воспользоваться сторонней утилитой для форматирования флешки (формат windows в fat16 - не помогает) !!!

https://www.sdcard.org/downloads/formatter_4/

Бублик
Бублик аватар
Offline
Зарегистрирован: 05.12.2012

mif_fm пишет:

Спасибо огромное БУБЛИК. 

Всегда рад помочь)

mif_fm
Offline
Зарегистрирован: 28.07.2014

Уважаемый БУБЛИК, может вы еще и UTFT_tinyFAT поковырять успели?! А то что-то оно кривовато работает с  этим дисплеем (ili9327):( 

Бублик
Бублик аватар
Offline
Зарегистрирован: 05.12.2012

mif_fm пишет:

Уважаемый БУБЛИК, может вы еще и UTFT_tinyFAT поковырять успели?! А то что-то оно кривовато работает с  этим дисплеем (ili9327):( 

Да вроде нормально работает с Мегой. С DUE проблема, tinyFAT не дружит с ней. Писал Хенингу за эту проблему, он ответил, что tinyFAT далее развивать не будет, что может быть напишет что-то для работы с SDHC FAT32, но когда не знает... а пока грузить картинки с SD карточки можно перелопатив UTFT_tinyFAT под SD библиотеку. Я порылся в тырнэте и нашел почти готовое решение использующее SdFat, поковырял вечерок - заработало)

Попробуй заменить содержимое UTFT_tinyFAT.cpp вот этим:

/*
  UTFT_tinyFAT.cpp - Add-on library to integrate UTFT and tinyFAT
  Copyright (C)2010-2013 Henning Karlsen. All right reserved
  
  Basic functionality of this library are based on the demo-code provided by
  ITead studio. You can find the latest version of the library at
  http://www.henningkarlsen.com/electronics

  If you make any modifications or improvements to the code, I would appreciate
  that you share the code with me so that I might include it in the next release.
  I can be contacted through http://www.henningkarlsen.com/electronics/contact.php

  This library is free software; you can redistribute it and/or
  modify it under the terms of the CC BY-NC-SA 3.0 license.
  Please see the included documents for further information.
*/

#include "UTFT_tinyFAT.h"

UTFT_tinyFAT::UTFT_tinyFAT(UTFT *ptrUTFT)
{
	_UTFT = ptrUTFT;
}

word UTFT_tinyFAT::loadBitmap(int x, int y, int sx, int sy, char *filename)
{
	int res;
	int cx, cy, cp;
	word temp, result;
	byte r,g,b;

	res=file.openFile(filename, FILEMODE_BINARY);
	if (res==NO_ERROR)
	{
		cbi(_UTFT->P_CS, _UTFT->B_CS);
		cx=0;
		cy=0;
		result=512;
		if (_UTFT->orient==PORTRAIT)
		{
			_UTFT->setXY(x, y, x+sx-1, y+sy-1);
		}
		while (result==512)
		{
			result=file.readBinary();
			switch(result)
			{
				case ERROR_WRONG_FILEMODE:
					return ERROR_WRONG_FILEMODE;
					break;
				case ERROR_NO_FILE_OPEN:
					return ERROR_NO_FILE_OPEN;
					break;
				default:
					if (_UTFT->orient==PORTRAIT)
					{
						for (int i=0; i<result; i+=2)
						{
							_UTFT->LCD_Write_DATA(file.buffer[i]);
							_UTFT->LCD_Write_DATA(file.buffer[i+1]);
							}
					}
					else
					{
						cp=0;
						while (cp<result)
						{
							if (((result-cp)/2)<(sx-cx))
							{
								_UTFT->setXY(x+cx, y+cy, x+cx+((result-cp)/2)-1, y+cy);
								for (int i=(result-cp)-2; i>=0; i-=2)
								{
									_UTFT->LCD_Write_DATA(file.buffer[cp+i]);
									_UTFT->LCD_Write_DATA(file.buffer[cp+i+1]);
									}
								cx+=((result-cp)/2);
								cp=result;
							}
							else
							{
								_UTFT->setXY(x+cx, y+cy, x+sx-1, y+cy);
								for (int i=sx-cx-1; i>=0; i--)
								{
									_UTFT->LCD_Write_DATA(file.buffer[cp+(i*2)]);
									_UTFT->LCD_Write_DATA(file.buffer[cp+(i*2)+1]);
									}
								cp+=(sx-cx)*2;
								cx=0;
								cy++;
							}
						}
					}
					break;
			}              
		}
		file.closeFile();
		_UTFT->setXY(0,0,_UTFT->getDisplayXSize()-1,_UTFT->getDisplayYSize()-1);
		sbi(_UTFT->P_CS, _UTFT->B_CS);
		return 0;
	}
	else
	{
		return res;
	}
}

word UTFT_tinyFAT::loadBitmap(int x, int y, int sx, int sy, String filename)
{
	char buf[filename.length()+1];

	filename.toCharArray(buf, filename.length()+1);
	loadBitmap(x, y, sx, sy, buf);
}

 

mif_fm
Offline
Зарегистрирован: 28.07.2014

Уважаемый БУБЛИК, склоняюсь в поклоне, выручаете, как всегда. После замены UTFT_tinyFAT.cpp стало отображаться как положено. Сравнил файлы, весьма удивлен, что так не сделано было изначально.

Я правильно понимаю, что заставить этот дисплей работать с стандартной библиотекой (SD) никому пока не удалось? (больно ограниченный функционал у tinyFAT)

 

Бублик
Бублик аватар
Offline
Зарегистрирован: 05.12.2012

mif_fm пишет:

Я правильно понимаю, что заставить этот дисплей работать с стандартной библиотекой (SD) никому пока не удалось? (больно ограниченный функционал у tinyFAT)

На сколько я помню у AVR никаких проблем с библиотекой SD нет и честно говоря не пойму как она может быть привязана к дисплею, она работает с SD картой по SPI и всё. Если речь про её работу совместно с UTFT, то надо запилить прокладку между этими библиотеками) назвать её скажем UTFT_SD и по аналогии с UTFT_tinyFAT организовать чтение .raw с карты в UTFT для дальнейшего вывода на дисплей. Я вот в сторону SdFat копал).

Puld
Offline
Зарегистрирован: 19.09.2014

Бублик пишет:

Вот, причесал китайскую либу, вроде все работает)

http://revera.tv/UserFiles/Nic/UTFT_only_for_ili9327_8bit.zip

Ещё раз обращаю Ваше внимание, что библиотека ТОЛЬКО для вот такой гадости:

Поддержка других дисплеев на других процах - отсутствует

Добрый день! Я тоже счастлвый обладатель сего девайса. Запустить графику с помощью причесаной либы у меня его получилось. За что ОГРОМНОЕ спасибо Бублику!

Но с тачем у меня проблемы. В целом он работает только с библиотеко UTouch, но не по тем координатам. Калибровка из примера к либе UTouch_Calibration не дает никаких результатов, даже еще хуже ломает. На стандартных настройках в файле UTouchCD.h тач воспринимается повернуто на 90 градусов против часовой стрелки. Если взаимно менять значения CAL_X и CAL_Y - то по часовой стрелки.

Вытоге выход нашел следующими костылями.

Тач инициализируем через 

myTouch.InitTouch(PORTRAIT);

а при каждом чтении координат тача нужно производить корректировку следующим образом:

      myTouch.read();
      x = myTouch.getX();
      y = myTouch.getY();
      x = map(x,0, 236, 0 , 400);
      y = map(y,0, 319, 0 , 240);

Цифры 236 и 319 получил из максимальных получаемых значений x и y.

Может кто-то нашел более изящное решение на уровне библиотеки без такого костыля?

URkA
Offline
Зарегистрирован: 21.03.2014

Бублик пишет:

INA пишет:
Привет всем! Сегодня китаец мне тоже прислал кой-какую инфу.

Это тот же архив, что и мой)

Продолжение:

С тачскрином тоже весело=) он был оборван... точнее не оборван а плохо припаян 100ватным паяльником). 

После нескольких часов плясок с бубном была найдена работоспособная конфигурация!

Подробности опускаю. Если дисплей расположен вот так:

то координаты выглядят следующим образом:



myTouch.InitTouch(PORTRAIT);

если поставить LANDSCAPE, как подсказывает логика), то поворота на 90 градусов мы не получим, а получим переворот оси Y на 180 =)

Вот такие китайские дела. Да, и не вздумайте делать калибровку и после менять буквы и циферки в файле UTouchCD.h - тач вообще работать не будет. 

 

И это написано двумя постами ниже поста того же автора. Из которого вы дернули фотку. Уважаемый Бублик мало того, что расковырял либу,старался,всех предупредил, картинку даже нарисовал.!!!А вы не стараетесь.(

mif_fm
Offline
Зарегистрирован: 28.07.2014

Повесил экран на шлейфы, тут же отвалилась SD. Таки придется браться за паяльник и притягивать контакты SD (CS(1), DI(2), SCK(5)) к земле. Гдето уже встречал подобную схему. Остается непонятным пока надо ли это делать для (DO(7))   

Puld
Offline
Зарегистрирован: 19.09.2014

URkA пишет:

И это написано двумя постами ниже поста того же автора. Из которого вы дернули фотку. Уважаемый Бублик мало того, что расковырял либу,старался,всех предупредил, картинку даже нарисовал.!!!А вы не стараетесь.(

Видимо я что-то упустил и прошел некоторый путь заново сам. Большое спасибо за внимательность.

Но я уже сам понял что мой костыль и есть решение проблемы, потому что либа была заточена Бубликом именно под этот экран. По этому можно просто дописать в либу 3 моих строки и радоваться рабочему тачу.

 

Puld
Offline
Зарегистрирован: 19.09.2014

Бублик пишет:

Вот, причесал китайскую либу, вроде все работает)

http://revera.tv/UserFiles/Nic/UTFT_only_for_ili9327_8bit.zip

Ещё раз обращаю Ваше внимание, что библиотека ТОЛЬКО для вот такой гадости:

Поддержка других дисплеев на других процах - отсутствует

Я в свою очередь причесал новую либу UTFT от сюда http://www.henningkarlsen.com/electronics/library.php?id=51 на манер прически от Бублика. Теперь этот экран работает на базе новой либы версии 2.78 и поддерживает  либу UTouch и UTFT_Button. Остальные либы должны поддерживаться теоретически, проверить еще не успел.

Если кому нужно, пользуйтесь: http://my-files.ru/Download/se6tgk/UTFT.ZIP

J-Tec
Offline
Зарегистрирован: 23.07.2014

Как проверить кардинвты тача? А то когда запускаю QuickDraw. рисует в одной плоскости и то всего 1 см. хотя вожу пальцем по всему тачу

Puld
Offline
Зарегистрирован: 19.09.2014

Я чуть ранее писал о том как я решил эту задачу. (http://arduino.ru/forum/apparatnye-voprosy/tft-35-i-arduino?page=4#comme...). И так же мне напонили о том что об этом писали ранее. 

Нужно выбрать портретную ориентацию и скорректировать координаты.

J-Tec
Offline
Зарегистрирован: 23.07.2014

В том то и дело что изменял и не помогает(

может не так делаю(

Puld
Offline
Зарегистрирован: 19.09.2014

Может китайцы намудрили с тачем. Либо что не так делаешь. Мною взяты библиотеки с сайта http://www.henningkarlsen.com/. Представь свой код.

mif_fm
Offline
Зарегистрирован: 28.07.2014

J-Tec пишет:

Как проверить кардинвты тача? А то когда запускаю QuickDraw. рисует в одной плоскости и то всего 1 см. хотя вожу пальцем по всему тачу

Подробности в студию. Какой дисплей, какая библиотека используется для дисплея и тача? 

Возможно проблемы как с софтом так и с железом- например криво припаян шлейф тача. 

J-Tec
Offline
Зарегистрирован: 23.07.2014

Библиотека вот отсюда  http://arduino.ru/forum/apparatnye-voprosy/tft-35-i-arduino?page=4#comment-81679

а на тачскрин вот отсюда самый крайний архив http://www.henningkarlsen.com/electronics/library.php?id=55

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

Puld
Offline
Зарегистрирован: 19.09.2014

Все же для решения проблемы нужно больше информации. Пришли код. Если координаты не корректировать то прикрсновение к тачу воспринимается на всем экране, а координаты вычиляются пропорционально иначе.

Я как раз на основе QuickDraw дорабатывал свой тач и пришел к выводу о необходимости корректировки кординат прикосновения.

J-Tec
Offline
Зарегистрирован: 23.07.2014

код который после колибровки показывает. 

Puld есть еще такая проблема с библиотекой http://arduino.ru/forum/programmirovanie/oshibka-pri-kompelirovanii#comment-82098

после замены файлов выдает ошибку при компиляции

CAL_X   0x02900A3AUL

CAL_Y  0x0001800DUL

CAL_S  0x000EF18FUL

mif_fm
Offline
Зарегистрирован: 28.07.2014

Колибровку лучше не делать,  после изменения значений тач перестает работать, возвращай значения в дефолт. 

Puld
Offline
Зарегистрирован: 19.09.2014

J-Tec пишет:

код который после колибровки показывает. 

Puld есть еще такая проблема с библиотекой http://arduino.ru/forum/programmirovanie/oshibka-pri-kompelirovanii#comment-82098

На этот вопрос ответил в соответствующем топике.

J-Tec пишет:

после замены файлов выдает ошибку при компиляции

CAL_X   0x02900A3AUL

CAL_Y  0x0001800DUL

CAL_S  0x000EF18FUL

Колибровку делать безсмыслено. Можно конечно поиграться с этими настройками вручную, и выправить координаты тача. Но мне надоело этим заниматься, и так работает хорошо.

serge73
serge73 аватар
Offline
Зарегистрирован: 08.10.2014

Добрый день!

Помогите разобраться. Недавно приобрел 

Mega 2560 R3 Development Board + 3.5 inch TFT LCD Touch Screen Display Module Compatible For Arduino Mega2560 R3 + USB Cable

Уже наверно перепробовал все либы, которые нашел в этой ветке, в отзывах на этот дисплей у разных продовцов на Ali и оригинальные от Карлсена.

К сожалению экран ни разу так и не заработал. Постоянно светится белым (подсветка). Не много меняется яркость при включении и в какой-то момент при заливке (скорее всего при сбросе). Использую в коде UTFT myGLCD(ITDB32WC,38,39,40,41);

Прозвонил все пины от резисторных сборок и сами сборки - все ок. Разъемы тоже прозвонил. Все совпадает с разводкой из 3.5-arduino-9327-1.pdf

Мега вроде рабочая, хотя полностью все разъемы еще не проверил. loop проходит полностью судя по моим контрольным точкам в мониторе порта.

Попробовал arduino 1.0.5 и 1.0.6 на всякий случай

Из странного - питание на шилд приходит 4,85, а не 5, хотя на входе меге 5,01 и не просаживается.

Продавец неделю в offline, соответственно от него я ничего из софта не получил и никаких прояснений по модели тоже.

Отдирать TFT от платы пока не стал, т.к. еще не подтвердил доставку и планирую частично вернуть деньги, если получится.

Три вопроса:

1. Какая это модель TFT? Может это не ili9327 8bit? Цифры на экране вроде отличаются от фото в ветке.

2. Есть ли смысл отдирать экран от платы? Есть там что исправить или идентифицировать?

3. Куда копать?

Опыта работы с avr нет, но склоняюсь к тому, что экран не рабочий прислали.

Надпись на дисплее

Сторона с дисплеем

Обратная сторона шилда.

avton
avton аватар
Offline
Зарегистрирован: 11.05.2014
serge73
serge73 аватар
Offline
Зарегистрирован: 08.10.2014

avton, это уже все испробавано на десять раз - не работает.

Единственно я еще не смотрел - подорваны ли шлейфы.

Китаец сегодня прислал стандартную урезанную либу UTFT "3.5 inch for mega.zip", которая тоже не работает.

Может я не так все делаю?

1. Папку UTFT выгружаю в C:\Users\me\Documents\Arduino\libraries\  

2. Запускаем IDE

3. Открываем пример UTFT_Demo_400x240 и правим, что необходимо.

4. Заливаем в Mega.

5. После заливки яркость подсветки мигнула и опять белый экран.