Помогите допилить скетч MARKER&STOP&TURN_LIGHTS для велосипеда на матрицах MAX7219 4в1

dj-toxa
Offline
Зарегистрирован: 06.04.2016

Вообщем история такая, появилась идея смастерить на велик габарит с функцией стоп сигнала и указателей поворотов на матрицах 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();//мигаем влево 
}

 

dj-toxa
Offline
Зарегистрирован: 06.04.2016

а вот моя попытка прикрутить кнопки

#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;
    }
                          
                           
}

 

dj-toxa
Offline
Зарегистрирован: 06.04.2016

матрица вот такая 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