Code Every Day 🚀
30 subscribers
687 photos
243 videos
22 files
174 links
Просто для развлечения
Download Telegram
День 3: Заметка 1: Разбор как программировать Arduino для работы с RGB матрицей

Всем привет!

🧑‍💻 Урок с разбором:
👉 как подключить зависимость Adafruit GFX Library к проекту
👉 как подготовить код для работы rgb матрицей
👉 перекраска панели в разные цвета, тест на битые пиксели

📷 К посту приложено два видео:
👉 первое - пример lifecoding с комментариями по ходу дела
👉 второе - результат работы

#Arduino
#RGBMatrix
#LifeCoding
👍1
День 5: Заметка 1: Таймер обратного отсчета на Arduino с выводом на RGB панель

🤚 Всем привет!

Давайте сегодня посмотрим, как можно создать счетчик обратного отсчета в Arduino с выводом на RBG панель.

👨‍💻 Для этого напишем небольшую программу, мы рассмотрим методы для работы с текстом экземпляра RGBmatrixPanel

👉 Пусть у нас перменная для хранения экземляра RGBmatrixPanel называется matrix.

Как мы разобрали в прошлом уроке:
👉 matrix.Color333(int r, int g, int b) - это функция, которая описывает цвет в формате RGB, она нам сегодня пригодиться, так как мы будем подкрашивать цифры счетчика в нужный нам цвет.

Для вывода текста на экран нам будет достаточно использовать следующие функции:

👉 matrix.setTextColor(matrix.Color333(r, g, b)); - указываем, какого цвета будет текст
👉 matrix.setCursor(int x, int y); - указывается начальная координата текста (верхний левый угол)
👉 matrix.print(string text); - выводим текст
👉 matrix.setTextSize(int size); - указывает размер текста, size изменяется [1, 8], причем символ размером 1 занимает 8 на 5 пикселей на матрице.

Вцелом этого будет достаточно.

В методе setup() подготавливаем матрицу

void setup() {
matrix.begin();
}

Заводим переменную, которая будет хранить текущее состояние счетчика

int count = 10;

В методе loop() уменьшаем значение на единицу с задержкой в 1 секунду

void loop() {
count = count - 1;
delay(1000);
}

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

void loop() {
//очистка экрана от текста, который был показан ранее
matrix.fillScreen(0);

//вывод на экран состояния счетчика
matrix.setTextColor(matrix.Color333(7, 0, 0));
matrix.setCursor(27, 13);
matrix.print(counter);
matrix.swapBuffers(false);

//уменьшение счетчика на единицу
count = count - 1;
delay(1000);
}

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


void loop() {


//уменьшение счетчка на единицу
if (count > 0) {
count = count - 1;
}
delay(1000);
}

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

void changeState() {
if (count > 0) {
count = count - 1;
}
}


void printCounter() {
printText(String(count));
}

void printText(string value) {
//очистка экрана от текста, который был показан ранее
matrix.fillScreen(0);

//вывод на экран состояния счетчика
matrix.setTextColor(matrix.Color333(7, 0, 0));
matrix.setCursor(27, 13);
matrix.print(value);
}

В итоге метод loop():

void loop() {
printCounter();
changeState();
}

📷 Пример работы на видео (в следующем сообщении)
📷 Также пример написания кода в отдельном видео(в следующем сообщении), в конце я забыл добавить метод matrix.swapBuffers(false), просто поторопился =).
В приложеном файле программы с видео он есть.

#Arduino
#RGBMatrix
#LifeCoding
👍2