Дешевый TFT 2.4" дисплей на spfd5408

MixaONil
Offline
Зарегистрирован: 07.09.2015

Доброго вечера!

Имел такой же опыт, все закончилось получением от продавца Большого архива в котором Одна нужная строка

"identifier=0x9341;" и все заработало и экран и touch и SD. Но остались вопросы:

1. Можно ли программно управлять уровнем подсветки или на край -включать/отключать?

2. Какие пины остаются после подключения к Уно, можно ли как увеличить их количество, например оторвать touch?

Спасибо и надеюсь на ответ.

 

l3thFox
Offline
Зарегистрирован: 27.03.2015

Дружище а не дашь файлик от продавца, или ссылку.

Мучаюсь уже хз сколько.

Уже начинаю подумывать что то не так с самим экраном

l3thFox
Offline
Зарегистрирован: 27.03.2015

Нашел правильные библиотеки.....

Может кому пригодиться https://github.com/samuraijap/TFTLCD-Library

 

Разрешение экрана меняется в TFTLCD-Library-master - > Adafruit_TFTLCD.cpp

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

l3thFox пишет:

Нашел правильные библиотеки.....

Может кому пригодиться https://github.com/samuraijap/TFTLCD-Library

 

Разрешение экрана меняется в TFTLCD-Library-master - > Adafruit_TFTLCD.cpp

Спасибо.

Ссылка на библиотеку очень помогла!!!

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Долго возился ИМЕННО вот с таким дисплеем:

http://ru.aliexpress.com/item/2-4-inch-TFT-touch-LCD-Screen-Module-For-Arduino-UNO-R3-Free-Shipping/1814799101.html?detailNewVersion=2

Дрова нашлись тут:

http://www.elecrow.com/24-inch-tft-touch-shield-for-arduino-p-1383.html

Все другие библиотеки не работали, только одна давала "снег" на экране, эта заработала на ура.

Чип оказался ili9341, по ссылке есть схема и описание.

arduinec
Offline
Зарегистрирован: 01.09.2015

Русифицировал похожий TFT Touch Shield:

http://arduino.ru/forum/programmirovanie/rusifikatsiya-biblioteki-adafru...

ArduinoControlled
Offline
Зарегистрирован: 07.02.2016

купил дисплей 

http://ru.aliexpress.com/item/Free-Shipping-1pcs-2-4-inch-TFT-touch-LCD-Screen-Module-For-Arduino-UNO-R3/2034511569.html

с контроллером Mega 2560

http://ru.aliexpress.com/item/FREE-SHIPPING-1PCS-LOT-ega-2560-R3-Mega2560-REV3-ATmega2560-16AU-Board-NO-with-USB-Cable/32401858891.html

кто ж знал то что дисплей предназначен для Uno, но не беда!!! с мегой работает вполне!!! переделка минимальна а входов выходов остается достаточно! Там в отзывах есть библиотека для уно с небольшими проблемами (инверсия цвета, зеркальное изображение, не рабочий тач, у меги спи на других ногах), я их пофиксил и сейчас все работает. так что все велком покупать платку. :))) у меня пример есть с фотками и сырцами. куда класть архивчик? 

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

slider
Offline
Зарегистрирован: 17.06.2014

ArduinoControlled пишет:

купил дисплей 

http://ru.aliexpress.com/item/Free-Shipping-1pcs-2-4-inch-TFT-touch-LCD-Screen-Module-For-Arduino-UNO-R3/2034511569.html

с контроллером Mega 2560

http://ru.aliexpress.com/item/FREE-SHIPPING-1PCS-LOT-ega-2560-R3-Mega2560-REV3-ATmega2560-16AU-Board-NO-with-USB-Cable/32401858891.html

кто ж знал то что дисплей предназначен для Uno, но не беда!!! с мегой работает вполне!!! переделка минимальна а входов выходов остается достаточно! Там в отзывах есть библиотека для уно с небольшими проблемами (инверсия цвета, зеркальное изображение, не рабочий тач, у меги спи на других ногах), я их пофиксил и сейчас все работает. так что все велком покупать платку. :))) у меня пример есть с фотками и сырцами. куда класть архивчик? 

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

сюда с фоткой с описаловом что менялось, ссылка на архив скинутый в яндкс диск 

ArduinoControlled
Offline
Зарегистрирован: 07.02.2016

https://drive.google.com/file/d/0B3Vep_H7Gv1aTnFybzhBUXdCN0U/view?usp=sh...

картинки отдельно.. как сюда вставить так и не понял 

https://drive.google.com/folderview?id=0B3Vep_H7Gv1aVDlJOTBWUlFsakE&usp=...

piligrim123
Offline
Зарегистрирован: 20.02.2016
urban111988
Offline
Зарегистрирован: 04.05.2016

Помогите подружить сенсорный дисплей tft lcd 2.4 с часами ds3231. Дисплей подключен к ардуине уно с помощью бибоиотеки https://github.com/samuraijap/TFTLCD-Library
Пришлось ее немного поправить, так как были косяки с инверсией оси Х. Аналоговый пин 4 занят под lcd_reset. Если подключить часы паралельно, то эгран начинает моргать и не запускается. Пробывал подключить lcd_reset к пину ресет на ардуино, а в скетче изменить #define LCD_RESET с A4 на 0, как советуют тут https://forums.adafruit.com/viewtopic.php?f=47&p=184358
не помогло, экран не запускается. У меня на уно есть еще дополнительные выводы A6 и A7, пробовал переназначить LCD_RESET на один из них, так же дисплей не запустился.
Помогите пожалуйста освободить i2c интерфейс

MagicianT
Offline
Зарегистрирован: 03.10.2015

Есть библиотека Soft-I2C, позволяет интерфейсить на любых дижитал выводах когда те которые хардваре заняты, я бы использовал пины 10-13, карта SD не должна использоваться в проэкте, естественно.

urban111988
Offline
Зарегистрирован: 04.05.2016

Спасибо за подсказку, я уже думал о таком решении так как видел упоминание про библиотеку ds1307 на программных пинах, искал для ds3231, не нашел, а про библиотеку soft-i2c не знал. Попробую подключить rtc к пинам A6 и A7, но хотелось бы все таки именно освободить пин A4 от дисплея, а не отказаться от него.
Не понимаю почему в библиотеке нет упоминаний про A4, единственное объявление идет в самом скетче, но при переназначении его на другой пин, дисплей отказывается запускаться... Я конечно еще начинающий ардуинщик и знаком с микроконтроллерами от силы месяц, но подозреваю что надо править порты в библиотеке

ArduinoControlled
Offline
Зарегистрирован: 07.02.2016

Чтобы переделать программно надо сначала ногу РЕСЕТ платы ЛСД  которая идет на А4 ардуино физически оторвать и  подключить к ноге ресет контроллера, из кода убрать все что дергает ногу а4 и  дисплей будет перегружаться с контроллером. минус в том, что сразу как контроллер загрузился дисплей может быть еще недогружен... но на глаз перезагрузка происходит приблизительно одинаковое время.  Это значит что сразу как контроллер загрузился не надо начинать сразу дергать дисплей, можно проинициализировать другие нужные вещи.

 

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

ArduinoControlled
Offline
Зарегистрирован: 07.02.2016

Еще... дело каждого, но чет я таймер когда заказывал читал что DS1307 нестабильный, и лучше DS3231. 

urban111988
Offline
Зарегистрирован: 04.05.2016

А зачем ногу ресет выпаивать чтоб переделать ее с A4 на ардуинский ресет? Я проводами подключаю, кидаю провод от lcd_reset к a4. Загвоздка в том что в библе вобще нет упоминаний про a4, там номер этого пина указывается при инициализации дисплея и если его изменить, у меня ничего не запускается. Подозреваю что этот ресет указан как явный порт в библе, но знаний чтоб разобраться с этим пока не хватает.
Часы у меня и есть ds3231. Не вижу смысла заказывать постоянно отстающие ds1307 за эти же деньги

Vln
Offline
Зарегистрирован: 17.12.2015

StrangerM пишет:

Прошу извинить за задержку с ответами. Давно не смотрел форум. И давно не занимался экранчиками. Вот рабочий код барографа для пары ТФТ2.4 +УНО. Чем могу.

http://arduino.ru/forum/apparatnye-voprosy/deshevyi-tft-24-displei-na-spfd5408?page=1#comment-133716

StrangerM, all

Этот проект где-то есть вцелом?

Zloy_Kot
Offline
Зарегистрирован: 03.09.2016

Всем доброго времени суток! Брошу и я свои 5 копеек...

Купил сие "чудо" ( писать маты небуду)

https://yadi.sk/i/Yrp0RkT8ujGFy

https://yadi.sk/i/VG3C_RM2ujGgh

https://yadi.sk/i/Hz93XNTMujH8T

Потратил кучу времени, перепробовал разные либы. Максимальный результат такой

https://yadi.sk/i/hrwoXFu0ujFWx

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

https://yadi.sk/i/OnfE4l9IujFa8

Видео 31 мб grafictest

https://yadi.sk/i/OnfE4l9IujFa8

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

Посему прошу помощи тут. Ардуинщик я начинающий, потому сильно не пинайте. Мну главное понять жив ли экран? Есть ли смысл открывать спор? Потому что полосатая часть изоброжения напоминает мне  "битую" матрицу, да и цвета какие-то пересвеченные, чтоли.. Хотя запакован товар был хорошо.

До этого приехал похожий набор, только с Мегой и экраном 3,2*. Там тоже пришлось поплясать, вплоть до использования ИДЕшки 1.0.6 но экран и тач запустить удалось.

}

slider
Offline
Зарегистрирован: 17.06.2014

Zloy_Kot пишет:

.....

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

https://yadi.sk/i/OnfE4l9IujFa8

Видео 31 мб grafictest

https://yadi.sk/i/OnfE4l9IujFa8

........

.... Потому что полосатая часть изоброжения напоминает мне  "битую" матрицу,........

похоже на битую матрицу. 

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

попробуйте еще для интереса от LG4535  http://arduino.ru/forum/apparatnye-voprosy/mcufriend-shield-0x4535-slabaya-yarkost

Zloy_Kot
Offline
Зарегистрирован: 03.09.2016

Пардон. вот правильная ссылка

https://yadi.sk/i/wtDNMXokujGAS

В монитор порта он выдает ID 0x4535 . на сайте http://misc.ws/2015/01/24/lcd-touch-screen-information/

инфы про такой ид нету...

Скачал предложенную вами либу. Загрузил ид реадер, получил такую инфу

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) 45 35    ID: ILI9320, ILI9325, ILI9335, ...
reg(0x0004) 00 00 00 00    Manufacturer ID
reg(0x0009) 00 00 00 00 00    Status Register
reg(0x000A) 00 00    Get Powsr Mode
reg(0x000C) 00 00    Get Pixel Format
reg(0x0061) 00 00    RDID1 HX8347-G
reg(0x0062) 00 00    RDID2 HX8347-G
reg(0x0063) 00 00    RDID3 HX8347-G
reg(0x0064) 00 00    RDID1 HX8347-A
reg(0x0065) 00 00    RDID2 HX8347-A
reg(0x0066) 00 00    RDID3 HX8347-A
reg(0x0067) 00 00    RDID Himax HX8347-A
reg(0x0070) 00 00    Panel Himax HX8347-A
reg(0x00A1) 00 00 00 00 00    RD_DDB SSD1963
reg(0x00B0) 00 00    RGB Interface Signal Control
reg(0x00B4) 00 00    Inversion Control
reg(0x00B6) 00 00 00 00 00    Display Control
reg(0x00B7) 00 00    Entry Mode Set
reg(0x00BF) 00 00 00 00 00 00    ILI9481, HX8357-B
reg(0x00C0) 00 00 00 00 00 00 00 00 00    Panel Control
reg(0x00C8) 00 00 00 00 00 00 00 00 00 00 00 00 00    GAMMA
reg(0x00CC) 00 00    Panel Control
reg(0x00D0) 00 00 00    Power Control
reg(0x00D2) 00 00 00 00 00    NVM Read
reg(0x00D3) 00 00 00 00    ILI9341, ILI9488
reg(0x00DA) 00 00    RDID1
reg(0x00DB) 00 00    RDID2
reg(0x00DC) 00 00    RDID3
reg(0x00E0) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    GAMMA-P
reg(0x00E1) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    GAMMA-N
reg(0x00EF) 00 00 00 00 00 00    ILI9327
reg(0x00F2) 00 00 00 00 00 00 00 00 00 00 00 00    Adjust Control 2
reg(0x00F6) 00 00 00 00    Interface Control
 

что это означает?

остальные скетчи этой либы или кривые (выдают разные ошибки компиляции) или большие...

Думаю.. мож к меге этот экран подключить и попробовать через нее проверить?

ArduinoControlled
Offline
Зарегистрирован: 07.02.2016

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

slider
Offline
Зарегистрирован: 17.06.2014

Zloy_Kot пишет:

.....

В монитор порта он выдает ID 0x4535

......

что это означает?

slider пишет:

попробуйте еще для интереса от LG4535  http://arduino.ru/forum/apparatnye-voprosy/mcufriend-shield-0x4535-slabaya-yarkost

 ID 0x4535 это и есть  LG4535

судя по видосу и фоткам (библиотеку вы нашли! какая либа подошла? что она в терминал отвечала?), что вверху весь тест кажет идеально, а дальше все в цветных полосах - это матрица битая 99% . Можно выбрасывать, не стоит время терять. 

// или использовать её разъем microSD и тачскрин . Или поменять дисплей на какой-нибудь как в соседней теме "дисплеи от сотиков".

Вячеслав 151
Offline
Зарегистрирован: 25.03.2015

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

Zloy_Kot
Offline
Зарегистрирован: 03.09.2016

Всем привет! Либа от ЛДж4535 не пошла, белый экран. Из неее запустился только скетч для идентификации контроллера. Подошла либа TFTLCD. В ней всего три примера: паинт, графиктест и еще чтото, результат вы видели. Сегодня продаван прислал кучу инфы, но все на китайском. Там главный "фигурант" ili 9341.Надо разбираться. Завтра притащу на работу Мегу 2560. Буду пробовать большие примеры на ней.

Zloy_Kot
Offline
Зарегистрирован: 03.09.2016

Попробовал этот дисплей с мегой- не завелся, белый экран. Из всех библиотек, предложенных в этой теме, экран завелся только с уно и с TFTLCD. Библиотека от lg не пошла. Маловато всетаки у меня знаний.... У меня есть еще 8 дней защиты покупателя..надо или запустить экран, или открывать спор и требовать возвращения денег. Хз что делать

James
Offline
Зарегистрирован: 26.02.2016

пробовал MCUFRIEND_KBV-master? мне помогла, только сенсор теперь ковыряю

Zloy_Kot
Offline
Зарегистрирован: 03.09.2016

Не помогла эта библиотека

negavoid
Offline
Зарегистрирован: 09.07.2016

Zloy_Kot, попробуйте вот эти библиотеки:

в первом посте здесь: http://forum.arduino.cc/index.php?topic=314912.0

и почти такая же здесь: http://ceezblog.info/2015/04/20/240x320-28-tft-shield-driver-4535-for-arduino

Zloy_Kot
Offline
Зарегистрирован: 03.09.2016

To negavoid чтото нужно будет изменять в них? Или они так должны пойти?

Zloy_Kot
Offline
Зарегистрирован: 03.09.2016

To negavoid спасибо огромное за ссылки! Экран ожил с либой из второй ссылки. Из первой, честно говоря, не пробовал.
Правда, остался вопрос: после калибровки у тача особенность- чем дальше от центра тем ближе к краю сработка... Мож что не так калибранул?..

MagicianT
Offline
Зарегистрирован: 03.10.2015

negavoid пишет:

Zloy_Kot, попробуйте вот эти библиотеки:

в первом посте здесь: http://forum.arduino.cc/index.php?topic=314912.0

и почти такая же здесь: http://ceezblog.info/2015/04/20/240x320-28-tft-shield-driver-4535-for-arduino

Negavoid, мерси боку Вам. Получил сегодня "подарок" 4535, до этого имел дело с 0154 9325 9327 9341 9486 и другими, думал что собаку сьел. Но этот фрукт, 3 часа библы искал, кучу времени потратил и всё ардуино разворушил- те что раньше запускались теперь обратно настраивать придётся. 

 2-я ссылка просто класс, спс. 

adel
adel аватар
Offline
Зарегистрирован: 03.02.2015

доброго времени суток всем

перебрался на новое место и достал комплектики из коробок, сделал термометр, но вот проблема

платка про мини

экран тфт 2.4" библиотеку качал тут, и одна из них полошла

тайч и ридер не задействовал и даже не пытался, нет нужды

сделал датчик температуры

собирал на уно+lcd1602 изначально, месяц отработал отлично без глюков

пересобрал на Uno + tftlcd 2.4" - неделя, полет нормальный

пересобрал на макетной плате Pro Mini 328 (5V, 16MHz) + TFT LCD 2.4" + питание из зарядки (5в 1А) - неделя, полет нормальный

 

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

НО! оставил на ночь, все отлично показывало, а утром белый экран

Reset не реагирует не на экране, не на плате

выключение питания помогает на пару минут

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

уже грешу на код, может забивает память какую нить?

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

#include <OneWire.h>
//DS18B20 temperature sensor support
#include <DallasTemperature.h>
//DS18B20 sensor pin
#define ONE_WIRE_BUS 10

// Setup a oneWire instance to communicate with any OneWire devices 
// (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
 
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
 

// 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
#define orange  0xFBE0
#define orange2  0xFD20

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

float last_t; 


void setup(void) {
 tft.reset();
 sensors.begin();
 uint16_t identifier = tft.readID();
 tft.begin(identifier);

//Добавлено
  delay(1000);
  tft.fillScreen(BLACK);
  delay(1000);
  tft.fillScreen(BLACK);
//конец добавленого
}

 

void loop()   
{
    
    tft.setRotation(1);
    sensors.requestTemperatures();
    
   
  //Read first sensor
 int temp = sensors.getTempCByIndex(0);
  
  tft.setCursor(80, 20);
  tft.setTextColor(WHITE);  tft.setTextSize(2);
  tft.println("TEMPERATURA");

  tft.setCursor(100, 100);
  if( abs(last_t-temp)>=1 )
  {
    tft.setCursor(100, 100);
    tft.fillRect(50, 50, 400, 200, BLACK);
    tft.setTextColor(RED); tft.setTextSize(20);
    tft.setCursor(50, 50);
    tft.print(temp);
  }
  else
  {
    tft.setCursor(100, 100);
    tft.fillRect(50, 50, 400, 200, BLACK);
    tft.setTextColor(BLUE); tft.setTextSize(20);
    tft.setCursor(50, 50);
    tft.print(temp);
  }
  delay(10000);


}

 

adel
adel аватар
Offline
Зарегистрирован: 03.02.2015

не стал перезагружать, просто висел включенный, заработал сам, 3 часа уже работает, пока все ок

не понятно

dreamwait
Offline
Зарегистрирован: 09.06.2014

Тоже долго возился с подбором библиотек. Дисплей с кодом 0x0154 +UNO. Тоже уже почти решил, что труп - но заработал. Графические библиотеки от 5408_....master, библиотека  тача от Адафрут - только пины тача нестандартные, А1, А2, 7, 6. Калибровка пока ни одна не заработала - примерно подобрал значения - пример paint работает (точки вместо линий - но это похоже просто быстродействия не хватает). Изображение приходится разворачивать на 90 градусов - иначе тач и изображение не совпадают (оси перепутаны). SD не проверял еще.

Vln
Offline
Зарегистрирован: 17.12.2015

аналоговые часы, переписал под UNO + SPFD5408 (chip ILI9328):  https://youtu.be/aF2mSPtxEW0

Взято отсюда http://arduino-project.net/analog-clock-arduino-mega/

//Подключение библиотек
#include <Adafruit_TFTLCD.h>
#include <DS1307.h>
//#include <Wire.h>

#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
//#define LCD_RESET A4 //перерезана дорожка на LCD_RST на плате LCD

#define TFT_BLACK   0x0000
#define TFT_BLUE    0x001F
#define TFT_RED     0xF800
#define TFT_GREEN   0x07E0
#define TFT_CYAN    0x07FF
#define TFT_MAGENTA 0xF81F
#define TFT_YELLOW  0xFFE0
#define TFT_WHITE   0xFFFF
#define TFT_GREY    0x5AEB

Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, 1);

//Подключение модуля DS1307
DS1307 rtc(A4, A5);
Time  t;
//Центральные координаты для рисования стрелочных часов
int clockCenterX = 119;
int clockCenterY = 159;
int oldsec = 0;

void setup() {
  //
  Serial.begin(9600);
  Serial.println("Initializing ...");

  tft.reset();
  uint16_t idLCD = tft.readID();
  Serial.print(F("Found LCD driver "));
  Serial.println(idLCD, HEX);
  tft.begin(idLCD); //SPFD5408 id 9325/9328/9341 Adafruit_TFTLCD.h

  tft.setRotation(0);; // вертикальное отображение

  // яркость дислея TFT SPFD5408 ???
  //analogWrite(5, 100); //
  // для максимальной яркости значение 100 меняем на 150, а для минимальной на 5

  rtc.halt(false);
  /*Для установки времени, введите ваши параметры и
    раскомментируйте 3 строки ниже и загрузите скетч
    на ардуино,а потом назад закомментируйте обратно*/
//  rtc.setTime(23, 59, 55);
//  rtc.setDate(11, 12, 2016);
//  rtc.setDOW(SUNDAY);
}

void drawDisplay()
{
  // Очистка дисплея
  tft.fillScreen(TFT_BLACK);
  // Рисуем циферблат
  tft.setTextColor(TFT_CYAN);
  for (int i = 0; i < 5; i++)
  {
    tft.drawCircle(clockCenterX, clockCenterY, 119 - i, TFT_CYAN);
  }
  for (int i = 0; i < 5; i++)
  {
    tft.drawCircle(clockCenterX, clockCenterY, i, TFT_WHITE);
  }
  //Отображаем числа на циферблате
  tft.setTextColor(TFT_WHITE);
  tft.setTextSize(2);
  tft.setCursor(clockCenterX + 99, clockCenterY - 7); tft.print("3");
  tft.setCursor(clockCenterX - 7, clockCenterY + 95); tft.print("6");
  tft.setCursor(clockCenterX - 109, clockCenterY - 7); tft.print("9");
  tft.setCursor(clockCenterX - 9, clockCenterY - 109); tft.print("12");
  //Рисуем метки часов
  for (int i = 0; i < 12; i++)
  {
    if ((i % 3) != 0)
      drawMark(i);
  }
  t = rtc.getTime();
  printData();
  drawMin(t.min);
  drawHour(t.hour, t.min);
  drawSec(t.sec);
  oldsec = t.sec;
}

void drawMark(int h)//Отрисовка меток
{
  float x1, y1, x2, y2;
  h = h * 30;
  h = h + 270;
  x1 = 114 * cos(h * 0.0174532925);
  y1 = 114 * sin(h * 0.0174532925);
  x2 = 100 * cos(h * 0.0174532925);
  y2 = 100 * sin(h * 0.0174532925);
  tft.drawLine(x1 + clockCenterX, y1 + clockCenterY, x2 + clockCenterX, y2 + clockCenterY, TFT_WHITE);
}

void printData() //print Data&Day
{
  //Отображение текущей даты
  tft.setTextSize(2);
  tft.setTextColor(TFT_WHITE, TFT_BLACK);
  tft.setCursor(clockCenterX - 60, 10);
  tft.print(rtc.getDateStr());
  //Отображение дня недели 
  tft.fillRect(clockCenterX-9*12/2,             tft.height()-25, 9*12, 16, TFT_BLACK); //erase
  String DoW = rtc.getDOWStr();
  tft.setTextColor(TFT_WHITE, TFT_BLACK);
  tft.setCursor(clockCenterX-DoW.length()*12/2, tft.height()-25);
  tft.print(DoW);
}

void drawDigClock() //Draw Mini Dclock
{
  int xpos = clockCenterX - 47;
  int ypos = clockCenterY + 70;
  tft.drawRoundRect(xpos - 4, ypos - 4, 102, 22, 5, TFT_CYAN); // рамка
  tft.setTextColor(TFT_WHITE, TFT_BLACK);
  tft.setTextSize(2);
  tft.setCursor(xpos, ypos);
  tft.print(rtc.getTimeStr());
}

void drawSec(int s) //отрисовка секундной стрелки
{
  float x1, y1, x2, y2;
  int ps = s - 1;
  if (ps == -1)
    ps = 59;
  ps = ps * 6;
  ps = ps + 270;
  x1 = 95 * cos(ps * 0.01745);
  y1 = 95 * sin(ps * 0.01745);
  x2 = 5 * cos(ps * 0.01745);
  y2 = 5 * sin(ps * 0.01745);
  tft.drawLine(x1 + clockCenterX, y1 + clockCenterY, x2 + clockCenterX, y2 + clockCenterY, TFT_BLACK);
  s = s * 6;
  s = s + 270;
  x1 = 95 * cos(s * 0.01745);
  y1 = 95 * sin(s * 0.01745);
  x2 = 5 * cos(s * 0.01745);
  y2 = 5 * sin(s * 0.01745);
  tft.drawLine(x1 + clockCenterX, y1 + clockCenterY, x2 + clockCenterX, y2 + clockCenterY, TFT_RED);
}

void drawMin(int m) //отрисовка минутной стрелки
{
  float x1, y1, x2, y2, x3, y3, x4, y4;
  int pm = m - 1;
  int w = 5; // толщина стрелки, было 4
  if (pm == -1)
    pm = 59;
  pm = pm * 6;
  pm = pm + 270;
  x1 = 80 * cos(pm * 0.01745);
  y1 = 80 * sin(pm * 0.01745);
  x2 = 5 * cos(pm * 0.01745);
  y2 = 5 * sin(pm * 0.01745);
  x3 = 30 * cos((pm + w) * 0.01745);
  y3 = 30 * sin((pm + w) * 0.01745);
  x4 = 30 * cos((pm - w) * 0.01745);
  y4 = 30 * sin((pm - w) * 0.01745);
  tft.drawLine(x1 + clockCenterX, y1 + clockCenterY, x3 + clockCenterX, y3 + clockCenterY, TFT_BLACK);
  tft.drawLine(x3 + clockCenterX, y3 + clockCenterY, x2 + clockCenterX, y2 + clockCenterY, TFT_BLACK);
  tft.drawLine(x2 + clockCenterX, y2 + clockCenterY, x4 + clockCenterX, y4 + clockCenterY, TFT_BLACK);
  tft.drawLine(x4 + clockCenterX, y4 + clockCenterY, x1 + clockCenterX, y1 + clockCenterY, TFT_BLACK);
  m = m * 6;
  m = m + 270;
  x1 = 80 * cos(m * 0.01745);// Длина стрелки
  y1 = 80 * sin(m * 0.01745);
  x2 =  5 * cos(m * 0.01745);
  y2 =  5 * sin(m * 0.01745);
  x3 = 30 * cos((m + w) * 0.01745);
  y3 = 30 * sin((m + w) * 0.01745);
  x4 = 30 * cos((m - w) * 0.01745);
  y4 = 30 * sin((m - w) * 0.01745);
  tft.drawLine(x1 + clockCenterX, y1 + clockCenterY, x3 + clockCenterX, y3 + clockCenterY, TFT_WHITE);
  tft.drawLine(x3 + clockCenterX, y3 + clockCenterY, x2 + clockCenterX, y2 + clockCenterY, TFT_WHITE);
  tft.drawLine(x2 + clockCenterX, y2 + clockCenterY, x4 + clockCenterX, y4 + clockCenterY, TFT_WHITE);
  tft.drawLine(x4 + clockCenterX, y4 + clockCenterY, x1 + clockCenterX, y1 + clockCenterY, TFT_WHITE);
}

void drawHour(int h, int m) //отрисовка часовой стрелки
{
  float x1, y1, x2, y2, x3, y3, x4, y4;
  int ph = h;
  int color = TFT_CYAN;// цвет стрелки
  int w = 7; // толщина стрелки, было + 4
  if (m == 0) {
    ph = ((ph - 1) * 30) + ((m + 59) / 2);
  }
  else {
    ph = (ph * 30) + ((m - 1) / 2);
  }
  ph = ph + 270;
  x1 = 60 * cos(ph * 0.01745);
  y1 = 60 * sin(ph * 0.01745);
  x2 = 5 * cos(ph * 0.01745);
  y2 = 5 * sin(ph * 0.01745);
  x3 = 20 * cos((ph + w) * 0.01745);
  y3 = 20 * sin((ph + w) * 0.01745);
  x4 = 20 * cos((ph - w) * 0.01745);
  y4 = 20 * sin((ph - w) * 0.01745);
  tft.drawLine(x1 + clockCenterX, y1 + clockCenterY, x3 + clockCenterX, y3 + clockCenterY, TFT_BLACK);
  tft.drawLine(x3 + clockCenterX, y3 + clockCenterY, x2 + clockCenterX, y2 + clockCenterY, TFT_BLACK);
  tft.drawLine(x2 + clockCenterX, y2 + clockCenterY, x4 + clockCenterX, y4 + clockCenterY, TFT_BLACK);
  tft.drawLine(x4 + clockCenterX, y4 + clockCenterY, x1 + clockCenterX, y1 + clockCenterY, TFT_BLACK);
  h = (h * 30) + (m / 2);
  h = h + 270;
  x1 = 60 * cos(h * 0.01745);// Длина стрелки
  y1 = 60 * sin(h * 0.01745);
  x2 = 5 * cos(h * 0.01745);
  y2 = 5 * sin(h * 0.01745);
  x3 = 20 * cos((h + w) * 0.01745);
  y3 = 20 * sin((h + w) * 0.01745);
  x4 = 20 * cos((h - w) * 0.01745);
  y4 = 20 * sin((h - w) * 0.01745);
  tft.drawLine(x1 + clockCenterX, y1 + clockCenterY, x3 + clockCenterX, y3 + clockCenterY, color);
  tft.drawLine(x3 + clockCenterX, y3 + clockCenterY, x2 + clockCenterX, y2 + clockCenterY, color);
  tft.drawLine(x2 + clockCenterX, y2 + clockCenterY, x4 + clockCenterX, y4 + clockCenterY, color);
  tft.drawLine(x4 + clockCenterX, y4 + clockCenterY, x1 + clockCenterX, y1 + clockCenterY, color);
}

void loop()//основной цикл работы стрелочных часов
{
  int x, y;
  t = rtc.getTime();
  drawDisplay();
  Serial.print(rtc.getTimeStr());Serial.println(" 0 printData");  
  while (true)
  {
    if (oldsec != t.sec)
    {
      int t1 = 0;
      int t2 = 0;
      int t3 = 0;
      if (t.hour >= 12) {
        t1 = (t.hour - 12) * 5;
      }
      else
      {
        t1 = t.hour * 5;
      }
      t2 = t.min / 12;
      t3 = t1 + t2;
      int a = t.min + 1;
      int b = t.min + 2;
      int c = t.min + 3;
      int d = t3 + 1;
      int e = t3 + 2;
      int f = t3 + 3;
      int g = t3 + 4;
      if ((t.sec == d) || (t.sec == e) || (t.sec == f) || (t.sec == g))
      {
        drawHour(t.hour, t.min);
      }
      if ((t.sec == a) || (t.sec == b) || (t.sec == c))
      {
        drawMin(t.min);
      }
      if (t.sec == 0)
      {
        drawMin(t.min);
        drawHour(t.hour, t.min);
        if ((t.hour == 0) && (t.min == 0))
        {
          printData();
        }
      }
      drawSec(t.sec);
      drawDigClock();
      oldsec = t.sec;
    }
    delay(10);
    t = rtc.getTime();
  }
}

еще добавлю маленький барограф на трое суток

_mikka
Offline
Зарегистрирован: 01.11.2015

Привет народ, посоветуйте безпроблемный экран с тачскрином для метеостанции, желаемый размер 3-4 дюйма...

Хочу выводить время, давление, температуру, содержание СО2... Контроллер или МЕГА или УНО, скорее всего МЕГА.

dreamwait
Offline
Зарегистрирован: 09.06.2014

на 3-4 - это точно МЕГА...

Vlad_rx
Offline
Зарегистрирован: 26.09.2016

Некоторое время назад купил  2.4 на ILI9341, запустил с SPDF 5408 на УНО. Всё работало и экран и тач скрин.

Так как на УНО не портов свободных, а МЕГИ не было отложил на будующее.

Появилась МЕГА и решил проверить на УНО перед переносом. Не то что бы не работает, работает очень коряво.

Нарисовал на экране линию от 0,0 до 320,240 начало и конец соответствует координатам, а в середине линии расположенны параллейно основной, но раскиданны отрезками в случайно порядке. Поробовал поменять библиотеки, но получается то же самое.

Экран на выброс?

Vln
Offline
Зарегистрирован: 17.12.2015

Vlad_rx пишет:

Экран на выброс?

Если тесты экран проходит, то тачскрин

slider
Offline
Зарегистрирован: 17.06.2014

1. вероятней контакт иль сопилюшка  и 2. библиотека, сама UNO. пробуйте библиотеку адафруит, mcufriend  ili9341  8bit (не SPI). смотрите что выдал в терминал пример с библиотеки. пробуйте на Меге. 

1. прозвоните мультимертом 

2. сотрите библиотеки дисплеев и графики  из моих документов- ардуино - библиотеки  

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

Vlad_rx
Offline
Зарегистрирован: 26.09.2016

Вот примеры тестов.

 

 

 

 

 

Такое впечатление, что переставляюся блоки пикселей.

ArduinoControlled
Offline
Зарегистрирован: 07.02.2016

Судя по тому что эффекты поворачиваются при логическом повороте экрана- проблема с библами... контакты скорее всего нипричем.

 

mmp2004
Offline
Зарегистрирован: 29.04.2017

У меня spfd5408 все примеры работают, но экран разделен на 2 части и все изображения работают синхронно, и даже татч, где глюк?? спасибо!!

James
Offline
Зарегистрирован: 26.02.2016

размер экрана? 

_width = WIDTH;

_height = HEIGHT;

внимание на эти строки

AndreyE
Offline
Зарегистрирован: 02.05.2017

Здравствуйте. А кто-нибудь добивался работы Atmega128 и дисплея tft 2.4 на ili9341?  Библиотека "SPFD5408-master" c гит хаба. https://github.com/JoaoLopesF/SPFD5408 ( Кстати, на 328 атмеге все чудесно работает с этой библиотекой, но свободных пинов почти не остается.). Ковырял ее долго. Но опыта маловато. Исправлял файлы библиотеки и "pin_magic.h"   и "SPFD5408_Adafruit_TFTLCD.cpp". Не помогло. Может кто подскажет как Atmega128 с TFT 2.4 на ili9341 поженить. На данный момент при загрузке график теста из примеров экран мерцает и видно, что процесс идет. Но, похоже, не происходит инициализации дисплея и картинки нет, только мерцание. В Atmega128 загрузчик MegaCore с гит хаба (https://github.com/MCUdude/MegaCore). Исправленная мной библиотека здесь https://yadi.sk/d/HlwgoRtS3HYgNZ .

slider
Offline
Зарегистрирован: 17.06.2014

что именно правили?   делал на Atmega128 и дисплее tft   ili9341 spi , библиотеку использовал UTFT . подправить пришлось её - это просто добавил коммент atmega128 к существующему atmega2560,  и стер лишнее про не существующиие порты оставшиеся от atmega2560.

все робит без проблем.

// лучше конечно выкладывать свои решения в соответсвующей существующей теме про atmega128 crumbuino/megacore http://arduino.ru/forum/apparatnye-voprosy/crumbuino-128-svoimi-rukami . 

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

//// от пинов 8/16 битного дисплея можно избавиться максимум от 3-х :   reset ,  cs  , rd . вытерев их из либы . так делал на UTFT  http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov?page=1#comment-167595

mmp2004
Offline
Зарегистрирован: 29.04.2017

Если не трудно где это?

Я заливаю spfd5408_graphicstest.

AndreyE
Offline
Зарегистрирован: 02.05.2017

У меня на UNO заработал дисплей только с "SPFD5408-master". Вот и решил его ковырять. В pin_magic.h оставил только для Atmega128.


#ifndef _pin_magic_
#define _pin_magic_

// Shield pin usage:
// LCD Data Bit :    7    6    5    4    3    2    1    0
// Digital pin #:    7    6   13    4   11   10    9    8
// Uno port/pin :  PD7  PD6  PB5  PD4  PB3  PB2  PB1  PB0
// Mega port/pin:  PH4  PH3  PB7  PG5  PB5  PB4  PH6  PH5
// Leo port/pin :  PE6  PD7  PC7  PD4  PB7  PB6  PB5  PB4
// Due port/pin : PC23 PC24 PB27 PC26  PD7 PC29 PC21 PC22
// Breakout pin usage:
// LCD Data Bit :   7   6   5   4   3   2   1   0
// Uno dig. pin :   7   6   5   4   3   2   9   8
// Uno port/pin : PD7 PD6 PD5 PD4 PD3 PD2 PB1 PB0
// Mega dig. pin:  29  28  27  26  25  24  23  22
// Mega port/pin: PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 (one contiguous PORT)
// Leo dig. pin :   7   6   5   4   3   2   9   8
// Leo port/pin : PE6 PD7 PC6 PD4 PD0 PD1 PB5 PB4
// Due dig. pin :  40  39  38  37  36  35  34  33
// Due port/pin : PC8 PC7 PC6 PC5 PC4 PC3 PC2 PC1 (one contiguous PORT. -ish…)

// Modified for SPFD5408 by Joao Lopes to work with SPFD5408


#define DELAY7        \
  asm volatile(       \
    "rjmp .+0" "\n\t" \
    "rjmp .+0" "\n\t" \
    "rjmp .+0" "\n\t" \
    "nop"      "\n"   \
    ::);



 #define __AVR_ATmega128__

#define USE_ADAFRUIT_SHIELD_PINOUT
  // LCD control lines:
  // RD (read), WR (write), CD (command/data), CS (chip select)
  #define RD_PORT PORTF				/*pin A0 */
  #define WR_PORT PORTF				/*pin A1 */
  #define CD_PORT PORTF				/*pin A2 */
  #define CS_PORT PORTF				/*pin A3 */
  #define RD_MASK B00000001
  #define WR_MASK B00000010
  #define CD_MASK B00000100
  #define CS_MASK B00001000


  // These are macros for I/O operations...

  // Write 8-bit value to LCD data lines
  #define write8inline(d) {                          \
    PORTD = (PORTD & B00000000) | ((d) & B11111111); \
    WR_STROBE; } // STROBEs are defined later

  // Read 8-bit value from LCD data lines.  The signle argument
  // is a destination variable; this isn't a function and doesn't
  // return a value in the conventional sense.
  #define read8inline(result) {                       \
    RD_ACTIVE;                                        \
    DELAY7;                                           \
    result = (PIND & B11111111); \
    RD_IDLE; }
  
  #define setWriteDirInline() { DDRD |=  B11111111;}
  #define setReadDirInline()  { DDRD &= ~B11111111;}

  
  #define write8 write8inline

// #elif defined(__AVR_ATmega128__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__)

 // When using the TFT breakout board, control pins are configurable.
 #define RD_ACTIVE  *rdPort &=  rdPinUnset
 #define RD_IDLE    *rdPort |=  rdPinSet
 #define WR_ACTIVE  *wrPort &=  wrPinUnset
 #define WR_IDLE    *wrPort |=  wrPinSet
 #define CD_COMMAND *cdPort &=  cdPinUnset
 #define CD_DATA    *cdPort |=  cdPinSet
 #define CS_ACTIVE  *csPort &=  csPinUnset
 #define CS_IDLE    *csPort |=  csPinSet




// Data write strobe, ~2 instructions and always inline
#define WR_STROBE { WR_ACTIVE; WR_IDLE; }

// These higher-level operations are usually functionalized,
// except on Mega where's there's gobs and gobs of program space.

// Set value of TFT register: 8-bit address, 8-bit value
#define writeRegister8inline(a, d) { \
  CD_COMMAND; write8(a); CD_DATA; write8(d); }

// Set value of TFT register: 16-bit address, 16-bit value
// See notes at top about macro expansion, hence hi & lo temp vars
#define writeRegister16inline(a, d) { \
  uint8_t hi, lo; \
  hi = (a) >> 8; lo = (a); CD_COMMAND; write8(hi); write8(lo); \
  hi = (d) >> 8; lo = (d); CD_DATA   ; write8(hi); write8(lo); }

// Set value of 2 TFT registers: Two 8-bit addresses (hi & lo), 16-bit value
#define writeRegisterPairInline(aH, aL, d) { \
  uint8_t hi = (d) >> 8, lo = (d); \
  CD_COMMAND; write8(aH); CD_DATA; write8(hi); \
  CD_COMMAND; write8(aL); CD_DATA; write8(lo); }



#endif // _pin_magic_
AndreyE
Offline
Зарегистрирован: 02.05.2017

И в "SPFD5408_Adafruit_TFTLCD.cpp" указал:

(это малая часть кода)

digitalWrite(A4, HIGH); // Reset line
  pinMode(A3, OUTPUT);   // Enable outputs
  pinMode(A2, OUTPUT);
  pinMode(A1, OUTPUT);
  pinMode(A0, OUTPUT);
  pinMode(A4, OUTPUT);
 
По идее должно работать. 
mmp2004
Offline
Зарегистрирован: 29.04.2017

Jamesу

Где найти эти строки

_width = WIDTH;

 
_height = HEIGHT;
Спасибо