// библиотека для работы с матрицей #include // установите и скачайте также библиотеку «Adafruit GFX Library» // «RGBmatrixPanel» наследуется от «Adafruit GFX Library» // управляющие пины матрицы #define CLK 11 #define OE 9 #define LAT 10 #define A A0 #define B A1 #define C A2 #define D A3 // объявляем объект для работы с матрицей 64х32 // включаем двойную буферизацию RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, true, 64); // массив с начальными координатами кругов и значениями смещения // первые две координаты в каждой строке — координаты трёх кругов // вторые две — координаты смещения кругов int ball[3][4] = { { 6, 6, 1, 1 }, { 17, 15, 1, -1 }, { 27, 6, -1, 1 } }; // цвет кругов static const int ballColor[3] = { matrix.Color333(3, 0, 0), matrix.Color333(0, 3, 0), matrix.Color333(0, 0, 3) }; // радиус кругов static int const ballRadius = 3; void setup() { // инициируем работу с матрицей matrix.begin(); } void loop() { // очищаем экран matrix.fillScreen(0); // запускаем счётчик для смены координат кругов for (int i = 0; i < 3; i++) { // рисуем три круга с одинаковыми радиусами // разными начальными координатами и цветами matrix.fillCircle(ball[i][0], ball[i][1], ballRadius, ballColor[i]); // обновляем Х-координату кругов ball[i][0] += ball[i][2]; // Обновляем Y-координату кругов ball[i][1] += ball[i][3]; // если круг по Х дошёл до границы экрана if ((ball[i][0] == ballRadius) || (ball[i][0] == (matrix.width() - ballRadius))) { // инициируем движение в обратную сторону ball[i][2] *= -1; } // если круг по Y дошёл до границы экрана if ((ball[i][1] == ballRadius) || (ball[i][1] == (matrix.height() - ballRadius))) { // инициируем движение в обратную сторону ball[i][3] *= -1; } } // выводим объекты из буфера на экран matrix.swapBuffers(false); }