По просьбе в коментариях в ютубе выкладываю скетч( в общем-то, заготовки).
/* В общем-то готовая программа стрелочных часиков. Переделал скетч из интернета
* http://arduino-project.net/analog-clock-arduino-mega/
*/
//Подключение библиотек
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <TFT_ILI9163C.h>
#include <DS3231.h>//
#include <Wire.h>//
DS3231 rtc(SDA, SCL);//Что-то про часики
Time t;
// Color definitions
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define MARENGO 0x4C5866//Это я добавил цвет маренго.Ни че так фончик.
#define WHITE 0xFFFF
#define __CS 10
#define __DC 8
TFT_ILI9163C tft = TFT_ILI9163C(__CS, __DC);
//Центральные координаты для рисования стрелочных часов
int clockCenterX=64;//Центр экрана (поправил по своему размеру)
int clockCenterY=64;//Центр экрана (поправил по своему размеру)
int oldsec=0;
byte cradius=64;
void setup(){
tft.begin();
//tft.setRotation(1);//Поворачиваем экран на 90 град.
rtc.begin();//Инициализируем часики
tft.setTextSize(2);//Пока этор размер шрифта
pinMode(12, OUTPUT);
pinMode(7, OUTPUT);
digitalWrite(12, HIGH);
/*Для установки времени, введите ваши параметры и
раскомментируйте 3 строки ниже и загрузите скетч
на ардуино,а потом назад закомментируйте обратно*/
//rtc.setTime(22, 25,0);
//rtc.setDate(19,10, 2015);
//rtc.setDOW(MONDAY);
}
void drawDisplay()//Функция как понимаю рисует дисплей
{
// Очистка дисплея
tft.clearScreen(BLACK);//Пока не знаю зачем, видимо очищает весь экран и делает его черным
//ДАЛЕЕ ЗАКОМЕНТИРОВАННЫЙ КУСОК, ПОКА НЕ ИСПОЛЬЗОВАЛ
//Отображение текущей даты
//tft.setCursor(0,0);
//tft.setTextColor(CYAN);//Пробуем задать цвет текста
//tft.print(String(rtc.getDateStr()));//Пишем дату
//Отображение дня недели
//tft.setCursor(0,0);
//tft.setTextColor(RED);
//tft.print(rtc.getDOWStr());
// Рисуем циферблат
tft.fillCircle(clockCenterX, clockCenterY, cradius, GREEN);//Рисуем сплошной
// круг зеленого цвета радиусом cradius
tft.fillCircle(clockCenterX, clockCenterY, cradius-2, MARENGO);//Рисуем сплошной
//круг цветом фона. Получаем окружность
tft.fillCircle(clockCenterX, clockCenterY, 4, GREEN);//Рисуем внутренний кружочек
tft.fillCircle(clockCenterX, clockCenterY, 2, BLACK);//Рисуем в в нем дырочку
tft.fillCircle(clockCenterX, clockCenterY, 1, GREEN);//Рисуем ось
//Отображаем числа на циферблате
tft.setTextColor(YELLOW);
tft.setCursor(clockCenterX+52,clockCenterY-6);
tft.print("3");
tft.setCursor(clockCenterX-5,clockCenterY+48);
tft.print("6");
tft.setCursor(clockCenterX-60,clockCenterY-6);
tft.print("9");
tft.setCursor(clockCenterX-12,clockCenterY-61);
tft.print("12");//Кружочек с цифирками нарисовали!!!!
//Рисуем метки часов в виде рысочек
for (int i=0; i<12; i++)
{
if ((i % 3)!=0)//исключаем рисочки где стоят циферки
drawMark(i);//Идем на функцию, которая рисует рисочки между цифрами
}
t = rtc.getTime();//Получаем время с RTC
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;
//Дальше в формулах были цифры 55,55,50,50.....было красиво
x1=59*cos(h*0.0175);//Если сделать первую цифру, например, 55, то рисочки не будут
y1=59*sin(h*0.0175);//доставать до окружности циферблата....красиво
x2=52*cos(h*0.0175);//Здесь можно поиграть с длиной
y2=52*sin(h*0.0175);// рисочек
tft.drawLine(int (x1)+clockCenterX, int (y1)+clockCenterY, int (x2)+clockCenterX, int (y2)+clockCenterY,YELLOW);
Serial.println("str 110");
}
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=45*cos(ps*0.0175);//Параметры для секундной стрелки
y1=45*sin(ps*0.0175);//вроде бы оптимальные
x2=6*cos(ps*0.0175);//может только посмотреть
y2=6*sin(ps*0.0175);//не портит ли внутренний кружочек
tft.drawLine(int (x1+clockCenterX), int (y1+clockCenterY), int (x2+clockCenterX), int (y2+clockCenterY),MARENGO);
s=s*6;
s=s+270;
x1=45*cos(s*0.0175);
y1=45*sin(s*0.0175);
x2=6*cos(s*0.0175);
y2=6*sin(s*0.0175);
tft.drawLine(int (x1+clockCenterX), int (y1+clockCenterY), int (x2+clockCenterX), int (y2+clockCenterY),YELLOW);
digitalWrite(7, HIGH);
delayMicroseconds(1);
digitalWrite(7, LOW);
}
void drawMin(int m)//отрисовка минутной стрелки
{
float x1, y1, x2, y2, x3, y3, x4, y4;
int pm = m-1;//Вычисляем прошлую минуту
//tft.setColor(0, 0, 0);
if (pm==-1)//Приводим к нормальному виду, если надо
pm=59;
pm=pm*6;
pm=pm+270;
x1=47*cos(pm*0.0175);//Длина стрелки 48 вроде 48 лучше
y1=47*sin(pm*0.0175);//Длина стрелки 48
x2=6*cos(pm*0.0175);//было 5
y2=6*sin(pm*0.0175);//было 5
x3=30*cos((pm+8)*0.0175);//было 28 4 8
y3=30*sin((pm+8)*0.0175);//было 28 4 8
x4=30*cos((pm-8)*0.0175);//было 28 4 8
y4=30*sin((pm-8)*0.0175);//было 28 4
tft.drawLine(int (x1+clockCenterX), int (y1+clockCenterY), int (x3+clockCenterX), int (y3+clockCenterY),MARENGO);
tft.drawLine(int (x3+clockCenterX), int (y3+clockCenterY), int (x2+clockCenterX), int (y2+clockCenterY),MARENGO);
tft.drawLine(int (x2+clockCenterX), int (y2+clockCenterY), int (x4+clockCenterX), int (y4+clockCenterY),MARENGO);
tft.drawLine(int (x4+clockCenterX), int (y4+clockCenterY), int (x1+clockCenterX), int (y1+clockCenterY),MARENGO);
m=m*6;
m=m+270;
x1=47*cos(m*0.0175);//48 РАЗОБРАТЬСЯ С ФОРМОЙ СТРЕЛОК
y1=47*sin(m*0.0175);//48
x2=6*cos(m*0.0175);
y2=6*sin(m*0.0175);
x3=30*cos((m+8)*0.0175);//28 4 Это вроде как толщину определяет
y3=30*sin((m+8)*0.0175);//28 4
x4=30*cos((m-8)*0.0175);//28 4
y4=30*sin((m-8)*0.0175);//28 4
tft.drawLine(int (x1+clockCenterX), int (y1+clockCenterY), int (x3+clockCenterX), int (y3+clockCenterY),YELLOW);
tft.drawLine(int (x3+clockCenterX), int (y3+clockCenterY), int (x2+clockCenterX), int (y2+clockCenterY),YELLOW);
tft.drawLine(int (x2+clockCenterX), int (y2+clockCenterY), int (x4+clockCenterX), int (y4+clockCenterY),YELLOW);
tft.drawLine(int (x4+clockCenterX), int (y4+clockCenterY), int (x1+clockCenterX), int (y1+clockCenterY),YELLOW);
}
void drawHour(int h, int m)//отрисовка часовой стрелки
{
float x1, y1, x2, y2, x3, y3, x4, y4;
int ph = h;
if (m==0)
{
ph=((ph-1)*30)+((m+59)/2);
}
else
{
ph=(ph*30)+((m-1)/2);
}
ph=ph+270;
x1=36*cos(ph*0.0175);//38
y1=36*sin(ph*0.0175);
x2=6*cos(ph*0.0175);
y2=6*sin(ph*0.0175);
x3=20*cos((ph+12)*0.0175);//5 Вроде как толщина стрелок
y3=20*sin((ph+12)*0.0175);//5
x4=20*cos((ph-12)*0.0175);//5
y4=20*sin((ph-12)*0.0175);//5
tft.drawLine(int (x1+clockCenterX), int (y1+clockCenterY), int (x3+clockCenterX), int (y3+clockCenterY),MARENGO);
tft.drawLine(int (x3+clockCenterX), int (y3+clockCenterY), int (x2+clockCenterX), int (y2+clockCenterY),MARENGO);
tft.drawLine(int (x2+clockCenterX), int (y2+clockCenterY), int (x4+clockCenterX), int (y4+clockCenterY),MARENGO);
tft.drawLine(int (x4+clockCenterX), int (y4+clockCenterY), int (x1+clockCenterX), int (y1+clockCenterY),MARENGO);
h=(h*30)+(m/2);
h=h+270;
x1=36*cos(h*0.0175);
y1=36*sin(h*0.0175);
x2=6*cos(h*0.0175);
y2=6*sin(h*0.0175);
x3=20*cos((h+12)*0.0175);//20 5 10
y3=20*sin((h+12)*0.0175);//20 5 10
x4=20*cos((h-12)*0.0175);//20 5 10
y4=20*sin((h-12)*0.0175);//20 5 10
tft.drawLine(int (x1+clockCenterX), int (y1+clockCenterY), int (x3+clockCenterX), int (y3+clockCenterY),YELLOW);
tft.drawLine(int (x3+clockCenterX), int (y3+clockCenterY), int (x2+clockCenterX), int (y2+clockCenterY),YELLOW);
tft.drawLine(int (x2+clockCenterX), int (y2+clockCenterY), int (x4+clockCenterX), int (y4+clockCenterY),YELLOW);
tft.drawLine(int (x4+clockCenterX), int (y4+clockCenterY), int (x1+clockCenterX), int (y1+clockCenterY),YELLOW);
}
void loop()//основной цикл работы стрелочных часов
{
int x, y;
t = rtc.getTime();
drawDisplay();//Вызываем функцию
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);
}
drawSec(t.sec);
oldsec=t.sec;
}
delay(10);
t = rtc.getTime();
}
}
Может еще кому-то пригодится. Ссылка на видео с часиками выше в этой теме.
На 1.0r4 не советую сидеть, есть некоторые проблемы.
там же есть и шрифты, я себе сделал необходимый для себя, могу сбросить. Выглядит относительно нормально (Arial, 18 пикселей в высоту против 9 у стандартного)
Так же не советовал бы использовать функцию setFont(), так как при использовании данной функции загружаются в память стандартный и ваш шрифт +ещё неизвестно куда исчезает куча памяти. Лучшими вариантом я посчитал заменить в папке fonts файл с шрифтом и использовать так. Шрифт 18 пикселей в высоту у меня занял в двое меньше места чем подключенный отдельно 8px.
Если кому интересно могу поподробнее описать как подключаются шрифты и как можно заменить стандартный.
Для начала необходима версия библиотеки не ниже 1.0r4, ниже - не поддерживают этой функции.
В папке с библиотекой ILI9163C есть папка __fonts в которой находится пара-тройка шрифтов от автора библиотеки. Там находим название шрифта которого мы ходим и копируем название. В данном случае это unborn_small
#include <SPI.h>
#include <TFT_ILI9163C.h>
#include "_fonts/unborn_small.c"//Устанавливаем адрес шрифта, полагаясь на то что ILI9163C - наша коренная папка
#define __CS 10
#define __DC 6
#define __RST 8
TFT_ILI9163C tft = TFT_ILI9163C(__CS, __DC, __RST);
void setup() {
tft.begin();
//Перед названием шрифта прописываем обязательно &
tft.setFont(&unborn_small);//Установка шрифта, единоразово в setup
tft.println("Hello world!");
}
void loop() {
}
Но я бы советовал делать несколько иначе. Зайти в папку __fonts удалить шрифт arial_x2.c открыть любой другой шрифт и заменить все названия шрифта, допустим square_small на arial_x2.
В папке с библиотекой ILI9163C есть папка __fonts в которой находится пара-тройка шрифтов от автора библиотеки. Там находим название шрифта которого мы ходим и копируем название. В данном случае это unborn_small
в общем то тоже так и делал...вот с памятью точно беда, половину библиотеки просто закомментил, чтоб в рамки разумного влезть, но всеровно много жрет...
Я конечно не углублялся, но вроде как память используется только когда вызывается функция, могу ошибаться. Если у вас изменилось количество памяти, напишите пожалуйста.
Я дальше в своём посте написал как можно сократить размер путём замены шрифта вместо подключения, и попробуйте ещё вырезать лишние символы.
Возможно проблема в кодировке. Можно соорудить костыль, шрифт оставить английским, но нарисовать русские символы и на php или js сверстать страницу которая будет переводить текст из нормального в костыльный.
У меня обновлялся заметно и еще моргала подсветка из-за wifi и я просто забил на дисплей. Но не секунду.
В библиотеке я spi менял, но видимо не там, так как он все равно работал на стандартных пинах.... хм или может я не перезапустил оболочку....
Вобщем дисплей нормальный, но обновление действительно заметно происходит.
Суть до смеха проста! мне нужно обновлять секунды каждую секунду) однако если обновлять каждую секунду, ни для кого не секрет, что видны сильные моргания дисплея. Так как фон экрана у меня черный, я рисую закрашенный черным цветом квадрат :
if (second != oldTimeSec)
{
oldTimeSec= second;
display.fillRect(56, 18, 13, 11,BLACK);
if (second >= 10) display.setCursor(58, 22);
else display.setCursor(60, 22);
display.setTextColor(WHITE);
display.setTextSize(1);
display.print(second);
//display.fillRect(56, 18, 14, 12,WHITE);
}
и каждую секунду отрисовываю сначала квадрат(тем самым стираяя выведенную ранее информацию), а затем second из часов.
Я пробывал почти также. При выводе вольтметра. Рисовал цифры, потом рисовал их же чёрным, потом рисовал новые. Так вот экран заметно мерцал. Как сделать, чтобы вообще без бликов?
Возможно блики - именно блики подсветки, от просадки по питанию. У меня блики были когда вайфай модули и дисплей от ардуино питались. Вай фай давал помехи.
Я пробывал почти также. При выводе вольтметра. Рисовал цифры, потом рисовал их же чёрным, потом рисовал новые. Так вот экран заметно мерцал. Как сделать, чтобы вообще без бликов?
Я сделал как вы написали, выводил сначала белым переменную, потом черным, получается херня, реально работает закрашивание и отрисовка определенного квадрата, причем за раз желательно не огромной области.
Думал, сперва так и делал. У меня не секунды, у меня вольты. Проблема в том, что цифры рисует медленно, фактически построчно. Как заставить выводить число разом? Выше на видео очень чётко видно как это выглядит.
Кстати разницы между квадратом и числом не заметил.
Попробую как нибудь заснять в слоу-моу, там думаю хорошо будет видно.
А так, это проблемы ардуины и атмега328. Юзайте teensy 3.0/3.2, там все мгновенно
А у меня отличие было, потому квадрат. И не понимаю что тут кошерного? Делается одной командой, функцию свою выполняет, занимает места ровно столько же сколько само число.
ребят не ломайте голову себе и людям, все на много проще, чем рисование квадратов и тд, я использую функцию
tft.setTextColor(цвет фона, цвет фона);
tft.println(old_text);
а вообще чтоб было проще выводить все параметры сразу, одной строкой, написал функцию
//====================================================
// Работа с текстом
//====================================================
//void Write_Text(старый текст,новый текст,заменять текст , координата "x" текста , координата "y" текста , цвет старого текста , цвет нового текста , размер текста , изменять фон текста , цвет фона старого текста , цвет фона нового текста)
void Write_Text(String old_text, String new_text, bool replace_text, byte x_text, byte y_text, uint16_t color_old_text, uint16_t color_new_text, uint8_t TextSize_x, uint8_t TextSize_y , bool replace_bckgnd_text, uint16_t old_color_bckgnd_text, uint16_t color_bckgnd_text )
{
//if (TextSize_x != 0 && TextSize_y != 0)
tft.setTextSize(TextSize_x, TextSize_y);
if (replace_text == true) {
tft.setTextColor(color_old_text, old_color_bckgnd_text);
tft.println(old_text);
if (replace_bckgnd_text == true) tft.setTextColor(color_new_text, color_bckgnd_text);
else tft.setTextColor(color_new_text);
tft.setCursor(x_text, y_text);
tft.println(new_text);
} else {
if (replace_bckgnd_text == true) tft.setTextColor(color_new_text, color_bckgnd_text);
else tft.setTextColor(color_new_text);
tft.setCursor(x_text, y_text);
tft.println(new_text);
}
}
//====================================================
хотел упростить все это дело, но как то руки не дошли, поэтому попробуйте так, может что измените сами, пишите...
Функции конечно хорошо, но я не вижу смысла ради этого использовать функцию, столько писанины ради этого-шкурка выделки не стоит. Отрисовывать старый текст проще инвертированный, но его нужно хранить в переменной дополнительной... а вот одной командой отрисовать квадрат самое простое, мне для отображения секунд большего не надо.
nasol kak praviljno dinamiceskij tekst vivoditj!!! osibka v tom sto nado zakrasivatj kvadrat neposredstvenno pered komandoj (print),togda mercaet ele zametno toljko esli cifri stojat na meste!!!!!! i osibka v podkljuceniji
Я уже раз 10 отвечал на вопрос в разных форумах , Почему часть дисплея не видна. Ответ: скорее всего у вас дисплей на черной плате, зайдите в файлы библиотеки и в settings укажите, что плата черная. И никаких rotation не нужно и все прекрасно работает
Я уже раз 10 отвечал на вопрос в разных форумах , Почему часть дисплея не видна. Ответ: скорее всего у вас дисплей на черной плате, зайдите в файлы библиотеки и в settings укажите, что плата черная. И никаких rotation не нужно и все прекрасно работает
причем сдесь "часть дисплея невидна?", настройки либы сделаны нормально, текст, графику и т.д. показывает нормально, у меня только вопрос по отображению картинок с флешки!
И еще раз, примеры, графика, текст показывает нормально! в полный экран без косяков!
Нашёл следующий комментарий:
По просьбе в коментариях в ютубе выкладываю скетч( в общем-то, заготовки).
Может еще кому-то пригодится. Ссылка на видео с часиками выше в этой теме.
Впрочем даю еще разок https://www.youtube.com/watch?v=MjywhTycwVk&feature=youtu.be
Joiner, а со шрифтами не поможешь?
Joiner, а со шрифтами не поможешь?
Извини, я в этом не "копенгаген". Сам бы хотел разобраться, но пока не получается :(
Ребят, на днях могу вам подогнать шрифт с Кирилицей, но для этого вам нужно будет перебраться на новую версию библиотеки
https://github.com/sumotoy/TFT_ILI9163C/tree/Pre-Release-1.0r5
На 1.0r4 не советую сидеть, есть некоторые проблемы.
там же есть и шрифты, я себе сделал необходимый для себя, могу сбросить. Выглядит относительно нормально (Arial, 18 пикселей в высоту против 9 у стандартного)
Так же не советовал бы использовать функцию setFont(), так как при использовании данной функции загружаются в память стандартный и ваш шрифт +ещё неизвестно куда исчезает куча памяти. Лучшими вариантом я посчитал заменить в папке fonts файл с шрифтом и использовать так. Шрифт 18 пикселей в высоту у меня занял в двое меньше места чем подключенный отдельно 8px.
Если кому интересно могу поподробнее описать как подключаются шрифты и как можно заменить стандартный.
SpearMint, напиши, пожалуйста, поподробней как другой шрифт включить взамен "класического".
Для начала необходима версия библиотеки не ниже 1.0r4, ниже - не поддерживают этой функции.
В папке с библиотекой ILI9163C есть папка __fonts в которой находится пара-тройка шрифтов от автора библиотеки. Там находим название шрифта которого мы ходим и копируем название. В данном случае это unborn_small
Но я бы советовал делать несколько иначе. Зайти в папку __fonts удалить шрифт arial_x2.c открыть любой другой шрифт и заменить все названия шрифта, допустим square_small на arial_x2.
То есть вместо
Мы получим
Так у нас выйдет сэкономить ценную память для программы.
Если вдруг кому нужен шрифт более красивый, даю ссылку на dropbox
https://www.dropbox.com/s/wyz9w5tgl6lfpsd/arial_x2.c?dl=0
Просто замените старый файл arial_x2.c на новый в папке __fonts в папке с библиотекой.
Шрифт немного урезал, доступны следующие символы:
!./\?0123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
На днях добавлю шрифт с кириллицей. Если правда получится его сделать.
Ребят, на днях могу вам подогнать шрифт с Кирилицей........................................
Если кому интересно могу поподробнее описать как подключаются шрифты и как можно заменить стандартный.
Очень интересно. Напиши, ждем с нетерпением. У меня 5 штук таких дисплеев, хотелось бы освоить в полной мере.
SpearMint, огромннейшее человеческое спасибо!!!
В папке с библиотекой ILI9163C есть папка __fonts в которой находится пара-тройка шрифтов от автора библиотеки. Там находим название шрифта которого мы ходим и копируем название. В данном случае это unborn_small
в общем то тоже так и делал...вот с памятью точно беда, половину библиотеки просто закомментил, чтоб в рамки разумного влезть, но всеровно много жрет...
Я конечно не углублялся, но вроде как память используется только когда вызывается функция, могу ошибаться. Если у вас изменилось количество памяти, напишите пожалуйста.
Я дальше в своём посте написал как можно сократить размер путём замены шрифта вместо подключения, и попробуйте ещё вырезать лишние символы.
в предыдущей версии мне удалось сэкономить 2.5 килобайта, так как совсем впритык было....я в общем то убрал те функции, которые не использую...
Короче я смог подключить и шрифты из Adafruit_GFX, но с библиотекой Release 1.0r5 они сработали. Запустил вот с этой
https://github.com/sumotoy/TFT_ILI9163C
бля ни как не получается с русскими шрифтами,попробовал создать свой шрифт, но когда скетч загружается, только черный экран и все...
Возможно проблема в кодировке. Можно соорудить костыль, шрифт оставить английским, но нарисовать русские символы и на php или js сверстать страницу которая будет переводить текст из нормального в костыльный.
Подскажите пожалуйста, никак не допру, а как назначить SCK и SDA ?
т.е. чтобы не на 11 и 13 пине были а на других?
Можно в библиотеке поменять. Но тогда SPI у Вас будет программный, а не аппаратный, что значительно медленнее.
В библиотеке исправьте тип платы в файле .h : тип платы black и red выберите свой
Что в итоге-то вы нашли способ обновляться дисплей нормально? у меня пины по дефолту, а обновляется секунду целую...
У меня обновлялся заметно и еще моргала подсветка из-за wifi и я просто забил на дисплей. Но не секунду.
В библиотеке я spi менял, но видимо не там, так как он все равно работал на стандартных пинах.... хм или может я не перезапустил оболочку....
Вобщем дисплей нормальный, но обновление действительно заметно происходит.
А можно переделанный код глянуть у вас?)
поменял на 6 и 7 пин в этом куске
Ребят, если кому интересно, я нашёл способ выводить динамическую индикацию, не обновляя дисплей.
Конечно же интересно. Как получить информацию? Пиши.
Суть до смеха проста! мне нужно обновлять секунды каждую секунду) однако если обновлять каждую секунду, ни для кого не секрет, что видны сильные моргания дисплея. Так как фон экрана у меня черный, я рисую закрашенный черным цветом квадрат :
if (second != oldTimeSec)
Я пробывал почти также. При выводе вольтметра. Рисовал цифры, потом рисовал их же чёрным, потом рисовал новые. Так вот экран заметно мерцал. Как сделать, чтобы вообще без бликов?
Ну вот по примеру, который я показал, нет бликов вообще
Возможно блики - именно блики подсветки, от просадки по питанию. У меня блики были когда вайфай модули и дисплей от ардуино питались. Вай фай давал помехи.
Я пробывал почти также. При выводе вольтметра. Рисовал цифры, потом рисовал их же чёрным, потом рисовал новые. Так вот экран заметно мерцал. Как сделать, чтобы вообще без бликов?
Я сделал как вы написали, выводил сначала белым переменную, потом черным, получается херня, реально работает закрашивание и отрисовка определенного квадрата, причем за раз желательно не огромной области.
Попробовал с квадратом. Тоже самое.
Вот такая штука выходит https://vk.com/video19348861_171793895
Как убрать мерцание?
Попробовал с квадратом. Тоже самое.
Вот такая штука выходит https://vk.com/video19348861_171793895
Как убрать мерцание?
Так ты покажи что ты за код то написал, как подсказать?? для начала обнови библиотеку до ревизии хотябы 4-5
Код вот
Код вот
попробуй добавить задержку между итерациями еще
Библиотека дисплея у меня последняя от sumotoy. Суть проблемы в том, что цифры отресовывает построчно, с ощутимой задержкой.
Как сделать, чтобы рисовал всю цифру сразу?
Не у кого такой проблемы нет?
Библиотека дисплея у меня последняя от sumotoy. Суть проблемы в том, что цифры отресовывает построчно, с ощутимой задержкой.
Как сделать, чтобы рисовал всю цифру сразу?
Не у кого такой проблемы нет?
тут уже было написано выше, что предыдущая версия библиотеки работает быстрее, чем последняя
Попробовал 2 библиотеки TFT_ILI9163C-Pre-Release-1.0r5 и r4
Ситуация та же, вдобавок не хочет работать со шрифтами из Adafruit_GFX и мерцает весь экран, ане только текст.
Если использовать встроенный шрифт, то мерцание гораздо быстрее, но всё равно заметно глазу.
Вы не думали о том что квадрат это чересчур кошерно? Можно же прошлую секунду отрисовывать, тоесть цифру
Думал, сперва так и делал. У меня не секунды, у меня вольты. Проблема в том, что цифры рисует медленно, фактически построчно. Как заставить выводить число разом? Выше на видео очень чётко видно как это выглядит.
Кстати разницы между квадратом и числом не заметил.
Попробую как нибудь заснять в слоу-моу, там думаю хорошо будет видно.
А так, это проблемы ардуины и атмега328. Юзайте teensy 3.0/3.2, там все мгновенно
А у меня отличие было, потому квадрат. И не понимаю что тут кошерного? Делается одной командой, функцию свою выполняет, занимает места ровно столько же сколько само число.
ребят не ломайте голову себе и людям, все на много проще, чем рисование квадратов и тд, я использую функцию
tft.setTextColor(цвет фона, цвет фона);
tft.println(old_text);
а вообще чтоб было проще выводить все параметры сразу, одной строкой, написал функцию
хотел упростить все это дело, но как то руки не дошли, поэтому попробуйте так, может что измените сами, пишите...
cannibal66670, а можно по подробней? Или кусок живого примера?
Функции конечно хорошо, но я не вижу смысла ради этого использовать функцию, столько писанины ради этого-шкурка выделки не стоит. Отрисовывать старый текст проще инвертированный, но его нужно хранить в переменной дополнительной... а вот одной командой отрисовать квадрат самое простое, мне для отображения секунд большего не надо.
Наткнулся на интересный обзор по этому экрану. Может кому интересно будет
https://www.youtube.com/watch?v=1GEdd-N3GR0
nasol kak praviljno dinamiceskij tekst vivoditj!!! osibka v tom sto nado zakrasivatj kvadrat neposredstvenno pered komandoj (print),togda mercaet ele zametno toljko esli cifri stojat na meste!!!!!! i osibka v podkljuceniji
Код вот
Здраствуйте, сижу голову ломаю, как картинку с флешки вывести на экран, есть файл bmp парамерты 24 бита, как и требуется,
библиотека TFT_ILI9163C-Pre-Release-1.0r5
дисплей такой :#define __144_BLACK_PCB__//128x128 , черный короче
ардуина mega2560
скетч:
ничего особенного, из примеров библиотеки.
Получается вот это(((
Кто пробовал выводить на экран картинки?? или это библиотека кривая или руки неоттуда растут))
Сама флешка работает с ардуиной, пробовал писать и считывать файлы, нормально все...
Я уже раз 10 отвечал на вопрос в разных форумах , Почему часть дисплея не видна. Ответ: скорее всего у вас дисплей на черной плате, зайдите в файлы библиотеки и в settings укажите, что плата черная. И никаких rotation не нужно и все прекрасно работает
причем сдесь "часть дисплея невидна?", настройки либы сделаны нормально, текст, графику и т.д. показывает нормально, у меня только вопрос по отображению картинок с флешки!
И еще раз, примеры, графика, текст показывает нормально! в полный экран без косяков!