Иногда полезно прямо по ролику из Ютуба
Немного переделать и рисовалка готова…Иногда подглючивает сенсорный экран и появляются артефакты, поэтому нужна стирашка как опция.
Вот я тоже такой. Когда нечего делать - сразу к звёздам. Причём, желательно, через альпы тернии.
Аналоговнет
//рисовалка семицветная со стирашкой
#include "Adafruit_GFX.h" // Библиотека обработчика графики
#include "Adafruit_ILI9341.h" // Программные драйвера для дисплеев ILI9341
#include "URTouch.h" // Библиотека для работы с сенсорным экраном
#define TFT_DC 9 // Пин подключения вывода D/C дисплея
#define TFT_CS 10 // Пин подключения вывода CS дисплея
#define TFT_RST 8 // Пин подключения вывода RESET
// Uno Hardware SPI
#define TFT_MISO 12 // Пин подключения вывода дисплея SDO(MISO)
#define TFT_MOSI 11 // Пин подключения вывода дисплея SDI(MOSI)
#define TFT_CLK 13 // Пин подключения вывода дисплея SCK
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO); // Создаем объект дисплея и сообщаем библиотеке распиновку для работы с графикой
#define t_SCK 3 // Пин подключения вывода дисплея T_CLK
#define t_CS 4 // Пин подключения вывода дисплея T_CS
#define t_MOSI 5 // Пин подключения вывода дисплея T_DIN
#define t_MISO 6 // Пин подключения вывода дисплея T_DOUT
#define t_IRQ 7 // Пин подключения вывода дисплея T_IRQ
URTouch ts(t_SCK, t_CS, t_MOSI, t_MISO, t_IRQ); // Создаем объект сенсорного модуля и сообщаем библиотеке распиновку для работы с ним
int x0 = 0, y0 = 21;
uint16_t color = tft.color565(0, 0, 0);
byte flag = 0; //
void setup() {
tft.begin(); // Инициализируем начало работы с графическим дисплеем
tft.setRotation(1); // Переводим дисплей в альбомную ориентацию
ts.InitTouch(); // Инициализируем сенсорный модуль дисплея
ts.setPrecision(PREC_EXTREME); // Определяем необходимую точность обработки нажатий: PREC_LOW - низкая, PREC_MEDIUM - средняя, PREC_HI - высокая, PREC_EXTREME - максимальная
tft.fillScreen(ILI9341_BLACK);
//
tft.fillRect(0, 5, 319, 12, tft.color565(75, 75, 75) );
for (int i = 1; i < 8; i++) {
tft.fillCircle(30 * i, 10, 10, tft.color565(255 * (i % 2), 255 * ((i / 2) % 2), 255 * ((i / 4) % 2)) ); //строка кнопок - отрисовка
}
tft.drawCircle(250, 10, 10, tft.color565(255, 255, 255) );
tft.drawCircle(290, 10, 10, tft.color565(255, 0, 0) );
//
}
void loop()
{
int x, y; // Переменные для работы с координатами нажатий
while (ts.dataAvailable()) // Пока имеются данные с сенсорного модуля
{
ts.read(); // Считываем с него данные
x = ts.getX(); // Считываем координату нажатия X
y = ts.getY(); // Считываем координату нажатия Y
if ((x != -1) && (y != -1)) // Если обе координаты в положительном диапазоне (т.е. если есть нажатие)
{
x += 13; // Корректируем координату с учетом калибровочных данных
y += 4; // Корректируем координату с учетом калибровочных данных
//
if (y < 24 && x > 280) {
tft.fillRect(0, 21, 320, 240, ILI9341_BLACK ); //стираем рисунок
x0 = 0, y0 = 21;
color = tft.color565(0, 0, 0);
flag = 0;
}
if (y > 24 && flag == 2) {
tft.drawLine(x, y, x0, y0, color); //рисуем отрезок выбранным цветом
x0 = x;
y0 = y;
}
if (y > 24 && flag == 3) {
x0 = x; //режим стирательной резинки
y0 = y;
tft.fillCircle(x0, y0, 5, tft.color565(0, 0, 0) );
}
if (y < 24 && x > 240 && x < 260) {
flag = 3; //включаем режим стирательной резинки
}
if (y > 24 && flag == 1) {
flag = 2; //начало рисования новой серии отрезков
x0 = x;
y0 = y;
}
for (int i = 1; i < 8; i++) {
if (y < 24 && x > 30 * i - 10 && x < 30 * i + 10) {
flag = 1; //выбираем цвет рисования
color = tft.color565(255 * (i % 2), 255 * ((i / 2) % 2), 255 * ((i / 4) % 2));
}
}
//
}
}
}
а так не лучше?
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO); // Создаем объект дисплея и сообщаем библиотеке распиновку для работы с графикой
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
В теории должно быть лучше, но на практике - просто белый экран после загрузки.
предположу, что RESET дисплея не дёргается
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
Такой вариант загрузился, но экран белый.
видимо конфликт между soft и hard SPI
Шрек-Марио…
…Написал вариант пиксельной рисовалки в дополнение к отрезочной. Какие ещё есть варианты?
Практика баловства показала две необходимости - сделать палитру псевдонепрерывной, а не на 7 цветов и перейти на другой мк т.к. ресурсов для хранения графики нет. С первым вроде ясно, а вот со вторым нет. Библиотеки экрана и сенсорного модуля с RP2040 не хотят работать.
коли в библиотеке нет этого контроллера то очевидно жеж, что не заработает, может библиотеку от адафруита допилить
но сдаётся мне, что надо смотреть в сторону TFT_eSPI
Странно, на тех же st7735 библиотека от “адафрукт” работала и на уно, есп и “рассберри”. Другая для st7789 тоже и на есп и на RP2040, только номера выводов для spi менялись. Здесь почему то аппаратный спи не работает. И с библиотекой для тачскрина и без неё…
… Сделал палитру на 27 цветов и для фона и для квадратиков, убрал стирашку - теперь она не нужна. Добавил индикатор выбранного цвета.
а ты попробуй пока без тачскрина, чистый дисплей, да на хардовом SPI, как заработает уже к нему лепить тачскрин, он много ресурсов не потребляет, можно на тех же пинах, что и дисплей, кроме выбора кристалла
Я пробовал пробный скетч без тачскрина - не работает хардовый. Ну ещё смешнее попытка обновить библиотеку Adafruit_ILI9341. После обновления пишет нет файла <Adafruit_SPITFT.h>. Ищем и понимаем, что он входит в состав библиотеки Adafruit-GFX-Library. Что же… и её меняем на новую… И удивляемся, теперь не хватает файла <Adafruit_I2CDevice.h> который входит в файл какого то “серого оледа” и т.д. Теперь искать ещё какую то библу? Что это вообще за пакетный подход?
Adafruit_BusIO.h
У них всё органично, для работы с разными шинами эта библиотека, далее общая графическая и для конкретного дисплея
Ясно, гармония, там где раньше две работало теперь надо три новых ставить… потом выяснится, что с библиотекой тачскрина они не сработаются :)… и на уно тоже.
Сделал вариант по подобию автора ролика, только пиксель-квадрат 5*5 точек.
Что за контроллер используется, @lilik ?
«Под завязку» с такими картинками то?
Майнкрафт))