Помогите допилить скетч MARKER&STOP&TURN_LIGHTS для велосипеда на матрицах MAX7219 4в1
- Войдите на сайт для отправки комментариев
Вообщем история такая, появилась идея смастерить на велик габарит с функцией стоп сигнала и указателей поворотов на матрицах MAX7219 8*8 четыре на одной плате (изначально планировалось сделать на одно матрице, но поигравшись с 4мя на одной плате понял что это будет выглядеть весьма красивее несложными в реализации анимациями). Перелопатив нэт, ни каких дельных проектов на эту тему не нашел (кроме одного незаконченого на youtube), и взяв за основу демо скетч из youtub-овского проекта стал перекраивать его под себя. Демку собрал получилась грамоздкая, но как дошло до привязки кнопок на включение того или иного действия тут начались проблемы, потому и пришел к вам умельцам с поклоном за хэлпом =) Возникли следующие вопросы: 1. Как собственно задать приоритет включения (нужно в такой последовательности СТОП=>ПОВОРОТНИКИ=>ГАБАРИТ) 2. Как правильно эти кнопки прописать (ниже выложу свою попытку, оно вроде работает, но с большими задержками) 3. Как завершить цикл не дожидаясь его окончания (например я включил поворотник и выключил, а он выключается по окончанию цикла) 4. Можно ли как упростить то что я наваял =) а то уж больно громоздко как то получилось (может из-за этого и задержки такие)
#include "LedControl.h"//подключаем библиотеку LedControl.h
//====================================================================================================
LedControl lc = LedControl(10, 8, 9, 4);//к D10 подключаем DIN, к D8 подключаем CLK, к D9 подключаем CS
//====================================================================================================
unsigned long delaytime = 1000;//временные переменные delay
unsigned long delaytime2 = 30;
unsigned long delaytime3 = 100;
//====================================================================================================
void setup() { //задаём параметры дисплеев
lc.shutdown(0, false);//первого
lc.setIntensity(0, 1);
lc.clearDisplay(0);
lc.shutdown(1, false);//второго
lc.setIntensity(1, 1);
lc.clearDisplay(1);
lc.shutdown(2, false);//третьего
lc.setIntensity(2, 1);
lc.clearDisplay(2);
lc.shutdown(3, false);//четвертого
lc.setIntensity(3, 1);
lc.clearDisplay(3);
}
//====================================================================================================
//пишем значения для каждой фигуры или символа
byte kvadrat[8] = {B11111111,B00000000,B11111111,B00000000,B00000000,B11111111,B00000000,B11111111};//центральные матрицы габарита
byte kvadrat2[8] = {B11111111,B10000000,B10111111,B10100000,B10100000,B10111111,B10000000,B11111111};//левая матрица габарита
byte kvadrat3[8] = {B11111111,B00000001,B11111101,B00000101,B00000101,B11111101,B00000001,B11111111};//правая матрица габарита
//====================================================================================================
byte pravo[8] = {B00001000,B00001100,B01111110,B01111111,B01111111,B01111110,B00001100,B00001000};//правый поворот
//====================================================================================================
byte levo[8] = {B00010000,B00110000,B01111110,B11111110,B11111110,B01111110,B00110000,B00010000};//левый поворот
//====================================================================================================
byte S[8] = {B00000000,B00111100,B01100110,B01100000,B01100000,B01100110,B00111100,B00000000};//стоп простой
byte T[8] = {B00000000,B01111110,B00011000,B00011000,B00011000,B00011000,B00011000,B00000000};
byte O[8] = {B00000000,B00111100,B01100110,B01100110,B01100110,B01100110,B00111100,B00000000};
byte P[8] = {B00000000,B01111110,B01100110,B01100110,B01100110,B01100110,B01100110,B00000000};
//====================================================================================================
byte Si[8] = {B11111111,B11000011,B10011001,B10011111,B10011111,B10011001,B11000011,B11111111};//стоп с инверсией
byte Ti[8] = {B11111111,B10000001,B11100111,B11100111,B11100111,B11100111,B11100111,B11111111};
byte Oi[8] = {B11111111,B11000011,B10011001,B10011001,B10011001,B10011001,B11000011,B11111111};
byte Pi[8] = {B11111111,B10000001,B10011001,B10011001,B10011001,B10011001,B10011001,B11111111};
//====================================================================================================
void draw_stop() {//задаём параметры для стопа
for(byte i=0;i<4;i++){
lc.setRow(0, 0, Pi[0]);
lc.setRow(0, 1, Pi[1]);
lc.setRow(0, 2, Pi[2]);
lc.setRow(0, 3, Pi[3]);
lc.setRow(0, 4, Pi[4]);
lc.setRow(0, 5, Pi[5]);
lc.setRow(0, 6, Pi[6]);
lc.setRow(0, 7, Pi[7]);
lc.setRow(1, 0, Oi[0]);
lc.setRow(1, 1, Oi[1]);
lc.setRow(1, 2, Oi[2]);
lc.setRow(1, 3, Oi[3]);
lc.setRow(1, 4, Oi[4]);
lc.setRow(1, 5, Oi[5]);
lc.setRow(1, 6, Oi[6]);
lc.setRow(1, 7, Oi[7]);
lc.setRow(2, 0, Ti[0]);
lc.setRow(2, 1, Ti[1]);
lc.setRow(2, 2, Ti[2]);
lc.setRow(2, 3, Ti[3]);
lc.setRow(2, 4, Ti[4]);
lc.setRow(2, 5, Ti[5]);
lc.setRow(2, 6, Ti[6]);
lc.setRow(2, 7, Ti[7]);
lc.setRow(3, 0, Si[0]);
lc.setRow(3, 1, Si[1]);
lc.setRow(3, 2, Si[2]);
lc.setRow(3, 3, Si[3]);
lc.setRow(3, 4, Si[4]);
lc.setRow(3, 5, Si[5]);
lc.setRow(3, 6, Si[6]);
lc.setRow(3, 7, Si[7]);
delay(delaytime2);
lc.setRow(0, 0, P[0]);
lc.setRow(0, 1, P[1]);
lc.setRow(0, 2, P[2]);
lc.setRow(0, 3, P[3]);
lc.setRow(0, 4, P[4]);
lc.setRow(0, 5, P[5]);
lc.setRow(0, 6, P[6]);
lc.setRow(0, 7, P[7]);
lc.setRow(1, 0, O[0]);
lc.setRow(1, 1, O[1]);
lc.setRow(1, 2, O[2]);
lc.setRow(1, 3, O[3]);
lc.setRow(1, 4, O[4]);
lc.setRow(1, 5, O[5]);
lc.setRow(1, 6, O[6]);
lc.setRow(1, 7, O[7]);
lc.setRow(2, 0, T[0]);
lc.setRow(2, 1, T[1]);
lc.setRow(2, 2, T[2]);
lc.setRow(2, 3, T[3]);
lc.setRow(2, 4, T[4]);
lc.setRow(2, 5, T[5]);
lc.setRow(2, 6, T[6]);
lc.setRow(2, 7, T[7]);
lc.setRow(3, 0, S[0]);
lc.setRow(3, 1, S[1]);
lc.setRow(3, 2, S[2]);
lc.setRow(3, 3, S[3]);
lc.setRow(3, 4, S[4]);
lc.setRow(3, 5, S[5]);
lc.setRow(3, 6, S[6]);
lc.setRow(3, 7, S[7]);
delay(delaytime2);
lc.clearDisplay(0);
lc.clearDisplay(1);
lc.clearDisplay(2);
lc.clearDisplay(3);
lc.setRow(0, 0, Pi[0]);
lc.setRow(0, 1, Pi[1]);
lc.setRow(0, 2, Pi[2]);
lc.setRow(0, 3, Pi[3]);
lc.setRow(0, 4, Pi[4]);
lc.setRow(0, 5, Pi[5]);
lc.setRow(0, 6, Pi[6]);
lc.setRow(0, 7, Pi[7]);
lc.setRow(1, 0, Oi[0]);
lc.setRow(1, 1, Oi[1]);
lc.setRow(1, 2, Oi[2]);
lc.setRow(1, 3, Oi[3]);
lc.setRow(1, 4, Oi[4]);
lc.setRow(1, 5, Oi[5]);
lc.setRow(1, 6, Oi[6]);
lc.setRow(1, 7, Oi[7]);
lc.setRow(2, 0, Ti[0]);
lc.setRow(2, 1, Ti[1]);
lc.setRow(2, 2, Ti[2]);
lc.setRow(2, 3, Ti[3]);
lc.setRow(2, 4, Ti[4]);
lc.setRow(2, 5, Ti[5]);
lc.setRow(2, 6, Ti[6]);
lc.setRow(2, 7, Ti[7]);
lc.setRow(3, 0, Si[0]);
lc.setRow(3, 1, Si[1]);
lc.setRow(3, 2, Si[2]);
lc.setRow(3, 3, Si[3]);
lc.setRow(3, 4, Si[4]);
lc.setRow(3, 5, Si[5]);
lc.setRow(3, 6, Si[6]);
lc.setRow(3, 7, Si[7]);
}
delay(delaytime);
lc.clearDisplay(0);
lc.clearDisplay(1);
lc.clearDisplay(2);
lc.clearDisplay(3);
}
//====================================================================================================
void draw_kvadrat() {//задаём параметры для габарита
for(byte i=0;i<4;i++){
lc.setRow(0, 0, kvadrat3[0]);
lc.setRow(0, 1, kvadrat3[1]);
lc.setRow(0, 2, kvadrat3[2]);
lc.setRow(0, 3, kvadrat3[3]);
lc.setRow(0, 4, kvadrat3[4]);
lc.setRow(0, 5, kvadrat3[5]);
lc.setRow(0, 6, kvadrat3[6]);
lc.setRow(0, 7, kvadrat3[7]);
lc.setRow(1, 0, kvadrat[0]);
lc.setRow(1, 1, kvadrat[1]);
lc.setRow(1, 2, kvadrat[2]);
lc.setRow(1, 3, kvadrat[3]);
lc.setRow(1, 4, kvadrat[4]);
lc.setRow(1, 5, kvadrat[5]);
lc.setRow(1, 6, kvadrat[6]);
lc.setRow(1, 7, kvadrat[7]);
lc.setRow(2, 0, kvadrat[0]);
lc.setRow(2, 1, kvadrat[1]);
lc.setRow(2, 2, kvadrat[2]);
lc.setRow(2, 3, kvadrat[3]);
lc.setRow(2, 4, kvadrat[4]);
lc.setRow(2, 5, kvadrat[5]);
lc.setRow(2, 6, kvadrat[6]);
lc.setRow(2, 7, kvadrat[7]);
lc.setRow(3, 0, kvadrat2[0]);
lc.setRow(3, 1, kvadrat2[1]);
lc.setRow(3, 2, kvadrat2[2]);
lc.setRow(3, 3, kvadrat2[3]);
lc.setRow(3, 4, kvadrat2[4]);
lc.setRow(3, 5, kvadrat2[5]);
lc.setRow(3, 6, kvadrat2[6]);
lc.setRow(3, 7, kvadrat2[7]);
}
delay(delaytime);
lc.clearDisplay(0);
lc.clearDisplay(1);
lc.clearDisplay(2);
lc.clearDisplay(3);
}
//====================================================================================================
void draw_pravo() {//задаём параметры для поворота в право
for (byte i = 0; i < 4; i++) {
lc.setRow(3, 0, pravo[0]);
lc.setRow(3, 1, pravo[1]);
lc.setRow(3, 2, pravo[2]);
lc.setRow(3, 3, pravo[3]);
lc.setRow(3, 4, pravo[4]);
lc.setRow(3, 5, pravo[5]);
lc.setRow(3, 6, pravo[6]);
lc.setRow(3, 7, pravo[7]);
delay(delaytime3);
lc.setRow(2, 0, pravo[0]);
lc.setRow(2, 1, pravo[1]);
lc.setRow(2, 2, pravo[2]);
lc.setRow(2, 3, pravo[3]);
lc.setRow(2, 4, pravo[4]);
lc.setRow(2, 5, pravo[5]);
lc.setRow(2, 6, pravo[6]);
lc.setRow(2, 7, pravo[7]);
delay(delaytime3);
lc.setRow(1, 0, pravo[0]);
lc.setRow(1, 1, pravo[1]);
lc.setRow(1, 2, pravo[2]);
lc.setRow(1, 3, pravo[3]);
lc.setRow(1, 4, pravo[4]);
lc.setRow(1, 5, pravo[5]);
lc.setRow(1, 6, pravo[6]);
lc.setRow(1, 7, pravo[7]);
delay(delaytime3);
lc.setRow(0, 0, pravo[0]);
lc.setRow(0, 1, pravo[1]);
lc.setRow(0, 2, pravo[2]);
lc.setRow(0, 3, pravo[3]);
lc.setRow(0, 4, pravo[4]);
lc.setRow(0, 5, pravo[5]);
lc.setRow(0, 6, pravo[6]);
lc.setRow(0, 7, pravo[7]);
delay(delaytime3);
lc.clearDisplay(3);
delay(delaytime3);
lc.clearDisplay(2);
delay(delaytime3);
lc.clearDisplay(1);
delay(delaytime3);
lc.clearDisplay(0);
delay(delaytime2);
}
delay(delaytime);
}
//====================================================================================================
void draw_levo() {//задаём параметры для поворота в лево
for (byte i = 0; i < 4; i++) {
lc.setRow(0, 0, levo[0]);
lc.setRow(0, 1, levo[1]);
lc.setRow(0, 2, levo[2]);
lc.setRow(0, 3, levo[3]);
lc.setRow(0, 4, levo[4]);
lc.setRow(0, 5, levo[5]);
lc.setRow(0, 6, levo[6]);
lc.setRow(0, 7, levo[7]);
delay(delaytime3);
lc.setRow(1, 0, levo[0]);
lc.setRow(1, 1, levo[1]);
lc.setRow(1, 2, levo[2]);
lc.setRow(1, 3, levo[3]);
lc.setRow(1, 4, levo[4]);
lc.setRow(1, 5, levo[5]);
lc.setRow(1, 6, levo[6]);
lc.setRow(1, 7, levo[7]);
delay(delaytime3);
lc.setRow(2, 0, levo[0]);
lc.setRow(2, 1, levo[1]);
lc.setRow(2, 2, levo[2]);
lc.setRow(2, 3, levo[3]);
lc.setRow(2, 4, levo[4]);
lc.setRow(2, 5, levo[5]);
lc.setRow(2, 6, levo[6]);
lc.setRow(2, 7, levo[7]);
delay(delaytime3);
lc.setRow(3, 0, levo[0]);
lc.setRow(3, 1, levo[1]);
lc.setRow(3, 2, levo[2]);
lc.setRow(3, 3, levo[3]);
lc.setRow(3, 4, levo[4]);
lc.setRow(3, 5, levo[5]);
lc.setRow(3, 6, levo[6]);
lc.setRow(3, 7, levo[7]);
delay(delaytime3);
lc.clearDisplay(0);
delay(delaytime3);
lc.clearDisplay(1);
delay(delaytime3);
lc.clearDisplay(2);
delay(delaytime3);
lc.clearDisplay(3);
delay(delaytime2);
}
delay(delaytime);
}
//====================================================================================================
void loop() {
draw_kvadrat();//включаем габарит
draw_stop();//мигаем стопом (простой + с инверсией)
//Включаем поворотники
draw_pravo();//мигаем вправо
draw_levo();//мигаем влево
}
а вот моя попытка прикрутить кнопки
#include "LedControl.h"//подключаем библиотеку LedControl.h //==================================================================================================== LedControl lc = LedControl(10, 8, 9, 4);//к D10 подключаем DIN, к D8 подключаем CLK, к D9 подключаем CS //==================================================================================================== unsigned long delaytime = 1000;//временные переменные delay unsigned long delaytime2 = 30; unsigned long delaytime3 = 100; //==================================================================================================== int val=0; // ========================================================================= int STOP_status = LOW; // Статус нажатия тормоза int kvadrat_status = LOW; // Статус включения габарита int levo_status = LOW; // Статус включения левого поворотника int pravo_status = LOW; // Статус включения правого поворотника // ========================================================================= int levo = 5; // Digital pin для левого поворотника int pravo = 7; // Digital pin для правого поворотника int STOP = 2; // Digital pin для стопа int kvadrat = 3; // Digital pin для габарита // ========================================================================= void setup() { //задаём параметры дисплеев lc.shutdown(0, false);//первого lc.setIntensity(0, 1); lc.clearDisplay(0); lc.shutdown(1, false);//второго lc.setIntensity(1, 1); lc.clearDisplay(1); lc.shutdown(2, false);//третьего lc.setIntensity(2, 1); lc.clearDisplay(2); lc.shutdown(3, false);//четвертого lc.setIntensity(3, 1); lc.clearDisplay(3); pinMode(STOP,INPUT); pinMode(kvadrat,INPUT); pinMode(levo,INPUT); pinMode(pravo,INPUT); digitalWrite(STOP,HIGH); digitalWrite(kvadrat,HIGH); digitalWrite(levo,HIGH); digitalWrite(pravo,HIGH); } //==================================================================================================== //пишем значения для каждой фигуры или символа byte kvadrat1[8] = {B11111111,B00000000,B11111111,B00000000,B00000000,B11111111,B00000000,B11111111};//центральные матрицы габарита byte kvadrat2[8] = {B11111111,B10000000,B10111111,B10100000,B10100000,B10111111,B10000000,B11111111};//левая матрица габарита byte kvadrat3[8] = {B11111111,B00000001,B11111101,B00000101,B00000101,B11111101,B00000001,B11111111};//правая матрица габарита //==================================================================================================== byte pravo1[8] = {B00001000,B00001100,B01111110,B01111111,B01111111,B01111110,B00001100,B00001000};//правый поворот //==================================================================================================== byte levo1[8] = {B00010000,B00110000,B01111110,B11111110,B11111110,B01111110,B00110000,B00010000};//левый поворот //==================================================================================================== byte S[8] = {B00000000,B00111100,B01100110,B01100000,B01100000,B01100110,B00111100,B00000000};//стоп простой byte T[8] = {B00000000,B01111110,B00011000,B00011000,B00011000,B00011000,B00011000,B00000000}; byte O[8] = {B00000000,B00111100,B01100110,B01100110,B01100110,B01100110,B00111100,B00000000}; byte P[8] = {B00000000,B01111110,B01100110,B01100110,B01100110,B01100110,B01100110,B00000000}; //==================================================================================================== byte Si[8] = {B11111111,B11000011,B10011001,B10011111,B10011111,B10011001,B11000011,B11111111};//стоп с инверсией byte Ti[8] = {B11111111,B10000001,B11100111,B11100111,B11100111,B11100111,B11100111,B11111111}; byte Oi[8] = {B11111111,B11000011,B10011001,B10011001,B10011001,B10011001,B11000011,B11111111}; byte Pi[8] = {B11111111,B10000001,B10011001,B10011001,B10011001,B10011001,B10011001,B11111111}; //==================================================================================================== void draw_stop(int param)//задаём параметры для стопа {if (param == 1) for(byte i=0;i<4;i++){ lc.setRow(0, 0, Pi[0]); lc.setRow(0, 1, Pi[1]); lc.setRow(0, 2, Pi[2]); lc.setRow(0, 3, Pi[3]); lc.setRow(0, 4, Pi[4]); lc.setRow(0, 5, Pi[5]); lc.setRow(0, 6, Pi[6]); lc.setRow(0, 7, Pi[7]); lc.setRow(1, 0, Oi[0]); lc.setRow(1, 1, Oi[1]); lc.setRow(1, 2, Oi[2]); lc.setRow(1, 3, Oi[3]); lc.setRow(1, 4, Oi[4]); lc.setRow(1, 5, Oi[5]); lc.setRow(1, 6, Oi[6]); lc.setRow(1, 7, Oi[7]); lc.setRow(2, 0, Ti[0]); lc.setRow(2, 1, Ti[1]); lc.setRow(2, 2, Ti[2]); lc.setRow(2, 3, Ti[3]); lc.setRow(2, 4, Ti[4]); lc.setRow(2, 5, Ti[5]); lc.setRow(2, 6, Ti[6]); lc.setRow(2, 7, Ti[7]); lc.setRow(3, 0, Si[0]); lc.setRow(3, 1, Si[1]); lc.setRow(3, 2, Si[2]); lc.setRow(3, 3, Si[3]); lc.setRow(3, 4, Si[4]); lc.setRow(3, 5, Si[5]); lc.setRow(3, 6, Si[6]); lc.setRow(3, 7, Si[7]); delay(delaytime2); lc.setRow(0, 0, P[0]); lc.setRow(0, 1, P[1]); lc.setRow(0, 2, P[2]); lc.setRow(0, 3, P[3]); lc.setRow(0, 4, P[4]); lc.setRow(0, 5, P[5]); lc.setRow(0, 6, P[6]); lc.setRow(0, 7, P[7]); lc.setRow(1, 0, O[0]); lc.setRow(1, 1, O[1]); lc.setRow(1, 2, O[2]); lc.setRow(1, 3, O[3]); lc.setRow(1, 4, O[4]); lc.setRow(1, 5, O[5]); lc.setRow(1, 6, O[6]); lc.setRow(1, 7, O[7]); lc.setRow(2, 0, T[0]); lc.setRow(2, 1, T[1]); lc.setRow(2, 2, T[2]); lc.setRow(2, 3, T[3]); lc.setRow(2, 4, T[4]); lc.setRow(2, 5, T[5]); lc.setRow(2, 6, T[6]); lc.setRow(2, 7, T[7]); lc.setRow(3, 0, S[0]); lc.setRow(3, 1, S[1]); lc.setRow(3, 2, S[2]); lc.setRow(3, 3, S[3]); lc.setRow(3, 4, S[4]); lc.setRow(3, 5, S[5]); lc.setRow(3, 6, S[6]); lc.setRow(3, 7, S[7]); delay(delaytime2); lc.clearDisplay(0); lc.clearDisplay(1); lc.clearDisplay(2); lc.clearDisplay(3); lc.setRow(0, 0, Pi[0]); lc.setRow(0, 1, Pi[1]); lc.setRow(0, 2, Pi[2]); lc.setRow(0, 3, Pi[3]); lc.setRow(0, 4, Pi[4]); lc.setRow(0, 5, Pi[5]); lc.setRow(0, 6, Pi[6]); lc.setRow(0, 7, Pi[7]); lc.setRow(1, 0, Oi[0]); lc.setRow(1, 1, Oi[1]); lc.setRow(1, 2, Oi[2]); lc.setRow(1, 3, Oi[3]); lc.setRow(1, 4, Oi[4]); lc.setRow(1, 5, Oi[5]); lc.setRow(1, 6, Oi[6]); lc.setRow(1, 7, Oi[7]); lc.setRow(2, 0, Ti[0]); lc.setRow(2, 1, Ti[1]); lc.setRow(2, 2, Ti[2]); lc.setRow(2, 3, Ti[3]); lc.setRow(2, 4, Ti[4]); lc.setRow(2, 5, Ti[5]); lc.setRow(2, 6, Ti[6]); lc.setRow(2, 7, Ti[7]); lc.setRow(3, 0, Si[0]); lc.setRow(3, 1, Si[1]); lc.setRow(3, 2, Si[2]); lc.setRow(3, 3, Si[3]); lc.setRow(3, 4, Si[4]); lc.setRow(3, 5, Si[5]); lc.setRow(3, 6, Si[6]); lc.setRow(3, 7, Si[7]); } delay(delaytime); lc.clearDisplay(0); lc.clearDisplay(1); lc.clearDisplay(2); lc.clearDisplay(3); } //==================================================================================================== void draw_kvadrat(int param)//задаём параметры для габарита {if (param == 1) for(byte i=0;i<4;i++){ lc.setRow(0, 0, kvadrat3[0]); lc.setRow(0, 1, kvadrat3[1]); lc.setRow(0, 2, kvadrat3[2]); lc.setRow(0, 3, kvadrat3[3]); lc.setRow(0, 4, kvadrat3[4]); lc.setRow(0, 5, kvadrat3[5]); lc.setRow(0, 6, kvadrat3[6]); lc.setRow(0, 7, kvadrat3[7]); lc.setRow(1, 0, kvadrat1[0]); lc.setRow(1, 1, kvadrat1[1]); lc.setRow(1, 2, kvadrat1[2]); lc.setRow(1, 3, kvadrat1[3]); lc.setRow(1, 4, kvadrat1[4]); lc.setRow(1, 5, kvadrat1[5]); lc.setRow(1, 6, kvadrat1[6]); lc.setRow(1, 7, kvadrat1[7]); lc.setRow(2, 0, kvadrat1[0]); lc.setRow(2, 1, kvadrat1[1]); lc.setRow(2, 2, kvadrat1[2]); lc.setRow(2, 3, kvadrat1[3]); lc.setRow(2, 4, kvadrat1[4]); lc.setRow(2, 5, kvadrat1[5]); lc.setRow(2, 6, kvadrat1[6]); lc.setRow(2, 7, kvadrat1[7]); lc.setRow(3, 0, kvadrat2[0]); lc.setRow(3, 1, kvadrat2[1]); lc.setRow(3, 2, kvadrat2[2]); lc.setRow(3, 3, kvadrat2[3]); lc.setRow(3, 4, kvadrat2[4]); lc.setRow(3, 5, kvadrat2[5]); lc.setRow(3, 6, kvadrat2[6]); lc.setRow(3, 7, kvadrat2[7]); } delay(delaytime); lc.clearDisplay(0); lc.clearDisplay(1); lc.clearDisplay(2); lc.clearDisplay(3); } //==================================================================================================== void draw_pravo(int param) {if (param == 1) //задаём параметры для поворота в право for (byte i = 0; i < 4; i++) { lc.setRow(3, 0, pravo1[0]); lc.setRow(3, 1, pravo1[1]); lc.setRow(3, 2, pravo1[2]); lc.setRow(3, 3, pravo1[3]); lc.setRow(3, 4, pravo1[4]); lc.setRow(3, 5, pravo1[5]); lc.setRow(3, 6, pravo1[6]); lc.setRow(3, 7, pravo1[7]); delay(delaytime3); lc.setRow(2, 0, pravo1[0]); lc.setRow(2, 1, pravo1[1]); lc.setRow(2, 2, pravo1[2]); lc.setRow(2, 3, pravo1[3]); lc.setRow(2, 4, pravo1[4]); lc.setRow(2, 5, pravo1[5]); lc.setRow(2, 6, pravo1[6]); lc.setRow(2, 7, pravo1[7]); delay(delaytime3); lc.setRow(1, 0, pravo1[0]); lc.setRow(1, 1, pravo1[1]); lc.setRow(1, 2, pravo1[2]); lc.setRow(1, 3, pravo1[3]); lc.setRow(1, 4, pravo1[4]); lc.setRow(1, 5, pravo1[5]); lc.setRow(1, 6, pravo1[6]); lc.setRow(1, 7, pravo1[7]); delay(delaytime3); lc.setRow(0, 0, pravo1[0]); lc.setRow(0, 1, pravo1[1]); lc.setRow(0, 2, pravo1[2]); lc.setRow(0, 3, pravo1[3]); lc.setRow(0, 4, pravo1[4]); lc.setRow(0, 5, pravo1[5]); lc.setRow(0, 6, pravo1[6]); lc.setRow(0, 7, pravo1[7]); delay(delaytime3); lc.clearDisplay(3); delay(delaytime3); lc.clearDisplay(2); delay(delaytime3); lc.clearDisplay(1); delay(delaytime3); lc.clearDisplay(0); delay(delaytime2); } delay(delaytime); } //==================================================================================================== void draw_levo(int param) {if (param == 1) //задаём параметры для поворота в лево for (byte i = 0; i < 4; i++) { lc.setRow(0, 0, levo1[0]); lc.setRow(0, 1, levo1[1]); lc.setRow(0, 2, levo1[2]); lc.setRow(0, 3, levo1[3]); lc.setRow(0, 4, levo1[4]); lc.setRow(0, 5, levo1[5]); lc.setRow(0, 6, levo1[6]); lc.setRow(0, 7, levo1[7]); delay(delaytime3); lc.setRow(1, 0, levo1[0]); lc.setRow(1, 1, levo1[1]); lc.setRow(1, 2, levo1[2]); lc.setRow(1, 3, levo1[3]); lc.setRow(1, 4, levo1[4]); lc.setRow(1, 5, levo1[5]); lc.setRow(1, 6, levo1[6]); lc.setRow(1, 7, levo1[7]); delay(delaytime3); lc.setRow(2, 0, levo1[0]); lc.setRow(2, 1, levo1[1]); lc.setRow(2, 2, levo1[2]); lc.setRow(2, 3, levo1[3]); lc.setRow(2, 4, levo1[4]); lc.setRow(2, 5, levo1[5]); lc.setRow(2, 6, levo1[6]); lc.setRow(2, 7, levo1[7]); delay(delaytime3); lc.setRow(3, 0, levo1[0]); lc.setRow(3, 1, levo1[1]); lc.setRow(3, 2, levo1[2]); lc.setRow(3, 3, levo1[3]); lc.setRow(3, 4, levo1[4]); lc.setRow(3, 5, levo1[5]); lc.setRow(3, 6, levo1[6]); lc.setRow(3, 7, levo1[7]); delay(delaytime3); lc.clearDisplay(0); delay(delaytime3); lc.clearDisplay(1); delay(delaytime3); lc.clearDisplay(2); delay(delaytime3); lc.clearDisplay(3); delay(delaytime2); } delay(delaytime); } //==================================================================================================== void loop() { int new_STOP_status = digitalRead(STOP); int new_kvadrat_status = digitalRead(kvadrat); int levo_status = digitalRead(levo); int pravo_status = digitalRead(pravo); // ========================================================================= if (STOP_status != new_STOP_status) // если статус отличается от предыдущего {STOP_status = new_STOP_status; if (STOP_status == LOW) {draw_stop(1); val++; } else {draw_stop(0); val=0; } } // ========================================================================= if (kvadrat_status != new_kvadrat_status) // если статус отличается от предыдущего {kvadrat_status = new_kvadrat_status; if (kvadrat_status == LOW) {draw_kvadrat(1); val++; } else {draw_kvadrat(0); val=0; } } // ========================================================================= if (levo_status == LOW) {draw_levo(1); val++; } else {draw_levo(0); val=0; } // ========================================================================= if (pravo_status == LOW) {draw_pravo(1); val++; } else {draw_pravo(0); val=0; } }матрица вот такая https://ru.aliexpress.com/item/1Pcs-MAX7219-Dot-Matrix-Module-For-arduino-Microcontroller-4-In-One-Display-with-5P-Line/32623732034.html?spm=2114.10010208.1000016.1.6dqspe&isOrigTitle=true моск arduino nano, кнопки срабатывают при замыкании на GND