Дисплей на ili9341

IPS
Offline
Зарегистрирован: 23.09.2014

Здравствуйте, парни. Помогите советом! Прикупил такой дисплейчик, но работаю с Атмэлами только на ассемблере. Ардуино у меня нет. Подключил к меге8, решил для начала просто запустить дисплей (закрасить к примеру одним цветом экран) - в результате полный облом. Подсветка работает и больше ничего. Пробовал из разных библиотек брать код инициализации и прочее, но ничего не получается. Попробовал прочитать командой 0х04 содержимое регистра контроллера - пусто... Руки опускаются - то ли что-то не так делаю, то ли дисплей убитый, то ли контроллер не ILI9341. И еще важный момент - питание меги и дисплея 3,3в. Решил перемычку J1 на плате дисплея замкнуть (насколько я понял, её надо замкнуть при питании 3,3) - никаких изменений...

toc
Offline
Зарегистрирован: 09.02.2013

Среду разработки "Ардуино IDE" можно использовать не только для программирования Плат Ардуино (нано, уно, мега), но и для программирования контроллеров. Я лично atmega328 много раз успешно программировал. Мегу8 народ тоже успешно прошивает. Если вы не мазохист идите этим путём, иначе продолжайте упражнения с ассемблером.

IPS
Offline
Зарегистрирован: 23.09.2014

Не спорю. Но мой вопрос был в другом - может есть какая тонкость в управлении такими дисплеями? Я даташит на 9341 прочел от корки до корки, все временные параметры в норме, сигналы согласно даташиту, снял сигналы логическим анализатором - отвечает протоколу SPI - а результат "0"...

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

art100
Offline
Зарегистрирован: 09.03.2014

а брака тонны

я когда-то считал

я купил на сдачу 9$ tft 2.4" с неким чипом st7781 по порядку на тот момент 215-ым  у этого одного продавца 

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

а запустил я один очевидно

получается статистика успеха покупки TFT китаского маленького и успеха его запуска более менее адекватного 0.5% http://forum.arduino.cc/index.php?topic=223769.0

какова вам моя статистика по TFT ?

а по ILI тут вроде много успехов писали

кто-то жаловался что просто нет контакта потому как врукопашную пяют

у меня вообще запаралелили ноги

50% стонет верх низ перепутаны

замечаю на средних 7 дюймов косяков меньше

может самому поиграться купить

 

IPS
Offline
Зарегистрирован: 23.09.2014

art100, спасибо за ответ. Всё больше склоняюсь к тому, что брак. Хотя логику китайцев не совсем пойму - дисплей есть, плата под него есть, всё это собрано в кучу - какой смысл столько работы для того, чтобы брак гнать? Что интересно - есть у меня ещё два дисплея 128*160 вроде бы как на ST7735 собраных. История один в один - не работают. Вот поэтому и есть мысль, что какой-то косяк у меня... Или все бракованы? :)

damber
Offline
Зарегистрирован: 05.10.2014

 

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

у меня был дисплей на ST7735. на ардуине работал. сейчас его уже на stm32 юзает один разработчик. никаких проблем 

Ares_ekb
Offline
Зарегистрирован: 09.01.2015

Подскажите, пожалуйста, подойдет ли преобразователь HCF4050BE? Чем он отличается от CD4050BE?

Ares_ekb
Offline
Зарегистрирован: 09.01.2015

О, да, 3 дня пытался его подключить к меге 2560, и наконец заработало!

Использовал эту библиотеку: https://github.com/gmtii/ili9341-arduino

Тут много всего про подключение этого дисплея: http://forum.arduino.cc/index.php?topic=181679.45

Я сам до этого допер, а потом нашел в той теме подтверждение. В библиотеке ошибка, нужно заменить это

#define TFT_RST_OFF {DDRD |= 0x10;PORTD |=  0x10;}
#define TFT_RST_ON  {DDRD |= 0x10;PORTD &=~ 0x10;}

на это

#define TFT_RST_OFF {DDRG |= 0x20;PORTG |=  0x20;}
#define TFT_RST_ON  {DDRG |= 0x20;PORTG &=~ 0x20;}

Подключал так:

SDO (MISO) -> Pin 50

LED (он же BL) -> Pin 7

SCK -> Pin 52

SDI (MOSI) -> Pin 51

D/C -> Pin 6

RESET -> Pin 4

CS -> Pin 5

GND -> GND

VCC -> 3V

 

LED, SCK, SDI, D/C, RESET, CS подключаем через CD4050BE.

SDO, GND, VCC подключаем напрямую.

CD4050BE запитываем тоже от 3V и тоже заземляем.

 

Единственная проблема, что работает все очень неустойчиво :( Я запускаю пример text. Текст появляется только если несколько раз нажать reset. Наверное, если всё нормально запаять, будет лучше, но может можно добавить каких-нибудь конденсаторов или резисторов, чтобы он работал устойчивей?

Madcat.ua
Offline
Зарегистрирован: 03.05.2014

Заказал себе такой же дисплей. Был заранее готов к граблям. Даже записал себе в список покупок CD4050BE. Но так и не купил.

Китаец, кстати, положил(по моей просьбе) в подарок 5V-3V IIC UART SPI Four Channel Level Converter.

Через него подключил RST,CS,D/C,SCK  + MOSI через резистор 470Ом.  DC запитал с ардуины 3.3V. Остальное - напрямую.

Вуаля.

 

Madcat.ua
Offline
Зарегистрирован: 03.05.2014

Сорри, продублировалось

Madcat.ua
Offline
Зарегистрирован: 03.05.2014

Сорри, продублировалось

Ares_ekb
Offline
Зарегистрирован: 09.01.2015

Прикольный преобразователь!

Я понял в чем проблема. В этом злополучном RESET, я не в той папке исправлял ошибку в коде. Теперь всё работает.

kaktus
Offline
Зарегистрирован: 31.12.2014

alex25ru

kaktus
Offline
Зарегистрирован: 31.12.2014

TFT01 Shield v2.0 SHD09 ElecFreaks

использовал б-ку Хеннинга (мод. дисплея)

вывод А0... А5

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

Народ, вы поиском то пользуетесь, этот проект то видели ? часы на ардуино  Часы на Arduino nano и дисплее TFT01-22SP

http://arduino-project.net/chasy-na-arduino-tft01-22sp/

вот вам и согласование

там всё разжёвано, куда чего, и как пример выбрать в IDE

Там же и стрелочные часы 

http://arduino-project.net/analog-clock-arduino-mega/

 

inhelp
inhelp аватар
Offline
Зарегистрирован: 23.09.2012

Еще я тут про шрифты разжевал http://arduino-project.net/kak-sozdat-svoi-shrifty-tft/

Как создать свои шрифты на ардуино для TFT дисплея

ну и если интересно, то напишу статью про такие часики 

или 

...

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

inhelp пишет:

ну и если интересно, то напишу статью про такие часики 

 

Конечно интересно,почитал бы с удовольствием

s1981
Offline
Зарегистрирован: 22.12.2013

А как на этот дисплей вывести свою картинку?

denis707
Offline
Зарегистрирован: 09.09.2013

А когда выйдет статья про крутые часы?

inhelp
inhelp аватар
Offline
Зарегистрирован: 23.09.2012

denis707 пишет:

А когда выйдет статья про крутые часы?

пока занят, скорее всего что на выходные

denis707
Offline
Зарегистрирован: 09.09.2013

Спасибо, жду с нетерпением :-)

denis707
Offline
Зарегистрирован: 09.09.2013

Печалька :-(

denis707
Offline
Зарегистрирован: 09.09.2013

Может можно скетч? 

Сам попробовал бы разобраться.

Очень интересует реализация вывода графики.

если можно -> denis13071981@mail.ru

denis707
Offline
Зарегистрирован: 09.09.2013

Использую К561ПУ4 

denis707
Offline
Зарегистрирован: 09.09.2013

inhelp пишет:

denis707 пишет:

А когда выйдет статья про крутые часы?

пока занят, скорее всего что на выходные

Какую библиотеку используете в крутых часиках?

может сюда скинете?

у меня библиотека ili9341 но с ней пока не получается.

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

Некоторое время мудохался с дисплеем - белый цвет и ничего больше. Осциллограф показал страшные формы сигналов на шине данных после резисторных делителей. Проблему поборол заменив резисторы на 3,3к+1,8к, укоротил провода до 15см и делитель ставил ближе к дисплею. Пользую бибилиотеку MultiLCD(скину при необходимости), написал под нее несколько программ на Delphi для выбора цветов, генерации шрифтов(монохромных) и отдельных картинок/символов(монохромных) до 80*80 точек. Разогнал шину до 1/2 тактовой частоты(хардовый SPI) против стандартных 1/8 в этой библиотеке. Все работает стабильно

denis707
Offline
Зарегистрирован: 09.09.2013

ElectroN пишет:

Некоторое время мудохался с дисплеем - белый цвет и ничего больше. Осциллограф показал страшные формы сигналов на шине данных после резисторных делителей. Проблему поборол заменив резисторы на 3,3к+1,8к, укоротил провода до 15см и делитель ставил ближе к дисплею. Пользую бибилиотеку MultiLCD(скину при необходимости), написал под нее несколько программ на Delphi для выбора цветов, генерации шрифтов(монохромных) и отдельных картинок/символов(монохромных) до 80*80 точек. Разогнал шину до 1/2 тактовой частоты(хардовый SPI) против стандартных 1/8 в этой библиотеке. Все работает стабильно

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

И можно подробнее про разгон шины?

(MISO не использую, сигналы подаю через к561пу4 http://tec.org.ru/board/k561pu4/149-1-0-1646

подсветку на прямую с pwm контакта. Питаю микруху от 3.3v)

denis707
Offline
Зарегистрирован: 09.09.2013

желтый - 5v

голубой - 3v

c к561пу4

с делителем

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

https://yadi.sk/d/Qvo8-2-5g6zTt

Тут библиотека, которую использовал я и пример. Заранее прошу прощения - нет времени на нормальный простой пример - тут есть все, включая уйму лишнего. Шрифты хранятся в виде статик констант в программной памяти. Написал программу для создания этих констант, но  делфи7 не очень хорошо переносится на другие компы - становится криворабочим (могу скинуть исходники - побеждайте постоянные изменения размеров timage).

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

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

И к вопросу осциллограмм - сейчас на пинах дисплея выглядит так

Раньше было гораздо страшнее. Частота в 2 раза выше Вашей, denis707

denis707
Offline
Зарегистрирован: 09.09.2013

Ткните меня носом, а то уже месяц не могу прикрутить картинку как на "крутых часиках". Сотни форумов облазил но так и не смог (((

пробовал библиотеки

UTFT

ILI9341

uGFX

MultiLCD

UTFT сразу ~80% памяти съедает

рисую, а картинку не могу

есть картинка в RGB565, как вывести?

виталий_36
Offline
Зарегистрирован: 23.01.2014

Сажите а как Вы фотки выводите без карты памяти ведь они в память не влазят?

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

inhelp пишет:

denis707 пишет:

А когда выйдет статья про крутые часы?

пока занят, скорее всего что на выходные

Чёт уж очень БОЛЬШИЕ выходные... 

Wejur
Offline
Зарегистрирован: 13.06.2015

Привет, ребята. Тже намучался с дисплеем, помогла та самая статья с часами. Не подскажете, как ускорить отрисовку? А конкретнее для Uno/nano. Библиотека - UTFT

ElectroN
Offline
Зарегистрирован: 15.04.2015
Найди в своей библиотеке строку инициализации SPI  -  SPI.begin();
и после нее добавь
    SPI.setClockDivider(SPI_CLOCK_DIV2);
Это даст максимальную возможную скорость шины (частота кристала деленная на 2). Без этой строки делитель 4. В одной из версий библиотек видел вообще 8 - SPI_CLOCK_DIV8.
Если пропадет изображение - дело уже в железе - слишком длинные провода до дисплея или большие номиналы резисторов при резисторном делителе. Или при использовании к561пу4 и подобных - слишком большое время наростания и спада - не держат частоту.
Wejur
Offline
Зарегистрирован: 13.06.2015

ElectroN пишет:

Найди в своей библиотеке строку инициализации SPI  - 
SPI.begin();
и после нее добавь
SPI.setClockDivider(SPI_CLOCK_DIV2);
облазил все папки библиотеки utft, но ничего похожего не нашел
ElectroN
Offline
Зарегистрирован: 15.04.2015

Не используется хардовый SPI? Киньте ссылку на вашу библиотеку

Wejur
Offline
Зарегистрирован: 13.06.2015
ElectroN
Offline
Зарегистрирован: 15.04.2015

Эта библиотека использует софтовый аналог SPI. Работа шины не оптимальна - каждый бит отправляется через несколько команд. Для этой библиотеки ускорить работу нельзя. Как маленький совет - отрисовывать не весь экран, а только мелкие фрагменты - например секкунды без часов и минут (их только при изменении значений).

https://yadi.sk/d/VwSZ2K6RhF4cA  я использую эту библиотеку. Тут используется настоящий SPI. При желании могу по этой библиотеке помогать. К сожалению не вспомню откуда брал. Тут уже мои изменения для скорости внесены

Wejur
Offline
Зарегистрирован: 13.06.2015

ElectroN пишет:
Эта библиотека использует софтовый аналог SPI. Работа шины не оптимальна - каждый бит отправляется через несколько команд. Для этой библиотеки ускорить работу нельзя. Как маленький совет - отрисовывать не весь экран, а только мелкие фрагменты - например секкунды без часов и минут (их только при изменении значений).

https://yadi.sk/d/VwSZ2K6RhF4cA  я использую эту библиотеку. Тут используется настоящий SPI. При желании могу по этой библиотеке помогать. К сожалению не вспомню откуда брал. Тут уже мои изменения для скорости внесены

Ухты! Я догадывался, знаю, что есть аппратный или софтовый режим; Я пишу под Uno и затем переношу на Nano. отрисовывать приходится много. Если не трудно, то подскажите инструкции

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

Какие именно инструкции?

Используемая мной библиотека использует хард SPI, соответственно подключать только к нему. Функцианал библиотека минимален - нет кроме точек практически ничего, но на алгоритмах utft можно допилить и остальное. Я использовал функции заливки, рисовал линии через цикл For, отрисовывал цифры и буквы на дисплее сохраняя их в виде битовой матрицы.

В файле ILI9341.cpp выбрать пины для меги256 или меги328, в процедуре void LCD_ILI9341::begin этого файла можно изменить делитель частоты SPI_CLOCK_DIV2 (2-4-8-16 - чем больше, тем медленнее). Если еще что нужно - обращайтесь.

Запутанный, но все-таки пример работы https://yadi.sk/d/HY9ZmUr1hF77g

Thorn
Offline
Зарегистрирован: 07.11.2014

Досталось (купил суко) это чудо на ИЛИ_9341, сначала радостный воткнул как и прошлый на ST_7735 - а оно нестартует, подсветка 3,3В горит и всё тут. Облазил весь инет и наш форум вдоль и под углом. Нашёл неприятную весчь под названием ЛОГИКА, и думал что нестартанет дисплейчик уже полюбому потому как у ардуинки логика 5В а дисплейчик (наверное .... 3,3В). Ну да ладно... и тут замечаю краем глаза что тестовый скетчик из библы https://learn.adafruit.com/user-space-spi-tft-python-library-ili9341-2-8

Включил ноги:

//=====Tft*
#include "SPI.h"                     //Подключаем библиотеку для использования аппаратного SPI 
#include "Adafruit_GFX.h"            //Core graphics library
#include "Adafruit_ILI9340.h"        //Hardware-specific library
#define _sclk 52
#define _miso 50
#define _mosi 51
#define _cs 44
#define _dc 48
#define _rst 46
// Using software SPI is really not suggested, its incredibly slow
//Adafruit_ILI9340 tft = Adafruit_ILI9340(_cs, _dc, _mosi, _sclk, _rst, _miso);
Adafruit_ILI9340 tft = Adafruit_ILI9340(44, 48, 46);            // Use hardware SPI

и чудо все бежит и меняется и даже БЫСТРО...... очень быстро. 

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

Сделал вывод: суко голимый брак... Окрыл спор с продавцом (хотя смешно из за 240рубёв), отделил матрицу со светиками подсветки и пропаял на всякий случай, результата НОЛЬ. 

 

vov4ik
Offline
Зарегистрирован: 10.09.2013

Закройте спор продавец не виноват что вы купили экран с видео процессором ILI9340, я тоже присматривался к этому экрану посмотрел у многих проблемы с ним, и это не брак самого экрана просто он сам по себе такой.

Thorn
Offline
Зарегистрирован: 07.11.2014

Сегодня забрал 1,4" tft с почты (брал для простенького алкотестера :) ), он на ili9163 и завелся минут через 10 со тсндарной либой https://github.com/sumotoy/TFT_ILI9163C и чутком правкой кода для ног (для Nano)

#define __CS 8
#define __DC 7
#define __RST 9
TFT_ILI9163C tft = TFT_ILI9163C(__CS, __DC, __RST);

Никакой логики в 3,3В на CS непришлось делать (даже резисторами) все ну очнеь быстро и здорово. А вот ili9341 никак неповезло (все нехочется верить что убитый tft приехал :(

Wejur
Offline
Зарегистрирован: 13.06.2015

ElectroN пишет:

В файле ILI9341.cpp выбрать пины для меги256 или меги328

Не особо понял, что там конкретно сделать, распиновка жуткая, LED : D7? чта?

Thorn
Offline
Зарегистрирован: 07.11.2014

Блин блин блин.... Перерыл англоязычнфе форумы... всёже виноват Я сам, непричом дисплейчик :( везде про логику в 3,3В толкуют. нужен конвертер. Однако решил тупо воткнуть ПОСЛЕДОВАТЕЛЬНО в цепи всех пинов (кроме gnd и vcc а также дув питается от 3,33В самого контроллера ардуинки) резистрово по 5,6кОм (других неоказалось для выпайки) и это чудо стартануло.

А все со случайного фото мега"щита" :) для разных tft http://vkitae24.ru/index.php?product=144471&route=catalog при ближайшем расспотрении кроме резюков ничего необнаружил и решил риснуть....

Вот с этим скетчиком вылезли часики + давление и температура :)


#include <Wire.h>                     //Подключаем библиотеку для использования I2C                                     
#include <BMP085.h>                   //Подключаем библиотеку для маленького барометра (темп., абс.высота и атм.давление)

#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"

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

#define _sclk 52                      //Use the hardware SPI pins
#define _miso 50
#define _mosi 51
#define _cs 44
#define _dc 48
#define _rst 46
Adafruit_ILI9341 tft = Adafruit_ILI9341(44, 48, 46);        //Use hardware SPI

uint16_t ccenterx, ccentery;                                //Center x,y of the clock
const uint16_t cradius = 118;                               //Radius of the clock
const float scosConst = 0.0174532925;
float sx = 0, sy = 1, mx = 1, my = 0, hx = -1, hy = 0;
float sdeg = 0, mdeg = 0, hdeg = 0;
uint16_t osx, osy, omx, omy, ohx, ohy;
uint16_t x0 = 0, x1 = 0, yy0 = 0, yy1 = 0;
uint32_t targetTime = 0;                                  //For next 1 second timeout
uint8_t hh, mm, ss;                                       //Containers for current time

//=====Pressure*
BMP085 dps=BMP085();                //Digital Pressure Sensor 
long Temperature=0, Pressure=0, Altitude=0;
unsigned long timeDps=0;

//=====Delays*
unsigned long prvMlsTm=0;           //Предыдущее показание миллисекунд для обновления показания часов
unsigned long prvMlsTimer=0;        //Предыдущее показание обновления таймера
unsigned long prvMlsbLink=0;        //Предыдущее показание миллисекунд для обновления "blink led"
unsigned long tzad=millis();        //Переменная задержки (пока для ds18b20, ds.write)

const long zadTime[]={100,500,750,1000,2000,3000,5000,10000,60000};

//=====Rtc_Clock*
#define DS3231_I2C_ADDRESS 104 
  byte seconds, minutes, hours, day, date, month, year;
  byte decToBcd (byte val){return((val/10*16)+(val%10));}

static uint8_t conv2d(const char* p) {
  uint8_t v = 0;
  if ('0' <= *p && *p <= '9') v = *p - '0';
  return 10 * v + *++p - '0';
}

void setup(){
  Wire.begin();
  dps.init(MODE_STANDARD, 25000, true);               //250 meters, true = using meter units
  tft.begin();
  tft.setTextColor(WHITE, BLACK);
  ccenterx = tft.width() / 2;
  ccentery = tft.height() / 2;
  osx = ccenterx;
  osy = ccentery;
  omx = ccenterx;
  omy = ccentery;
  ohx = ccenterx;
  ohy = ccentery;
  drawClockFace();                                //Draw clock face
}

void drawClockFace(){
  tft.fillCircle(ccenterx, ccentery, cradius, BLUE);
  tft.fillCircle(ccenterx, ccentery, cradius - 3, BLACK);
  for (int i = 0; i < 360; i += 30) {            // Draw 12 lines
    sx = cos((i - 90) * scosConst);
    sy = sin((i - 90) * scosConst);
    x0 = sx * (cradius - 4) + ccenterx;
    yy0 = sy * (cradius - 4) + ccentery;
    x1 = sx * (cradius - 11) + ccenterx;
    yy1 = sy * (cradius - 11) + ccentery;
    tft.drawLine(x0, yy0, x1, yy1, BLUE);
  }
}

void drawClockHands(uint8_t h, uint8_t m, uint8_t s) {              // Pre-compute hand degrees, x & y coords for a fast screen update
  sdeg = s * 6;                            //Time 0-59 -> 0-354
  mdeg = m * 6 + sdeg * 0.01666667;        //Time 0-59 -> 0-360 - includes seconds
  hdeg = h * 30 + mdeg * 0.0833333;        //Time 0-11 -> 0-360 - includes minutes and seconds
  hx = cos((hdeg - 90) * scosConst);
  hy = sin((hdeg - 90) * scosConst);
  mx = cos((mdeg - 90) * scosConst);
  my = sin((mdeg - 90) * scosConst);
  sx = cos((sdeg - 90) * scosConst);
  sy = sin((sdeg - 90) * scosConst);
  hh = hours;
  mm = minutes;
  ss = seconds;
//      if (millis()-targetTime>zadTime[3]){
//      targetTime=millis();
  tft.drawLine(ohx, ohy, ccenterx + 1, ccentery + 1, BLACK);        //Erase just old hand positions
  tft.drawLine(omx, omy, ccenterx + 1, ccentery + 1, BLACK);
  tft.drawLine(osx, osy, ccenterx + 1, ccentery + 1, BLACK);
  // Draw new hand positions
  tft.drawLine(hx * (cradius - 28) + ccenterx + 1, hy * (cradius - 28) + ccentery + 1, ccenterx + 1, ccentery + 1, WHITE);
  tft.drawLine(mx * (cradius - 17) + ccenterx + 1, my * (cradius - 17) + ccentery + 1, ccenterx + 1, ccentery + 1, WHITE);
  tft.drawLine(sx * (cradius - 14) + ccenterx + 1, sy * (cradius - 14) + ccentery + 1, ccenterx + 1, ccentery + 1, RED);
  tft.fillCircle(ccenterx + 1, ccentery + 1, 3, RED);
  osx = sx * (cradius - 14) + ccenterx + 1;          //Update old x&y coords
  osy = sy * (cradius - 14) + ccentery + 1;
  omx = mx * (cradius - 17) + ccenterx + 1;
  omy = my * (cradius - 17) + ccentery + 1;
  ohx = hx * (cradius - 28) + ccenterx + 1;
  ohy = hy * (cradius - 28) + ccentery + 1;
//  }
    tft.setCursor(188, 155);  
  tft.setTextColor(RED, BLACK);
  tft.setTextSize(2);
  if (seconds<10) {tft.print(0);tft.print(seconds);} else {tft.print(seconds);}
}

//=========== Обработка RTC часов
void timeRtc(){
  Wire.beginTransmission(DS3231_I2C_ADDRESS);        //104 is DS3231 device address
  Wire.write(0x00);                                  //Start at register 0
  Wire.endTransmission();
  Wire.requestFrom(DS3231_I2C_ADDRESS, 7);           //Request seven bytes
      if(Wire.available()){ 
    seconds = Wire.read();                           //Get second
    minutes = Wire.read();                           //Get minute
    hours   = Wire.read();                           //Get hour
    day     = Wire.read();
    date    = Wire.read();
    month   = Wire.read();                           //Get month
    year    = Wire.read();
       
    seconds = (((seconds & B11110000)>>4)*10 + (seconds & B00001111));   //Convert BCD to decimal
    minutes = (((minutes & B11110000)>>4)*10 + (minutes & B00001111));
    hours   = (((hours & B00110000)>>4)*10 + (hours & B00001111));       //Convert BCD to decimal (assume 24 hour mode)
    day     = (day & B00000111); // 1-7
    date    = (((date & B00110000)>>4)*10 + (date & B00001111));         //Convert BCD to decimal  1-31
    month   = (((month & B00010000)>>4)*10 + (month & B00001111));       //msb7 is century overflow
    year    = (((year & B11110000)>>4)*10 + (year & B00001111));
  }
}

//=========== Обработка установки RTC часов
void setRtc(byte seconds, byte minutes, byte hours, byte day, byte date, byte month, byte year){
  Wire.beginTransmission(DS3231_I2C_ADDRESS);        //104 is DS3231 device address
  Wire.write(0x00);                                  //Start at register 0
  Wire.write(decToBcd(seconds));
  Wire.write(decToBcd(minutes));
  Wire.write(decToBcd(hours));
  Wire.write(decToBcd(day));
  Wire.write(decToBcd(date));
  Wire.write(decToBcd(month));
  Wire.write(decToBcd(year));
  Wire.endTransmission();
}

void bar(){
    if (timeDps<millis()){                           //Конструкция жуткая и жрущая море ресурсов при расчете вещественных чисел.   
    dps.calcTrueTemperature();
    dps.calcTruePressure(&Pressure);
    timeDps=millis()+1000;}
  dps.getTemperature(&Temperature); 
  dps.getPressure(&Pressure);
  dps.getAltitude(&Altitude);
}

//=========== Обработки печати и вывода на дисплейчик (часы)
void printTime(){
      if (millis()-prvMlsTm>zadTime[3]){                     //Проверяем интервал для обновления часов
      prvMlsTm=millis();                           
  tft.setCursor(188, 155);  
  tft.setTextColor(RED, BLACK);
  tft.setTextSize(2);
  if (seconds<10) {tft.print(0);tft.print(seconds);} else {tft.print(seconds);}
  }
}  

void printDin(){
      if (millis()-prvMlsTimer>zadTime[7]){                     //Проверяем интервал для обновления напряжения
    prvMlsTimer=millis();
    tft.setCursor(80, 85);
  tft.setTextColor(CYAN, BLACK);
  tft.setTextSize(3);
  tft.print(Pressure/133.3,1);
  
  tft.setCursor(80, 205);
  tft.setTextColor(MAGENTA, BLACK);
  tft.print(Temperature*0.1);
  }
}
/*
void printStat(){
        if (millis()-prvMlsTimer>zadTime[6]){                 //Проверяем интервал для обновления 
     prvMlsTimer=millis();
  tft.setCursor(0, 10);
  tft.setTextColor(WHITE);
  tft.setTextSize(2);
  tft.print("Pressure");
  
  tft.setCursor(0, 295);
  tft.print("Temp");
}
}
*/
void loop() {
  timeRtc();
      if (millis()-targetTime>zadTime[3]){
    targetTime=millis();
  hh = hours;
  mm = minutes;
  ss = seconds;
  drawClockHands(hh, mm, ss);}
  bar();
//  printTime();
  printDin();
}

Скетчик из быблы, просто подсунул ему bmp-180 датчик. 

Однако преобразователь с 5В до 3,3В думаю будет более уместен :)

vov4ik
Offline
Зарегистрирован: 10.09.2013

Закройте спор.

Искал для 1.8 нашол для 2.2 мож владельцам этих экранов будет интересно ArduinoTetris 2.2" TFT 240x320 SPI

inhelp
inhelp аватар
Offline
Зарегистрирован: 23.09.2012

vov4ik пишет:

Закройте спор.

Искал для 1.8 нашол для 2.2 мож владельцам этих экранов будет интересно ArduinoTetris 2.2" TFT 240x320 SPI

спасибо, поиграюсь на досуге...

Thorn
Offline
Зарегистрирован: 07.11.2014

Уже закрыл - и фоточки приложил, продавец неплохой почти все для Ардуиняшки у него беру и тут думал грабли,ну да ничево :)