#include <GyverMAX7219.h>
// W и H - количество МАТРИЦ по горизонтали и вертикали
// CS, DATA, CLK - номера пинов
MAX7219 < 4, 6, PD1, PD0, PD2 > mtrx;
// #define TopLight0 PA3
// #define TopLight1 PC15
// #define TopLight2 PB12
// #define TopLight3 PB2
// #define TopLight4 PA8
char ledPin[] = {PA3, PC15, PB12, PB2, PA8};
const int ARRAY_SIZE = 5;
int ledDelay = 200;
int direction = 1;
int currentLed = 0;
unsigned long changeTime;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, STM32!");
mtrx.begin();
mtrx.setBright(5);
mtrx.setType(1);
mtrx.setFlip(1, 0);
mtrx.setConnection(GM_LEFT_BOTTOM_UP);
//mtrx.rotate(1); // можно повернуть 0..3, по 90 град по часовой стрелке
mtrx.setScale(0);
mtrx.setCursor(0, 16);
mtrx.println("Press start for begin");
mtrx.update();
for (int i = 0; i < ARRAY_SIZE; i++) {
pinMode(ledPin[i], OUTPUT);
}
// pinMode(TopLight0, OUTPUT);
// pinMode(TopLight1, OUTPUT);
// pinMode(TopLight2, OUTPUT);
// pinMode(TopLight3, OUTPUT);
// pinMode(TopLight4, OUTPUT);
for (int i = 0; i < ARRAY_SIZE; i++) {
digitalWrite(ledPin[i], LOW);
}
// digitalWrite(TopLight0, LOW);
// digitalWrite(TopLight1, LOW);
// digitalWrite(TopLight2, LOW);
// digitalWrite(TopLight3, LOW);
// digitalWrite(TopLight4, LOW);
}
void changeLed() {
// выключаем все светодиоды
for (int i = 0; i < ARRAY_SIZE; i++) {
digitalWrite(ledPin[i], LOW);
}
// включаем текущий LED
digitalWrite(ledPin[currentLed], HIGH);
// увеличиваем значение
currentLed += direction;
// меняем направление, если достигли конца
if (currentLed == ARRAY_SIZE - 1) {
direction = -1;
}
if (currentLed == 0) {
direction = 1;
}
}
// class Flasher
// {
// // Переменные - члены класса
// // Инициализируются при запуске
// int ledPin; // номер пина со светодиодом
// long OnTime; // время включения в миллисекундах
// long OffTime; // время, когда светодиод выключен
// // Текущее состояние
// int ledState; // состояние ВКЛ/ВЫКЛ
// unsigned long previousMillis; // последний момент смены состояния
// // Конструктор создает экземпляр Flasher и инициализирует
// // переменные-члены класса и состояние
// public:
// Flasher(int pin, long on, long off)
// {
// ledPin = pin;
// pinMode(ledPin, OUTPUT);
// OnTime = on;
// OffTime = off;
// ledState = LOW;
// previousMillis = 0;
// }
// void Update()
// {
// // выясняем не настал ли момент сменить состояние светодиода
// unsigned long currentMillis = millis(); // текущее время в миллисекундах
// if((ledState == HIGH) && (currentMillis - previousMillis >= OnTime))
// {
// ledState = LOW; // выключаем
// previousMillis = currentMillis; // запоминаем момент времени
// digitalWrite(ledPin, ledState); // реализуем новое состояние
// }
// else if ((ledState == LOW) && (currentMillis - previousMillis >= OffTime))
// {
// ledState = HIGH; // выключаем
// previousMillis = currentMillis ; // запоминаем момент времени
// digitalWrite(ledPin, ledState); // реализуем новое состояние
// }
// }
// };
// Flasher led1(TopLight0, random(0, 100), random(200, 300));
// Flasher led2(TopLight1, random(0, 100), random(200, 300));
// Flasher led3(TopLight2, random(0, 100), random(200, 300));
// Flasher led4(TopLight3, random(0, 100), random(200, 300));
// Flasher led5(TopLight4, random(0, 100), random(200, 300));
// Flasher led1(TopLight0, 100, 200);
// Flasher led2(TopLight1, 100, 300);
// Flasher led3(TopLight2, 100, 400);
// Flasher led4(TopLight3, 100, 500);
// Flasher led5(TopLight4, 100, 600);
void loop() {
if ((millis() - changeTime) > ledDelay) {
changeLed();
changeTime = millis();
}
// led1.Update();
// led2.Update();
// led3.Update();
// led4.Update();
// led5.Update();
}