Я строю аналоговые часы на комплекте Wrover ESP32 с TFT LCD с использованием библиотеки TFT_ESPI. Часы отображают правильное время с использованием NTP, но у меня есть проблема с руками: < /p>
Когда руки перемещаются, старая позиция остается видимой (тропы). < /P>
Если я очищаю весь экран и перекрасил фон и текст каждый обновление, это работает, но вызывает мерцание, и мой статический текст разочаровывается. Стереть руки с помощью твердого цвета. < /p>
Вот упрощенная версия моего кода, которая воспроизводит проблему: < /p>
#include
#include
#include
TFT_eSPI tft = TFT_eSPI();
#define CENTER_X 50
#define CENTER_Y 60
#define RADIUS 50
#define HOUR_LENGTH 10
#define MINUTE_LENGTH 20
const char* ssid = "Dina";
const char* password = "Dd78134003Segco";
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 12600; // ایران +3:30
const int daylightOffset_sec = 0;
int lastMinute = -1;
// draw clock hand as triangle
void drawHandTriangle(int length, float angleRad, uint16_t color, int width) {
float cosA = cos(angleRad);
float sinA = sin(angleRad);
int xTip = CENTER_X + cosA * length;
int yTip = CENTER_Y + sinA * length;
int xLeft = CENTER_X + cos(angleRad + 1.57) * width;
int yLeft = CENTER_Y + sin(angleRad + 1.57) * width;
int xRight = CENTER_X + cos(angleRad - 1.57) * width;
int yRight = CENTER_Y + sin(angleRad - 1.57) * width;
tft.fillTriangle(xTip, yTip, xLeft, yLeft, xRight, yRight, color);
}
void drawClockFace() {
tft.fillScreen(TFT_BLACK);
for (int h = 0; h < 12; h++) {
float angle = (h * 30 - 90) * 0.0174533;
int x0 = CENTER_X + cos(angle) * (RADIUS - 3);
int y0 = CENTER_Y + sin(angle) * (RADIUS - 3);
int x1 = CENTER_X + cos(angle) * RADIUS;
int y1 = CENTER_Y + sin(angle) * RADIUS;
tft.drawLine(x0, y0, x1, y1, TFT_WHITE);
}
for (int h = 1; h
Вопрос:
Как я могу обновить только руки сверху статического фонового изображения и текста, не оставляя тропинок и не вызывая мерцание? < /p>
Подробнее здесь: https://stackoverflow.com/questions/797 ... with-esp32
Как предотвратить аналоговые часы не оставить тропы на ЖК -дисплеев TFT с ESP32 ⇐ C++
Программы на C++. Форум разработчиков
1757665561
Anonymous
Я строю аналоговые часы на комплекте Wrover ESP32 с TFT LCD с использованием библиотеки TFT_ESPI. Часы отображают правильное время с использованием NTP, но у меня есть проблема с руками: < /p>
Когда руки перемещаются, старая позиция остается видимой (тропы). < /P>
Если я очищаю весь экран и перекрасил фон и текст каждый обновление, это работает, но вызывает мерцание, и мой статический текст разочаровывается. Стереть руки с помощью твердого цвета. < /p>
Вот упрощенная версия моего кода, которая воспроизводит проблему: < /p>
#include
#include
#include
TFT_eSPI tft = TFT_eSPI();
#define CENTER_X 50
#define CENTER_Y 60
#define RADIUS 50
#define HOUR_LENGTH 10
#define MINUTE_LENGTH 20
const char* ssid = "Dina";
const char* password = "Dd78134003Segco";
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 12600; // ایران +3:30
const int daylightOffset_sec = 0;
int lastMinute = -1;
// draw clock hand as triangle
void drawHandTriangle(int length, float angleRad, uint16_t color, int width) {
float cosA = cos(angleRad);
float sinA = sin(angleRad);
int xTip = CENTER_X + cosA * length;
int yTip = CENTER_Y + sinA * length;
int xLeft = CENTER_X + cos(angleRad + 1.57) * width;
int yLeft = CENTER_Y + sin(angleRad + 1.57) * width;
int xRight = CENTER_X + cos(angleRad - 1.57) * width;
int yRight = CENTER_Y + sin(angleRad - 1.57) * width;
tft.fillTriangle(xTip, yTip, xLeft, yLeft, xRight, yRight, color);
}
void drawClockFace() {
tft.fillScreen(TFT_BLACK);
for (int h = 0; h < 12; h++) {
float angle = (h * 30 - 90) * 0.0174533;
int x0 = CENTER_X + cos(angle) * (RADIUS - 3);
int y0 = CENTER_Y + sin(angle) * (RADIUS - 3);
int x1 = CENTER_X + cos(angle) * RADIUS;
int y1 = CENTER_Y + sin(angle) * RADIUS;
tft.drawLine(x0, y0, x1, y1, TFT_WHITE);
}
for (int h = 1; h
Вопрос:
Как я могу обновить только руки сверху статического фонового изображения и текста, не оставляя тропинок и не вызывая мерцание? < /p>
Подробнее здесь: [url]https://stackoverflow.com/questions/79762680/how-to-prevent-analog-clock-hands-from-leaving-trails-on-tft-lcd-with-esp32[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия