Arduino UNO R3 + LCD 2.4 TFT

Dmitry707
Offline
Зарегистрирован: 15.04.2015

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

белый экран и все.  На плате есть сайт (www.mcufriend.com) толку правда 0, китайская ерунда и на самом экране ld079 написанно.

Гриша
Offline
Зарегистрирован: 27.04.2014

похоже что еще и с тачем, а чего-нибудь проще уже запускали???  вот у человека проблема была... http://arduino.ru/forum/apparatnye-voprosy/32-tft-lcd-touchscreen  он хоть старался, а по вашей картинке, как по кофейно гуще - гадать приходится...

ЗЫ каждый 10й пост народ просит помощи - купят "крутую" безделушку, а потом кричат "помогите", а думать прежде чем покупать? 

Dmitry707
Offline
Зарегистрирован: 15.04.2015

Гриша пишет:

похоже что еще и с тачем, а чего-нибудь проще уже запускали???  вот у человека проблема была... http://arduino.ru/forum/apparatnye-voprosy/32-tft-lcd-touchscreen  он хоть старался, а по вашей картинке, как по кофейно гуще - гадать приходится...

ЗЫ каждый 10й пост народ просит помощи - купят "крутую" безделушку, а потом кричат "помогите", а думать прежде чем покупать? 

Как бы сказать, куда проще? Я работал с экранами других размеров, а сейчас для проекта 2.4 понадобился, но оказался очень плохим китайским шлаком. Даже не понять какой контроллер. 

П.с. информация на вашей ссылке, мне не подходит, но всеравно спасибо!

Гриша
Offline
Зарегистрирован: 27.04.2014

Dmitry707 пишет:

Как бы сказать, куда проще? Я работал с экранами других размеров...

П.с. информация на вашей ссылке, мне не подходит, но всеравно спасибо!

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

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

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

 

 

sandr4
sandr4 аватар
Offline
Зарегистрирован: 11.02.2015

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

#включить <Adafruit_GFX.ч> // ядро графической библиотеки
#включить <Adafruit_TFTLCD.ч> // относящиеся к оборудованию библиотеки

// Контрольных штифтов для ЖК можно назначить любой цифровой или
// аналоговые пины...но мы будем использовать аналоговые пины как это позволяет нам
// удвоить штыри с сенсорным экраном (см. Экран TFT краска примере).
#определить LCD_CS А3 // выбор чипа выходит аналоговый 3
#определить LCD_CD А2 // команды/данных идет аналоговый 2
#определить LCD_WR А1 // ЖК-запись идет аналоговый 1
#определить LCD_RD А0 // ЖК-чтение идет аналоговый 0

#определить LCD_RESET А4 // может просто поочередно подключать к Arduino сброса пин

// При использовании коммутационной платы только, использовать эти 8 линий данных на ЖКИ:
// Для Ардуино Уно, платформ duemilanove, Diecimila и др.:
// Д0 подключается к цифровой вывод 8 (уведомления эти
// Д1 подключается к цифровой контакт 9 не в порядке!)
// Д2 подключается к цифровой пин 2
// Д3 подключается к цифровой PIN-код 3
// Д4 подключается к цифровой PIN-код 4
// Д5 подключается к цифровой PIN-код 5
// Д6 подключается к цифровой вывод 6
// Д7 подключается к цифровому выводу 7
// Для Arduino Мега, использовать цифровые пины 22 по 29
// (на 2-строка заголовка в конце правления).

// Назначить удобочитаемые имена некоторых распространенных 16-битный цвет значения:
#определить черное от 0x0000
#определяем голубой 0x001F
#определить красный 0xF800
#определить зеленый 0x07E0
#определяем голубой 0x07FF
#определить пурпурный 0xF81F
#определяем желтый 0xFFE0
#определить белый 0xFFFF

Adafruit_TFTLCD дисплей TFT(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// Если вы используете щит, все управления и линии передачи данных являются фиксированными, и
// упрощенной декларации, могут дополнительно использоваться:
// Adafruit_TFTLCD дисплей TFT;

недействительными установки(недействительными) {
Серийный.то begin(9600);
 Серийный.код println(F (от"TFT ЖК-тест"));

#ifdef USE_ADAFRUIT_SHIELD_PINOUT
 Серийный.код println(Ф("через Адафрут 2.8\" TFT ЖК Arduino щита распиновка"));
#еще
 Серийный.код println(Ф("через Адафрут 2.8\" TFT ЖК-доска Проламывания распиновка"));
#за endif

 Серийный.напечатать("Экран TFT Размер "); серийный.печать(дисплей TFT.Ширина()); серийный.напечатать("х"); серийный.код println(дисплей TFT.высота());

дисплей TFT.сбросить();

 uint16_t идентификатор = тпр.readID();

 если(идентификатор == 0x9325) {
 Серийный.код println(Ф("нашли ILI9325 драйвер ЖКИ"));
 } иначе если(идентификатор == 0x9327) {
 Серийный.код println(Ф("нашли ILI9327 драйвер ЖКИ"));
 } иначе если(идентификатор == 0x9328) {
 Серийный.код println(Ф("нашли ILI9328 драйвер ЖКИ"));
 } иначе если(идентификатор == 0x7575) {
 Серийный.код println(Ф("нашли HX8347G драйвер ЖКИ"));
 } иначе если(идентификатор == 0x9341) {
 Серийный.код println(Ф("нашли ILI9341 драйвер ЖКИ"));
 } иначе если(идентификатор == 0x8357) {
 Серийный.код println(Ф("нашли HX8357D драйвер ЖКИ"));
 } иначе если(идентификатор == 0x0154) {
 Серийный.код println(Ф("нашли S6D0154 драйвер ЖКИ"));
 } еще {
 Серийный.печать(F("Неизвестный драйвер ЖКИ чип: "));
 Серийный.код println(идентификатор, шестигранник);
 Серийный.код println(Ф("если с помощью Адафрут 2.8\" TFT ЖК Arduino щита, на линии:"));
 Серийный.код println(Ф(" #определить USE_ADAFRUIT_SHIELD_PINOUT"));
 Серийный.код println(Ф("должен появиться в библиотечный коллектор (Adafruit_TFT.ч)."));
 Серийный.код println(Ф("если с помощью коммутационной платы, он не должен быть #определен!"));
 Серийный.код println(Ф("также при использовании секционных, дважды проверьте, что вся электропроводка"));
 Серийный.код println(Ф("соответствует учебник."));
возврат;
}

дисплей TFT.начать(идентификатор);

Так-же пробовать различные библиотеки для TFT LCD.

vitalikost
Offline
Зарегистрирован: 28.11.2014
Dmitry707
Offline
Зарегистрирован: 15.04.2015

Доброе время суток, проблема решена. 
Причины:

1. Экран было криво приклеин двухсторонним скотчем к платем, из-за чего, пайка в определенных местах касалась железного корпуса экрана. 

2. Также был испорчен шлейф резистивного сенсорного экрана.

3. А также в коде с примером "мини пейнт" надо было изменить:

#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
 
Всем большое спасибо за помощь! 
Serg62
Offline
Зарегистрирован: 30.05.2015

прошу прошения, прочитал все, что нашел в инете, перепробовал все прошивки - на экране только точки 

появляются, меняющиеся в процессе тестирования. чип не определяется.

Продавец пишет, что контроллер Spfd5408

 http://www.aliexpress.com/snapshot/6562358831.html?orderId=66415698036859.

Вот последний неработающий пример:

// Code provided by Smoke And Wires
// http://www.smokeandwires.co.nz
// This code has been taken from the Adafruit TFT Library and modified
//  by us for use with our TFT Shields / Modules
// For original code / licensing please refer to
// https://github.com/adafruit/TFTLCD-Library

#include <Adafruit_GFX.h>    // Core graphics library
#include "SWTFT.h" // Hardware-specific library

// The control pins for the LCD can be assigned to any digital or
// analog pins...but we'll use the analog pins as this allows us to
// double up the pins with the touch screen (see the TFT paint example).
// #define LCD_CS A3 // Chip Select goes to Analog 3
// #define LCD_CD A2 // Command/Data goes to Analog 2
// #define LCD_WR A1 // LCD Write goes to Analog 1
// #define LCD_RD A0 // LCD Read goes to Analog 0

// #define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin

// When using the BREAKOUT BOARD only, use these 8 data lines to the LCD:
// For the Arduino Uno, Duemilanove, Diecimila, etc.:
//   D0 connects to digital pin 8  (Notice these are
//   D1 connects to digital pin 9   NOT in order!)
//   D2 connects to digital pin 2
//   D3 connects to digital pin 3
//   D4 connects to digital pin 4
//   D5 connects to digital pin 5
//   D6 connects to digital pin 6
//   D7 connects to digital pin 7
// For the Arduino Mega, use digital pins 22 through 29
// (on the 2-row header at the end of the board).

// Assign human-readable names to some common 16-bit color values:
#define	BLACK   0x0000
#define	BLUE    0x001F
#define	RED     0xF800
#define	GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF

SWTFT tft;
// If using the shield, all control and data lines are fixed, and
// a simpler declaration can optionally be used:
// SWTFT tft;

void setup(void) {
  Serial.begin(9600);
  Serial.println(F("TFT LCD test"));



  tft.reset();

  uint16_t identifier = tft.readID();

  
    Serial.print(F("LCD driver chip: "));
    Serial.println(identifier, HEX);
    

  tft.begin(identifier);

  Serial.println(F("Benchmark                Time (microseconds)"));

  Serial.print(F("Screen fill              "));
  Serial.println(testFillScreen());
  delay(500);

  Serial.print(F("Text                     "));
  Serial.println(testText());
  delay(3000);

  Serial.print(F("Lines                    "));
  Serial.println(testLines(CYAN));
  delay(500);

  Serial.print(F("Horiz/Vert Lines         "));
  Serial.println(testFastLines(RED, BLUE));
  delay(500);

  Serial.print(F("Rectangles (outline)     "));
  Serial.println(testRects(GREEN));
  delay(500);

  Serial.print(F("Rectangles (filled)      "));
  Serial.println(testFilledRects(YELLOW, MAGENTA));
  delay(500);

  Serial.print(F("Circles (filled)         "));
  Serial.println(testFilledCircles(10, MAGENTA));

  Serial.print(F("Circles (outline)        "));
  Serial.println(testCircles(10, WHITE));
  delay(500);

  Serial.print(F("Triangles (outline)      "));
  Serial.println(testTriangles());
  delay(500);

  Serial.print(F("Triangles (filled)       "));
  Serial.println(testFilledTriangles());
  delay(500);

  Serial.print(F("Rounded rects (outline)  "));
  Serial.println(testRoundRects());
  delay(500);

  Serial.print(F("Rounded rects (filled)   "));
  Serial.println(testFilledRoundRects());
  delay(500);

  Serial.println(F("Done!"));
}

void loop(void) {
  for(uint8_t rotation=0; rotation<4; rotation++) {
    tft.setRotation(rotation);
    testText();
    delay(2000);
  }
}

unsigned long testFillScreen() {
  unsigned long start = micros();
  tft.fillScreen(BLACK);
  tft.fillScreen(RED);
  tft.fillScreen(GREEN);
  tft.fillScreen(BLUE);
  tft.fillScreen(BLACK);
  return micros() - start;
}

unsigned long testText() {
  tft.fillScreen(BLACK);
  unsigned long start = micros();
  tft.setCursor(0, 0);
  tft.setTextColor(WHITE);  tft.setTextSize(1);
  tft.println("Hello World!");
  tft.setTextColor(YELLOW); tft.setTextSize(2);
  tft.println(1234.56);
  tft.setTextColor(RED);    tft.setTextSize(3);
  tft.println(0xDEADBEEF, HEX);
  tft.println();
  tft.setTextColor(GREEN);
  tft.setTextSize(5);
  tft.println("Groop");
  tft.setTextSize(2);
  tft.println("I implore thee,");
  tft.setTextSize(1);
  tft.println("my foonting turlingdromes.");
  tft.println("And hooptiously drangle me");
  tft.println("with crinkly bindlewurdles,");
  tft.println("Or I will rend thee");
  tft.println("in the gobberwarts");
  tft.println("with my blurglecruncheon,");
  tft.println("see if I don't!");
  return micros() - start;
}

unsigned long testLines(uint16_t color) {
  unsigned long start, t;
  int           x1, y1, x2, y2,
                w = tft.width(),
                h = tft.height();

  tft.fillScreen(BLACK);

  x1 = y1 = 0;
  y2    = h - 1;
  start = micros();
  for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
  x2    = w - 1;
  for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
  t     = micros() - start; // fillScreen doesn't count against timing

  tft.fillScreen(BLACK);

  x1    = w - 1;
  y1    = 0;
  y2    = h - 1;
  start = micros();
  for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
  x2    = 0;
  for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
  t    += micros() - start;

  tft.fillScreen(BLACK);

  x1    = 0;
  y1    = h - 1;
  y2    = 0;
  start = micros();
  for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
  x2    = w - 1;
  for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
  t    += micros() - start;

  tft.fillScreen(BLACK);

  x1    = w - 1;
  y1    = h - 1;
  y2    = 0;
  start = micros();
  for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
  x2    = 0;
  for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);

  return micros() - start;
}

unsigned long testFastLines(uint16_t color1, uint16_t color2) {
  unsigned long start;
  int           x, y, w = tft.width(), h = tft.height();

  tft.fillScreen(BLACK);
  start = micros();
  for(y=0; y<h; y+=5) tft.drawFastHLine(0, y, w, color1);
  for(x=0; x<w; x+=5) tft.drawFastVLine(x, 0, h, color2);

  return micros() - start;
}

unsigned long testRects(uint16_t color) {
  unsigned long start;
  int           n, i, i2,
                cx = tft.width()  / 2,
                cy = tft.height() / 2;

  tft.fillScreen(BLACK);
  n     = min(tft.width(), tft.height());
  start = micros();
  for(i=2; i<n; i+=6) {
    i2 = i / 2;
    tft.drawRect(cx-i2, cy-i2, i, i, color);
  }

  return micros() - start;
}

unsigned long testFilledRects(uint16_t color1, uint16_t color2) {
  unsigned long start, t = 0;
  int           n, i, i2,
                cx = tft.width()  / 2 - 1,
                cy = tft.height() / 2 - 1;

  tft.fillScreen(BLACK);
  n = min(tft.width(), tft.height());
  for(i=n; i>0; i-=6) {
    i2    = i / 2;
    start = micros();
    tft.fillRect(cx-i2, cy-i2, i, i, color1);
    t    += micros() - start;
    // Outlines are not included in timing results
    tft.drawRect(cx-i2, cy-i2, i, i, color2);
  }

  return t;
}

unsigned long testFilledCircles(uint8_t radius, uint16_t color) {
  unsigned long start;
  int x, y, w = tft.width(), h = tft.height(), r2 = radius * 2;

  tft.fillScreen(BLACK);
  start = micros();
  for(x=radius; x<w; x+=r2) {
    for(y=radius; y<h; y+=r2) {
      tft.fillCircle(x, y, radius, color);
    }
  }

  return micros() - start;
}

unsigned long testCircles(uint8_t radius, uint16_t color) {
  unsigned long start;
  int           x, y, r2 = radius * 2,
                w = tft.width()  + radius,
                h = tft.height() + radius;

  // Screen is not cleared for this one -- this is
  // intentional and does not affect the reported time.
  start = micros();
  for(x=0; x<w; x+=r2) {
    for(y=0; y<h; y+=r2) {
      tft.drawCircle(x, y, radius, color);
    }
  }

  return micros() - start;
}

unsigned long testTriangles() {
  unsigned long start;
  int           n, i, cx = tft.width()  / 2 - 1,
                      cy = tft.height() / 2 - 1;

  tft.fillScreen(BLACK);
  n     = min(cx, cy);
  start = micros();
  for(i=0; i<n; i+=5) {
    tft.drawTriangle(
      cx    , cy - i, // peak
      cx - i, cy + i, // bottom left
      cx + i, cy + i, // bottom right
      tft.color565(0, 0, i));
  }

  return micros() - start;
}

unsigned long testFilledTriangles() {
  unsigned long start, t = 0;
  int           i, cx = tft.width()  / 2 - 1,
                   cy = tft.height() / 2 - 1;

  tft.fillScreen(BLACK);
  start = micros();
  for(i=min(cx,cy); i>10; i-=5) {
    start = micros();
    tft.fillTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i,
      tft.color565(0, i, i));
    t += micros() - start;
    tft.drawTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i,
      tft.color565(i, i, 0));
  }

  return t;
}

unsigned long testRoundRects() {
  unsigned long start;
  int           w, i, i2,
                cx = tft.width()  / 2 - 1,
                cy = tft.height() / 2 - 1;

  tft.fillScreen(BLACK);
  w     = min(tft.width(), tft.height());
  start = micros();
  for(i=0; i<w; i+=6) {
    i2 = i / 2;
    tft.drawRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(i, 0, 0));
  }

  return micros() - start;
}

unsigned long testFilledRoundRects() {
  unsigned long start;
  int           i, i2,
                cx = tft.width()  / 2 - 1,
                cy = tft.height() / 2 - 1;

  tft.fillScreen(BLACK);
  start = micros();
  for(i=min(tft.width(), tft.height()); i>20; i-=6) {
    i2 = i / 2;
    tft.fillRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(0, i, 0));
  }

  return micros() - start;
}

Монитор посл. порта показывает следующее:

TFT LCD test
LCD driver chip: 0
Benchmark                Time (microseconds)
Screen fill              1321916
Text                     192136
Lines                    1050440
Horiz/Vert Lines         137248
Rectangles (outline)     99908
Rectangles (filled)      3068708
Circles (filled)         1207848
Circles (outline)        454896
Triangles (outline)      333340
Triangles (filled)       1665396
Rounded rects (outline)  212940
Rounded rects (filled)   3586556
Done!

Заранее спасибо!

 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011
nikantovik
Offline
Зарегистрирован: 19.06.2015

А какую библиотеку использовали для дисплея?

У меня точно такая же проблема :(

nikantovik
Offline
Зарегистрирован: 19.06.2015

[quote=Dmitry707]

Доброе время суток, проблема решена. 
Причины:

1. Экран было криво приклеин двухсторонним скотчем к платем, из-за чего, пайка в определенных местах касалась железного корпуса экрана. 

2. Также был испорчен шлейф резистивного сенсорного экрана.

3. А также в коде с примером "мини пейнт" надо было изменить:

#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
 
Всем большое спасибо за помощь! 

А какую библтотеку использовали?

Serg62
Offline
Зарегистрирован: 30.05.2015

У меня заработало !

#include <Adafruit_GFX_AS.h>    // Core graphics library
#include <Adafruit_ILI9341_8bit_AS.h> // Hardware-specific library
//#include "SWTFT.h" // Hardware-specific library
// The control pins for the LCD can be assigned to any digital or
// analog pins...but we'll use the analog pins as this allows us to
// double up the pins with the touch screen (see the TFT paint example).
#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0

#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin

// When using the BREAKOUT BOARD only, use these 8 data lines to the LCD:
// For the Arduino Uno, Duemilanove, Diecimila, etc.:
//   D0 connects to digital pin 8  (Notice these are
//   D1 connects to digital pin 9   NOT in order!)
//   D2 connects to digital pin 2
//   D3 connects to digital pin 3
//   D4 connects to digital pin 4
//   D5 connects to digital pin 5
//   D6 connects to digital pin 6
//   D7 connects to digital pin 7
// For the Arduino Mega, use digital pins 22 through 29
// (on the 2-row header at the end of the board).

// Assign human-readable names to some common 16-bit color values:
#define	BLACK   0x0000
#define	BLUE    0x001F
#define	RED     0xF800
#define	GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF

Adafruit_ILI9341_8bit_AS tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// If using the shield, all control and data lines are fixed, and
// a simpler declaration can optionally be used:
// Adafruit_ILI9341_8bit_AS tft;
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib

 

the_wall
Offline
Зарегистрирован: 06.06.2013

Как правильно обновить данные на экране?

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

Порылся в библиотеке и не нашел команды типа clear. Чем стирать? 

Или это библиотека такая?

Гриша
Offline
Зарегистрирован: 27.04.2014

the_wall пишет:

Как правильно обновить данные на экране?

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

Порылся в библиотеке и не нашел команды типа clear. Чем стирать? 

Или это библиотека такая?

киньте либу вставкой кода, легче будет гадать :)

the_wall
Offline
Зарегистрирован: 06.06.2013

Гриша пишет:

the_wall пишет:

Как правильно обновить данные на экране?

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

Порылся в библиотеке и не нашел команды типа clear. Чем стирать? 

Или это библиотека такая?

киньте либу вставкой кода, легче будет гадать :)

 

//lcd
#define LCD_CS A3    
#define LCD_CD A2    
#define LCD_WR A1   
#define LCD_RD A0    

#define LCD_RESET A4

#define	BLACK           0x0000
#define	BLUE            0x001F
#define	RED             0xF800
#define	GREEN           0x07E0
#define CYAN            0x07FF
#define MAGENTA         0xF81F
#define YELLOW          0xFFE0 
#define WHITE           0xFFFF

#include "TFTLCD.h"

TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
//------------------------------------------------------

//clock
#include "DS1302.h" // часы
DS1302 rtc(11,12,13);  //инициализация платы DS1302

Time t;
//--------------------------------------------------------

//touch
#include "TouchScreen.h"

#define YP A1  
#define XM A2 
#define YM 7
#define XP 6  

#define TS_MINX 150
#define TS_MINY 120
#define TS_MAXX 850
#define TS_MAXY 891

TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

#define BOXSIZE_X 230
#define BOXSIZE_Y 61

#define MINPRESSURE 10
#define MAXPRESSURE 1000
//--------------------------------------------------------
int settings=0;
char i='red';

void setup(void) {
  Serial.begin(9600); 
  tft.reset();
  tft.initDisplay();
  tft.fillScreen(BLACK);
  tft.drawRect(0, 0, 240, 320, WHITE); 
}

void loop(void) {
  
  tft.fillScreen(BLACK);     
  tft.setCursor(0, 150); 
  tft.setTextSize(5);
  tft.println(rtc.getTimeStr());  
  delay(1000);
}





 

Гриша
Offline
Зарегистрирован: 27.04.2014

1) предполагаю, строка 67 выполняется долго - вот и мигает. Попробуйте сперва  получить данные из часов в переменные, потом "залить" экран и записать готовые данные. 

2) заливать весь экран долго, перезаписывате предыдущее значение цветом фона - это быстрее. А полное обновление экрана, на случай глюков, настройте по времени (на пример раз в 5 сек) .

upd Или не значение, а поле символов цветом фона (прямоугольниками). Просто посчитайте кол-во символов и залейте эту область.

Valera19701
Valera19701 аватар
Онлайн
Зарегистрирован: 18.10.2015

64 строку закоментируйте, ниже допишите

tft.setTextColor(GREEN, BLACK);

 

the_wall
Offline
Зарегистрирован: 06.06.2013

Гриша пишет:

1) предполагаю, строка 67 выполняется долго - вот и мигает. Попробуйте сперва  получить данные из часов в переменные, потом "залить" экран и записать готовые данные. 

2) заливать весь экран долго, перезаписывате предыдущее значение цветом фона - это быстрее. А полное обновление экрана, на случай глюков, настройте по времени (на пример раз в 5 сек) .

upd Или не значение, а поле символов цветом фона (прямоугольниками). Просто посчитайте кол-во символов и залейте эту область.

 

Написал так. Вот что получилось. А точне всеравно есть мерцание.

void loop(void) {
  
  s=rtc.getTimeStr();

  tft.fillRect(0, 0, 240, 50, BLACK );
  tft.drawRect(0, 0, 240, 50, RED);

  tft.setCursor(3,5);    
  Serial.println(s);
  tft.setTextSize(5);
  tft.println(s);

 tft.setCursor(0,100);
 tft.setTextSize(5);
  tft.println("TEXT");
  delay(1000);
 
}



https://www.youtube.com/watch?v=6DnYPrg-OfU


 

 

the_wall
Offline
Зарегистрирован: 06.06.2013

Valera19701 пишет:

64 строку закоментируйте, ниже допишите

tft.setTextColor(GREEN, BLACK);

При компеляции выдает ошибку  типа не может найти функцию setTextColor(int, int)

 

 

Valera19701
Valera19701 аватар
Онлайн
Зарегистрирован: 18.10.2015

библиотеку на adafruit поменяйте

the_wall
Offline
Зарегистрирован: 06.06.2013

Valera19701 пишет:

библиотеку на adafruit поменяйте

С этой библиотекой ругается на 

Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); // Instancia LCD

'Adafruit_TFTLCD' does not name a type

Valera19701
Valera19701 аватар
Онлайн
Зарегистрирован: 18.10.2015

какая версия IDE? у меня на 1.6.5 все нормально компилируется

the_wall
Offline
Зарегистрирован: 06.06.2013

Valera19701 пишет:

какая версия IDE? у меня на 1.6.5 все нормально компилируется

Версия 1.5.2. 

Сейчас качну 1.6.5 и попробую.

the_wall
Offline
Зарегистрирован: 06.06.2013

Valera19701 пишет:

какая версия IDE? у меня на 1.6.5 все нормально компилируется

Поставил 1.6.7 

При загрузке скетча из библиотеки  получаю белый экран

Почему при использовании этой библиотке он ссылаетсая на эти пины?

// pin definition for the Uno

#define cs   10
#define dc   9
#define rst  8

Если по факту cs и rst висят на A3 и А4?

 

Valera19701
Valera19701 аватар
Онлайн
Зарегистрирован: 18.10.2015

библиотека эта?

https://github.com/adafruit/TFTLCD-Library

the_wall
Offline
Зарегистрирован: 06.06.2013

Valera19701 пишет:

библиотека эта?

https://github.com/adafruit/TFTLCD-Library

Нет, но эту я тоже пробовал 

Там тест есть, который не определил мой 2.4 экран

TFT LCD test
Using Adafruit 2.8" TFT Breakout Board Pinout
TFT size is 240x320
Unknown LCD driver chip: C505
 
Valera19701
Valera19701 аватар
Онлайн
Зарегистрирован: 18.10.2015

есть еще библиотека

http://forum.arduino.cc/index.php?action=dlattach;topic=366304.0;attach=150756

в ридми есть как инициализировать дисплеи на разных чипах

Гриша
Offline
Зарегистрирован: 27.04.2014

для чистого эксперимента по обновлению экрана, попробуйте менять по кругу  значения типа 111 на 222 нажимая кнопку или по таймеру. Чтоб не примешивать другие устройства.

the_wall
Offline
Зарегистрирован: 06.06.2013

Valera19701 пишет:

есть еще библиотека

http://forum.arduino.cc/index.php?action=dlattach;topic=366304.0;attach=150756

в ридми есть как инициализировать дисплеи на разных чипах

 
10-ым пунктом в ридми
10. It currently supports UNO shields with "mcufriend.com" pcbs with controllers:
ILI9320  240x320  ID=0x9320
ILI9325  240x320  ID=0x9325
ILI9327  240x400  ID=0x9327
ILI9335  240x320  ID=0x9335 new 
ILI9341  240x320  ID=0x9341 
ILI9481  320x480  ID=0x9481 new 
ILI9486  320x480  ID=0x9486
ILI9488  320x480  ID=0x9488
LGDP4535 240x320  ID=0x4535 new Untested
RM68090  240x320  ID=0x6809 new Untested
R61509V  240x400  ID=0xB509
S6D0139  240x320  ID=0x0139 new Untested
S6D0154  240x320  ID=0x0154
SSD1289  240x320  ID=0x1289 
ST7781   240x320  ID=0x7783
ST7789V  240x320  ID=0x7789 new
 

Запустил скетч для определения экрана

вот что получил

Read Registers on MCUFRIEND UNO shield
controllers either read as single 16-bit
e.g. the ID is at readReg(0)
or as a sequence of 8-bit values
in special locations (first is dummy)
 
reg(0x0000) C5 05 ILI9320, ILI9325, ILI9335, ...
reg(0x0004) 00 00 00 00 Manufacturer ID
reg(0x0009) 00 01 00 01 00 Status Register
reg(0x00BF) 00 00 00 00 00 00 ILI9481, HX8357-B
reg(0x00D0) 00 00 Power Control
reg(0x00D2) 00 00 00 NVM Read
reg(0x00D3) 00 00 00 00 ILI9341, ILI9488
reg(0x00DA) 00 00 00 RDID1
reg(0x00DB) 00 00 00 RDID2
reg(0x00DC) 00 00 00 RDID3
reg(0x00EF) 00 02 00 02 00 02 ILI9327
reg(0x00B0) 00 RGB Interface Signal Control
reg(0x00B4) 00 Inversion Control
reg(0x00B6) 00 00 00 00 Display Control
reg(0x00B7) 00 Entry Mode Set
reg(0x00F2) 00 71 00 71 00 71 00 71 00 71 00 71 Adjust Control 2
reg(0x00F6) 00 52 00 Interface Control
 
Какой у меня контроллер понять не могу.

 

Valera19701
Valera19701 аватар
Онлайн
Зарегистрирован: 18.10.2015

а что на плате написано?

the_wall
Offline
Зарегистрирован: 06.06.2013

Valera19701 пишет:

а что на плате написано?

на экране

G-10-06-26-61503-BOE  

G-09-11-19

На самой плате 2.4 tft lcd shield

the_wall
Offline
Зарегистрирован: 06.06.2013

Гриша пишет:

для чистого эксперимента по обновлению экрана, попробуйте менять по кругу  значения типа 111 на 222 нажимая кнопку или по таймеру. Чтоб не примешивать другие устройства.

Все равно видно. Делал и через кнопку и и через время.

Valera19701
Valera19701 аватар
Онлайн
Зарегистрирован: 18.10.2015

пробуйте по одному подставлять, например 0х9488

tft.begin(0x9488);

 

the_wall
Offline
Зарегистрирован: 06.06.2013

Valera19701 пишет:

пробуйте по одному подставлять, например 0х9488

tft.begin(0x9488);

 

 

В общем перепробывал все и везде белый экран.  

Сам экран работает только с одной библиотекой, ту которую нашел до написания первого поста.

У возник еще один вопрос. Хотя скорее это все звенья одной цепи.

Считываю нажатие на touch так

void loop()
{ 
  
  TSPoint p = ts.getPoint();
  pinMode(XM, OUTPUT);
  pinMode(YP, OUTPUT);
  
  if (p.z > MINPRESSURE && p.z < MAXPRESSURE){   
   p.x = map(p.x, TS_MINX, TS_MAXX, 0, tft.width()); Serial.print("X = "); Serial.print(p.x);
    p.y = map(p.y, TS_MINY, TS_MAXY, 0, tft.height());Serial.print("\tY = "); Serial.print(p.y);
    Serial.print("\tPressure = "); Serial.println(p.z);     
  
  updateTime();
}

Если открыть монитор порта то при нажатии на тач все срабатывет очень медленно и через раз.

Если закоментровать updateTime() , то тач откликается к любому прикосновению

void updateTime()
{
   t = rtc.getTime(); 
 
  tft.setCursor(2, 15);
  tft.setTextColor(GREEN);
  tft.setTextSize(8);
  tft.print(0); tft.print(t.hour);
   
  if(t.sec==59)
  {    
   tft.fillRect(2, 15,235,90, BLACK);   
   
  }}

Собственно как это исправить? Сделать по другому. Или это такая плохая библиотека.

 

 

 

 

slider
Онлайн
Зарегистрирован: 17.06.2014

the_wall пишет:

Valera19701 пишет:

библиотека эта?

https://github.com/adafruit/TFTLCD-Library

Нет, но эту я тоже пробовал 

Там тест есть, который не определил мой 2.4 экран

TFT LCD test
Using Adafruit 2.8" TFT Breakout Board Pinout
TFT size is 240x320
Unknown LCD driver chip: C505
 

Э..... 

А что в яндексе набрать ID 0xC505  религия не позволяет :)   ? 

там много ссылок с экранами 2.4"

здесь чел пишет с какой либой заработало http://misc.ws/2015/01/24/lcd-touch-screen-information/

собственно это ID от R61505W , можете если что загуглить init code R61505W

пожалуйста :)

the_wall
Offline
Зарегистрирован: 06.06.2013

slider пишет:

the_wall пишет:

Valera19701 пишет:

библиотека эта?

https://github.com/adafruit/TFTLCD-Library

Нет, но эту я тоже пробовал 

Там тест есть, который не определил мой 2.4 экран

TFT LCD test
Using Adafruit 2.8" TFT Breakout Board Pinout
TFT size is 240x320
Unknown LCD driver chip: C505
 

Э..... 

А что в яндексе ранее набирали  ID 0xC505   ?

там много ссылок с экранами 2.4"

здесь чел пишет с какой либой заработало http://misc.ws/2015/01/24/lcd-touch-screen-information/

Все верно там и качал. Фишка в том  там как бы 2 библиотеки предлагается. Одна у меня работает, другая adafruit не работает.

flat
Offline
Зарегистрирован: 05.02.2015

Понимаю что многим покаэется смешным вопрос... но перелопатил кучу инфы с форумов учебников но не могу заставить сменить цвет... 

мониторинг порта дает 0х7789... что и написано на плате... но он упорно не хочет менять цвет ... Светится белым... есть тест код от  продавана ... но там без библиотек цвета меняются.. больше ничего не происходит

что то я не допонимаю... плата Due


// ЛСД Экран
#include <Adafruit_GFX.h> // Hardware-specific library
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;

#define LCD_RD   A0
#define LCD_WR   A1     
#define LCD_RS   A2        
#define LCD_CS   A3       
#define LCD_REST A4

#define BLACK           0x0000
#define BLUE            0x001F
#define RED             0xF800
#define GREEN           0x07E0
#define CYAN            0x07FF
#define MAGENTA         0xF81F
#define YELLOW          0xFFE0
#define WHITE           0xFFFF




void setup(void) {
    Serial.begin(9600);
    tft.reset();
    uint16_t identifier = tft.readID();
    tft.begin(identifier);
    Serial.print("ID = 0x");  
    Serial.println(identifier, HEX);  
    tft.fillScreen(BLACK);
}

void loop(void) {

 tft.fillScreen(RED);
  
}

 

flat
Offline
Зарегистрирован: 05.02.2015

Решено .... #include <MCUFRIEND_kbv.h> ... подходит только для UNO

flat
Offline
Зарегистрирован: 05.02.2015

Вопрос... на унке не хватает цифровых портов... если отключить сенсор на экране ... ? какие контакты отключать .... распиновка как у ТС 

svchekalin
Offline
Зарегистрирован: 29.01.2016

это он ! http://www.mcufriend.com/product/html/?66.html запустить запустил но цвета инвертированы и тач развернут

Good-Warrior
Good-Warrior аватар
Offline
Зарегистрирован: 31.01.2016

Извините, возможно не в тему. Но вот какой вопрос. Только начал осваивать Ардуино. Взял Мега 2560, проверил, баботает. Ещё пришёл дисплей ТФТ 2.4". При покупки было написано что совместим с УНО, но возможно и к Мега 2560. Вобщем подключил и светит только белый экран. Поблуждал по инету и видел, как на видео выкладывали подключение Меги и такого дисплея как у меня (и в шапке этого поста). Всё работало. Подскажите  мне по-этапно как протестить его. Что-бы удостовериться, что работает исправно.

Pinochet
Pinochet аватар
Offline
Зарегистрирован: 19.12.2015

Из личного опыта работы с экранами:

Первое - это правильное определение чипа. Бывает китайцы пишут на плате одно, а на деле имеем иное. Поэтому:

1. вставляем экранчик в Arduino и пытаемся залить в Ардуину любой скетч из библиотек UTFT или Adafruit_TFT.

2. Согласно документации к подобному (любому подобному) экранчику вписываем инициализацию. Если перебрали все варианты чипа и ничего не добились, меняем инициализацию на иной близкий вариант.

3. Перебираем все возможные варианты чипа. Для библиотек UTFT они указаны в файле memorysaver, для Adafruit_TFT они указаны в файле с расширением cpp после строки 

// LCD controller chip identifiers

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

 Как только мы определили эти две вещи, далее всё упрощается. Ничего перепаивать, разрезать и уж тем более отрывать не нужно. Проще перебрать пару десятков вариантов чипа в скетче чем коверкать заведомо работоспособное изделие! 

Данная методика проверена на пяти различных экранчиках с платами UNO и Mega. В четырёх случаях из пяти китайцами был не верно указан чип экрана.

Pinochet
Pinochet аватар
Offline
Зарегистрирован: 19.12.2015

Good-Warrior пишет:

Извините, возможно не в тему. Но вот какой вопрос. Только начал осваивать Ардуино. Взял Мега 2560, проверил, баботает. Ещё пришёл дисплей ТФТ 2.4". При покупки было написано что совместим с УНО, но возможно и к Мега 2560. Вобщем подключил и светит только белый экран. Поблуждал по инету и видел, как на видео выкладывали подключение Меги и такого дисплея как у меня (и в шапке этого поста). Всё работало. Подскажите  мне по-этапно как протестить его. Что-бы удостовериться, что работает исправно.

 

Ваш дисплейчик такой же как на картинке в первом посте темы? Если да, то он для UNO. Чтобы запустить на Mega, вам нужно пробрасывать пины дисплея с LD_D0 по LD_D7 на 22-29 пины Mega двухрядной гребёнки. Подойдут перемычки "папа-мама" в количестве 8 штук и длиной 10 - 15 см.

Некоторые мастера ЗДЕСЬ утверждают что можно пробросить эти пины и программно, но сия методика ими держится в строжайшем секрете. 

Оно и понятно - вокруг окопались враги России!)

Good-Warrior
Good-Warrior аватар
Offline
Зарегистрирован: 31.01.2016

Pinochet пишет:
Ваш дисплейчик такой же как на картинке в первом посте темы? Если да, то он для UNO. Чтобы запустить на Mega, вам нужно пробрасывать пины дисплея с LD_D0 по LD_D7 на 22-29 пины Mega двухрядной гребёнки. Подойдут перемычки "папа-мама" в количестве 8 штук и длиной 10 - 15 см.

Некоторые мастера ЗДЕСЬ утверждают что можно пробросить эти пины и программно, но сия методика ими держится в строжайшем секрете. 

Оно и понятно - вокруг окопались враги России!)

Да. Такой же. Но судя вот по этой видео записи http://www.youtube.com/watch?v=Q8WvEjXvAws или вот этой http://www.youtube.com/watch?v=Lh26wbXPPw4 , можно сделать вывод, что он вполне исправно работает, как на УНО, так и на Мега... Да и на сайте продавца это написано. Если верить ему, то данный девайс расчитан для УНО, но так же совместим и с Мега. Как то так... Вот и думаю... Где-то читал, что у кого-то подобный был. И он у него на Леонардо работал, потом купил Мегу, а на нём сразу вылезла трабла как у меня - "экран белый". Решения его проблемы вроде как было. Но вот лопачу по новому инет и не могу снова найти ((( Помоему даже здесь на форуме писали. Но так как я в этом деле полный нуб, то решил не заморачиваться и дождался своего экрана. Тот пришёл вчера, а проблемма есть. Может и не проблема даже. ...буду дальше мучить его. Только пока я познаю все азы, как бы гарантия не закончилась, потом выяснится, что он не рабочий ))))

Pinochet
Pinochet аватар
Offline
Зарегистрирован: 19.12.2015

Да. Такой же. Но судя вот по этой видео записи http://www.youtube.com/watch?v=Q8WvEjXvAws или вот этой http://www.youtube.com/watch?v=Lh26wbXPPw4 , можно сделать вывод, что он вполне исправно работает, как на УНО, так и на Мега... Да и на сайте продавца это написано. Если верить ему, то данный девайс расчитан для УНО, но так же совместим и с Мега. Как то так... Вот и думаю... Где-то читал, что у кого-то подобный был. И он у него на Леонардо работал, потом купил Мегу, а на нём сразу вылезла трабла как у меня - "экран белый". Решения его проблемы вроде как было. Но вот лопачу по новому инет и не могу снова найти ((( Помоему даже здесь на форуме писали. Но так как я в этом деле полный нуб, то решил не заморачиваться и дождался своего экрана. Тот пришёл вчера, а проблемма есть. Может и не проблема даже. ...буду дальше мучить его. Только пока я познаю все азы, как бы гарантия не закончилась, потом выяснится, что он не рабочий ))))

[/quote]

 

Так вот я вам об этом и написал - либо пробрасывать пины перемычками, либо в Adafruit_TFT открывать редактором файл pin-magic и в нём переписывать пины. 

Но поскольку никто из новичков не в курсе как это делать, а местные ГУРУ хранят секреты в строжайшей тайне, самое простейшее это кинуть перемычки. 10 минут всех дел.

маму втыкаете в пины дисплея, папу - в 22-29 пины Mega.

Good-Warrior
Good-Warrior аватар
Offline
Зарегистрирован: 31.01.2016

Ещё вопрос на засыпку, он точно не по теме. Подскажите тему где можно с самого начала познать все азы. Как загружать библиотеки... Короче вобще всё с самого нуля. За ссылочку буду очень благодарен

 

Pinochet
Pinochet аватар
Offline
Зарегистрирован: 19.12.2015

Good-Warrior пишет:

Ещё вопрос на засыпку, он точно не по теме. Подскажите тему где можно с самого начала познать все азы. Как загружать библиотеки... Короче вобще всё с самого нуля. За ссылочку буду очень благодарен

 

Разве что скачать книжку Блум Джереми - "Изучаем Arduino. Инструменты и методы технического волшебства", или любую подобную. Сейчас их масса.

 А здесь такой темы вы не найдёте. Местные ГУРУ ленивы, им лень расписывать азы для новичков. Можете убедиться в этом сами, здесь моя тема опубликованная месяц назад:

http://arduino.ru/forum/programmirovanie/vopros-novichka-kak-sdelat-pros...

С тех пор вопросов местным я не задаю - напрасная трата времени. Проще и быстрее найти что-то самому.

 

Good-Warrior
Good-Warrior аватар
Offline
Зарегистрирован: 31.01.2016

Может, есть другой форум, где открыто общаются все? Новички и Бывалые совместно. Посмотрел, на англоязычных форумах так и есть, но сложно читать и понимать... Может, от того прогресс по развитию програмирования у них такой реактивный, а здесь такой тормозной и отсталый? От того, что ни кто тут не общается с новичками? Обычно на форумах где я начинал в других сферах, сразу предлагали помощь и помогали развиваться :) Неужели тут вобще ни чего не ждёт новичков?

Pinochet
Pinochet аватар
Offline
Зарегистрирован: 19.12.2015

Good-Warrior пишет:

Может, есть другой форум, где открыто общаются все? Новички и Бывалые совместно. Посмотрел, на англоязычных форумах так и есть, но сложно читать и понимать... Может, от того прогресс по развитию програмирования у них такой реактивный, а здесь такой тормозной и отсталый? От того, что ни кто тут не общается с новичками? Обычно на форумах где я начинал в других сферах, сразу предлагали помощь и помогали развиваться :) Неужели тут вобще ни чего не ждёт новичков?

 

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

В принципе да, наверное следовало бы создать некую площадку и для новичков специально. Тогда прогресс был бы лучшим. А то ГУРУ у нас вечно вальяжно-крутые, им лишнее слово написать впадлу. Они вечно заняты созерцанием своих творений...)

Pinochet
Pinochet аватар
Offline
Зарегистрирован: 19.12.2015

Значит выкладываю всё что накопал за месяц освоения Arduino на просторах интернет:

1) Уроки по Arduino для новичков здесь:

http://lesson.iarduino.ru/

2) библиотеки для всего и вся здесь:

http://iarduino.ru/file/

3) Отличный сайт по проектам на Arduino для новичков и не только здесь:

http://arduino-project.net/

4) Arduino для автомобилистов здесь:

http://compcar.ru/forum/forumdisplay.php?f=57&s=e7fac35189e88a706fb9c924...

5) Ветка по Arduino на форуме Калининграда здесь:

http://forklg.ru/viewforum.php?f=98&sid=73ab95bf1e3c3b268fa6caf0cbd63b24

6) Ну и пока совсем молодая ветка на чьём-то форуме, ещё не загаженная всезнайками. Можно сделать своего рода "форумом для новичков" если оседлать:

http://дата-ру.рф/viewforum.php?f=32

Good-Warrior
Good-Warrior аватар
Offline
Зарегистрирован: 31.01.2016

Спасибо большое. Буду изучать. А формума. Точнее страцы ни кто не создавал тут на форуме, для начинающих? Что бы ускорить процесс обучения.