#include <LedControl.h>
// Пины для подключения к MAX7219
const int DIN_PIN = 11; // PB0
const int CLK_PIN = 13; // PB2
const int CS_PIN = 10; // PB3
// Инициализация библиотеки для одного MAX7219
LedControl lc = LedControl(DIN_PIN, CLK_PIN, CS_PIN, 1);
// Задержка между эффектами в миллисекундах
const unsigned long displayTime = 5000;
const unsigned long snowDelay = 300; // Задержка для эффекта падающего снега
// Определение изображений для каждого эффекта
byte smiley[8] = {
B00111100,
B01000010,
B10100101,
B10000001,
B10100101,
B10011001,
B01000010,
B00111100
};
byte boat[8] = {
B00000000,
B00011000,
B00010100,
B00010100,
B00011000,
B11111111,
B01000010,
B00111100
};
byte star[8] = {
B00011000,
B00100100,
B01000010,
B10000001,
B11100111,
B00100100,
B01011010,
B11100111
};
byte snowflake[8] = {
B00000000,
B01000010,
B00100100,
B01011010,
B11111111,
B01011010,
B00100100,
B01000010
};
byte lightning[8] = {
B00000000,
B00000100,
B00001000,
B00010000,
B00111110,
B00000100,
B00001000,
B00010000
};
void setup() {
// Инициализация MAX7219
lc.shutdown(0, false); // Включаем дисплей
lc.setIntensity(0, 8); // Устанавливаем яркость (0-15)
lc.clearDisplay(0); // Очищаем дисплей
}
void loop() {
// Выводим по очереди каждый эффект
displayPattern(smiley);
delay(displayTime);
displayPattern(boat);
delay(displayTime);
displayPattern(star);
delay(displayTime);
displayPattern(snowflake);
delay(displayTime);
displayPattern(lightning);
delay(displayTime);
fallingSnowEffect();
}
// Функция для отображения паттерна на матрице
void displayPattern(byte pattern[8]) {
for (int row = 0; row < 8; row++) {
lc.setRow(0, row, pattern[row]);
}
}
// Функция для эффекта падающего снега
void fallingSnowEffect() {
// Начальные снежинки
byte snow[8] = {
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000
};
// Задаем начальные позиции снежинок (можно изменить для разнообразия)
snow[0] = B10000100;
snow[1] = B01001010;
snow[2] = B10100101;
// Падение снежинок
for (int step = 0; step < 8; step++) {
lc.clearDisplay(0); // Очищаем дисплей перед каждым шагом
// Сдвигаем снежинки вниз
for (int row = 7; row > 0; row--) {
snow[row] = snow[row - 1];
}
snow[0] = B00000000; // Верхняя строка освобождается
// Отображаем снежинки на матрице
for (int row = 0; row < 8; row++) {
lc.setRow(0, row, snow[row]);
}
delay(snowDelay); // Задержка для создания эффекта падения
}
}