LED cube 8x8x8

DarkVoice
Offline
Зарегистрирован: 18.06.2018

Здравствуйте, решил спаять куб 8х8х8 с Arduino Pro Mini 328 (5V 16MHz) и с подключением RTC модуля. Схемы и скетч нашел в интернете, всё спаял, проверил работу сдвиговых регистров, всё отлично, но вот скетч куба не работает как нужно, зажигаеться большая часть светодиодов и некоторые с них мерцают, если нажать на подключенной клавиатуре кнопку включения/выключения мерцать перестают, а при повторном нажатии снова мерцают, на другие кнопки не реагирует. Все библиотеки которые были подключены - установлены. При компиляции никаких ошибок не выдаёт. Не могли бы помочь слегка с кодом?

// library for RTC
#include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS1307);

// library for SD card
#include <SD.h>
File CubeFile;

// Pin_Layer
int latch_layer = 5;// layer_ST_CP
int clock_layer = 6;// layer_SH_CP
int data_layer = 4;// layer_DS
// Pin_Column
int latch_column = 8;// column_ST_CP
int clock_column = 9;// column_SH_CP
int data_column = 7;// column_DS
// Pin SD card: SD_MOSI=D11, SD_MISO=D12, SD_SCK=13
int SD_CS = 10;
// Pin RTC card: RTC_SCL=A5, RTC_SDA=A4

//initialize and clear cube
byte f1[8]={255,255,255,255,255,255,255,255};
byte f2[8]={255,255,255,255,255,255,255,255};
byte f3[8]={255,255,255,255,255,255,255,255};
byte f4[8]={255,255,255,255,255,255,255,255};
byte f5[8]={255,255,255,255,255,255,255,255};
byte f6[8]={255,255,255,255,255,255,255,255};
byte f7[8]={255,255,255,255,255,255,255,255};
byte f8[8]={255,255,255,255,255,255,255,255};
bool clear_cube=false;
  
//for button
volatile char button_mode=0;
volatile char button_setup=0;
char button_up=0;
char button_down=0;
char button_change=0;
char button_reset=0;
char status_mode=1;// 1=time; -1=programm
char status_setup=0;
char status_up=0;
char status_down=0;
char status_change=1;// 1=hour; 2=minute; 3=day; 4=month; 5=year; 6=day of week
char status_reset=0;

//for time
char time_hour=0;
char time_minute=0;
char time_day=0;
char time_month=0;
char time_year=0;
char time_day_of_week=0;
char time_seconds=0;
char time_x=0;

//for programm
unsigned int file_position=0;
String file_name="001.bin";
char file_name_0=0;
char file_name_1=0;
char file_name_2=1;

void setup() 
{
  //for cube
  pinMode(latch_layer, OUTPUT);// set pinMode OUTPUT for layer and column
  pinMode(clock_layer, OUTPUT);
  pinMode(data_layer, OUTPUT);
  pinMode(latch_column, OUTPUT);
  pinMode(clock_column, OUTPUT);
  pinMode(data_column, OUTPUT);

  //for SD
  pinMode(SD_CS, OUTPUT);// for correct work library SD
    
  //for button
  attachInterrupt(1,f_mode,RISING);//mode interrupt
  attachInterrupt(0,f_setup,RISING);//setup interrupt
  pinMode(14,INPUT);//A0=reset
  pinMode(15,INPUT);//A1=up
  pinMode(16,INPUT);//A2=down
  pinMode(17,INPUT);//A3=change
  
  //open serial
  //Serial.begin(9600);
  //

  //for time
  time.begin();
  time.gettime();
  time_hour=time.Hours;
  time_minute=time.minutes;
  time_day=time.day;
  time_month=time.month;
  time_year=time.year;
  time_day_of_week=time.weekday;
  
}

void loop() 
{
  
  if(button_mode==1)
  {
    delay(300);
    interrupts();
    if(status_mode==-1)status_mode=1;
    else status_mode=-1;
    button_mode=0;
    status_reset=0;
    status_up=0;
    status_down=0;
    status_setup=0;
  }
  if(button_setup==1)
  {
    delay(300);
    interrupts();
    status_setup=1;
    button_setup=0;
    button_mode=0;
    status_reset=0;
    status_up=0;
    status_down=0;
  }
  
  if(digitalRead(14)==HIGH)//button reset
  {
    status_reset=1;
    delay(300);
  }
  if(digitalRead(16)==HIGH)//button up
  {
    status_up=1;
    delay(300);
  }
  if(digitalRead(15)==HIGH)//button down
  {
    status_down=1;
    delay(300);
  }
  if(digitalRead(17)==HIGH)//button change
  {
    delay(300);
    switch(status_change){
    case 1: status_change=2;
    break;
    case 2: status_change=3;
    break;
    case 3: status_change=4;
    break;
    case 4: status_change=5;
    break;
    case 5: status_change=6;
    break;
    case 6: status_change=1;
    break;}
  }
  
  if(status_mode==1)
  {
  CubeFile.close();
  if(clear_cube==false)
  {
    for(char x=0; x<8; x++)
    {
      f1[x]=255; f2[x]=255; f3[x]=255; f4[x]=255; f5[x]=255; f6[x]=255; f7[x]=255; f8[x]=255;
    }
    clear_cube=true;
  }
  //time mode
    if(status_setup==1)
    {
      change_time();
    }
    else
    {
      //clear cube

      
      time.gettime();
      time_hour=time.Hours;
      time_minute=time.minutes;
      time_day=time.day;
      time_month=time.month;
      time_year=time.year;
      time_day_of_week=time.weekday;
  
      if(status_reset==1)
      {
        left_side(time.month,0);
        right_side(time.day);
        word_top(3);
        for(int x=0; x<500; x++)
        {
        cube(f1,f2,f3,f4,f5,f6,f7,f8);
        }
        status_reset=0;
      }
      else
      {
      if(time_seconds!=time.seconds && time_x<30)
      {
        left_side(time.Hours,1);
        right_side(time.minutes);
        day_of_week(time.weekday);
        cube(f1,f2,f3,f4,f5,f6,f7,f8);
        time_x++;
        if(time_x==30)time_seconds=time.seconds;
      }
      else
      {
        left_side(time.Hours,0);
        right_side(time.minutes);
        day_of_week(time.weekday);
        cube(f1,f2,f3,f4,f5,f6,f7,f8);
        time_x=0;
      }
      }
      
     } 
  }
  
  
  if(status_mode==-1)
  {
    if(clear_cube==true)clear_cube=false;
    //programm mode
    if(status_setup==1)
    {
      file_name=change_programm();
      file_position=0;
      status_setup=0;
    }
    else
    {
      SD.begin(10);//Initialization for SD
      CubeFile=SD.open(file_name);
      if(CubeFile.available()>file_position)
      {
      for(char x=0; x<8; x++)
      {
        CubeFile.seek(file_position);
        f1[x]=CubeFile.peek();
        file_position++;
        CubeFile.seek(file_position);
        f2[x]=CubeFile.peek();
        file_position++;
        CubeFile.seek(file_position);
        f3[x]=CubeFile.peek();
        file_position++;
        CubeFile.seek(file_position);
        f4[x]=CubeFile.peek();
        file_position++;
        CubeFile.seek(file_position);
        f5[x]=CubeFile.peek();
        file_position++;
        CubeFile.seek(file_position);
        f6[x]=CubeFile.peek();
        file_position++;
        CubeFile.seek(file_position);
        f7[x]=CubeFile.peek();
        file_position++;
        CubeFile.seek(file_position);
        f8[x]=CubeFile.peek();
        file_position++;
      }
      cube(f1,f2,f3,f4,f5,f6,f7,f8);
      }
      else
      {
        file_position=0;
        file_name=change_programm();
      }
      CubeFile.close();
      }
  }
}

void word_top(char x)
{
  switch(x){
    case 0:     f1[6]=B10111011;    f1[5]=B10111011;    f1[4]=B10000011;    f1[3]=B10111011;    f1[2]=B10111011;    f1[1]=B10111011;    break;//H
    case 1:     f1[6]=B10111011;    f1[5]=B10010011;    f1[4]=B10101011;    f1[3]=B10111011;    f1[2]=B10111011;    f1[1]=B10111011;    break;//M
    case 2:     f1[6]=B10111011;    f1[5]=B11010111;    f1[4]=B11101111;    f1[3]=B11101111;    f1[2]=B11101111;    f1[1]=B11101111;    break;//Y
    case 3:     f1[6]=B10001111;    f1[5]=B10110111;    f1[4]=B10111011;    f1[3]=B10111011;    f1[2]=B10110111;    f1[1]=B10001111;    break;//D
    case 4:     f1[6]=B10111111;    f1[5]=B10010111;    f1[4]=B10101011;    f1[3]=B10101011;    f1[2]=B10101011;    f1[1]=B10101011;    break;//m
    case 5:     f1[6]=B11111111;    f1[5]=B10111011;    f1[4]=B10101011;    f1[3]=B10101011;    f1[2]=B10101011;    f1[1]=B11010111;    break;//w
    case 6:     f1[6]=B10001111;    f1[5]=B10110111;    f1[4]=B10110111;    f1[3]=B10001111;    f1[2]=B10111111;    f1[1]=B10111111;    break;}//P
}

void day_of_week(char x)
{
  switch(x){
  case 0: f1[6]=B10011111;f1[5]=B10101011;f1[4]=B10010101;f1[3]=B10010111;f1[2]=B10100101;f1[1]=B10011011; break;//Вс
  case 1: f1[6]=B10001111;f1[5]=B10100101;f1[4]=B10100101;f1[3]=B10100001;f1[2]=B10100101;f1[1]=B10100101; break;//Пн
  case 2: f1[6]=B10011111;f1[5]=B10100001;f1[4]=B10011011;f1[3]=B10011011;f1[2]=B10101011;f1[1]=B10011011; break;//Вт
  case 3: f1[6]=B11011111;f1[5]=B10100011;f1[4]=B10110101;f1[3]=B10110011;f1[2]=B10100111;f1[1]=B11010111; break;//Ср
  case 4: f1[6]=B10101111;f1[5]=B10100001;f1[4]=B10101011;f1[3]=B11001011;f1[2]=B11101011;f1[1]=B11101011; break;//Чт
  case 5: f1[6]=B10001111;f1[5]=B10100001;f1[4]=B10101011;f1[3]=B10101011;f1[2]=B10101011;f1[1]=B10101011; break;//Пт
  case 6: f1[6]=B11011111;f1[5]=B10100001;f1[4]=B10110111;f1[3]=B10110011;f1[2]=B10100101;f1[1]=B11010011; break;}//Сб
}

void right_side(char x)
{
  char x1, x2;
  x1=x/10;
  x2=x%10;
  char y1, y2, y3, y_x;
  for(char y=0; y<2; y++)
  {
    if(y==0)
    {
     y1=1; y2=2; y3=3; y_x=x1;
    }
    else
    {
     y1=5; y2=6; y3=7; y_x=x2;
    }
        switch(y_x){
        case 0: f3[y3]=254; f4[y3]=254; f5[y3]=254; f6[y3]=254; f7[y3]=254;  f3[y2]=254; f4[y2]=255; f5[y2]=255; f6[y2]=255; f7[y2]=254;  f3[y1]=254; f4[y1]=254; f5[y1]=254; f6[y1]=254; f7[y1]=254; break;
        case 1: f3[y3]=254; f4[y3]=254; f5[y3]=254; f6[y3]=254; f7[y3]=254;  f3[y2]=255; f4[y2]=254; f5[y2]=255; f6[y2]=255; f7[y2]=255;  f3[y1]=255; f4[y1]=255; f5[y1]=254; f6[y1]=255; f7[y1]=255; break;
        case 2: f3[y3]=254; f4[y3]=254; f5[y3]=254; f6[y3]=255; f7[y3]=254;  f3[y2]=254; f4[y2]=255; f5[y2]=254; f6[y2]=255; f7[y2]=254;  f3[y1]=254; f4[y1]=255; f5[y1]=254; f6[y1]=254; f7[y1]=254; break;
        case 3: f3[y3]=254; f4[y3]=254; f5[y3]=254; f6[y3]=254; f7[y3]=254;  f3[y2]=254; f4[y2]=255; f5[y2]=254; f6[y2]=255; f7[y2]=254;  f3[y1]=254; f4[y1]=255; f5[y1]=254; f6[y1]=255; f7[y1]=254; break;
        case 4: f3[y3]=254; f4[y3]=254; f5[y3]=254; f6[y3]=254; f7[y3]=254;  f3[y2]=255; f4[y2]=255; f5[y2]=254; f6[y2]=255; f7[y2]=255;  f3[y1]=254; f4[y1]=254; f5[y1]=254; f6[y1]=255; f7[y1]=255; break;
        case 5: f3[y3]=254; f4[y3]=255; f5[y3]=254; f6[y3]=254; f7[y3]=254;  f3[y2]=254; f4[y2]=255; f5[y2]=254; f6[y2]=255; f7[y2]=254;  f3[y1]=254; f4[y1]=254; f5[y1]=254; f6[y1]=255; f7[y1]=254; break;
        case 6: f3[y3]=254; f4[y3]=255; f5[y3]=254; f6[y3]=254; f7[y3]=254;  f3[y2]=254; f4[y2]=255; f5[y2]=254; f6[y2]=255; f7[y2]=254;  f3[y1]=254; f4[y1]=254; f5[y1]=254; f6[y1]=254; f7[y1]=254; break;
        case 7: f3[y3]=254; f4[y3]=254; f5[y3]=255; f6[y3]=255; f7[y3]=255;  f3[y2]=254; f4[y2]=255; f5[y2]=254; f6[y2]=255; f7[y2]=255;  f3[y1]=254; f4[y1]=255; f5[y1]=255; f6[y1]=254; f7[y1]=254; break;
        case 8: f3[y3]=254; f4[y3]=254; f5[y3]=254; f6[y3]=254; f7[y3]=254;  f3[y2]=254; f4[y2]=255; f5[y2]=254; f6[y2]=255; f7[y2]=254;  f3[y1]=254; f4[y1]=254; f5[y1]=254; f6[y1]=254; f7[y1]=254; break;
        case 9: f3[y3]=254; f4[y3]=254; f5[y3]=254; f6[y3]=254; f7[y3]=254;  f3[y2]=254; f4[y2]=255; f5[y2]=254; f6[y2]=255; f7[y2]=254;  f3[y1]=254; f4[y1]=254; f5[y1]=254; f6[y1]=255; f7[y1]=254; break;}
    }
  }
  
void left_side(char x, char y)
  {
    if(y==0)
    {
  switch(x){
      case 0: f3[0]=B00010001;  f4[0]=B01010101;  f5[0]=B01010101;  f6[0]=B01010101;  f7[0]=B00010001; break;
      case 1: f3[0]=B00011101;  f4[0]=B01011001;  f5[0]=B01010101;  f6[0]=B01011101;  f7[0]=B00011101; break;
      case 2: f3[0]=B00010001;  f4[0]=B01011101;  f5[0]=B01010001;  f6[0]=B01010111;  f7[0]=B00010001; break;
      case 3: f3[0]=B00010001;  f4[0]=B01011101;  f5[0]=B01010001;  f6[0]=B01011101;  f7[0]=B00010001; break;
      case 4: f3[0]=B00010101;  f4[0]=B01010101;  f5[0]=B01010001;  f6[0]=B01011101;  f7[0]=B00011101; break;
      case 5: f3[0]=B00010001;  f4[0]=B01010111;  f5[0]=B01010001;  f6[0]=B01011101;  f7[0]=B00010001; break;
      case 6: f3[0]=B00010001;  f4[0]=B01010111;  f5[0]=B01010001;  f6[0]=B01010101;  f7[0]=B00010001; break;
      case 7: f3[0]=B00010001;  f4[0]=B01011101;  f5[0]=B01011011;  f6[0]=B01010111;  f7[0]=B00010111; break;
      case 8: f3[0]=B00010001;  f4[0]=B01010101;  f5[0]=B01010001;  f6[0]=B01010101;  f7[0]=B00010001; break;
      case 9: f3[0]=B00010001;  f4[0]=B01010101;  f5[0]=B01010001;  f6[0]=B01011101;  f7[0]=B00010001; break;
      case 10: f3[0]=B11010001;  f4[0]=B10010101;  f5[0]=B01010101;  f6[0]=B11010101;  f7[0]=B11010001; break;
      case 11: f3[0]=B11011101;  f4[0]=B10011001;  f5[0]=B01010101;  f6[0]=B11011101;  f7[0]=B11011101; break;
      case 12: f3[0]=B11010001;  f4[0]=B10011101;  f5[0]=B01010001;  f6[0]=B11010111;  f7[0]=B11010001; break;
      case 13: f3[0]=B11010001;  f4[0]=B10011101;  f5[0]=B01010001;  f6[0]=B11011101;  f7[0]=B11010001; break;
      case 14: f3[0]=B11010101;  f4[0]=B10010101;  f5[0]=B01010001;  f6[0]=B11011101;  f7[0]=B11011101; break;
      case 15: f3[0]=B11010001;  f4[0]=B10010111;  f5[0]=B01010001;  f6[0]=B11011101;  f7[0]=B11010001; break;
      case 16: f3[0]=B11010001;  f4[0]=B10010111;  f5[0]=B01010001;  f6[0]=B11010101;  f7[0]=B11010001; break;
      case 17: f3[0]=B11010001;  f4[0]=B10011101;  f5[0]=B01011011;  f6[0]=B11010111;  f7[0]=B11010111; break;
      case 18: f3[0]=B11010001;  f4[0]=B10010101;  f5[0]=B01010001;  f6[0]=B11010101;  f7[0]=B11010001; break;
      case 19: f3[0]=B11010001;  f4[0]=B10010101;  f5[0]=B01010001;  f6[0]=B11011101;  f7[0]=B11010001; break;
      case 20: f3[0]=B00010001;  f4[0]=B11010101;  f5[0]=B00010101;  f6[0]=B01110101;  f7[0]=B00010001; break;
      case 21: f3[0]=B00011101;  f4[0]=B11011001;  f5[0]=B00010101;  f6[0]=B01111101;  f7[0]=B00011101; break;
      case 22: f3[0]=B00010001;  f4[0]=B11011101;  f5[0]=B00010001;  f6[0]=B01110111;  f7[0]=B00010001; break;
      case 23: f3[0]=B00010001;  f4[0]=B11011101;  f5[0]=B00010001;  f6[0]=B01111101;  f7[0]=B00010001; break;
      case 24: f3[0]=B11111111;  f4[0]=B11111111;  f5[0]=B11111111;  f6[0]=B11111111;  f7[0]=B11111111; break;
      case 25: f3[0]=B10111011;  f4[0]=B10101011;  f5[0]=B10101011;  f6[0]=B10101011;  f7[0]=B11010111; break;};
    }
    else
    {
       switch(x){
      case 0: f3[0]=B00010001;  f4[0]=B01010100;  f5[0]=B01010101;  f6[0]=B01010100;  f7[0]=B00010001; break;
      case 1: f3[0]=B00011101;  f4[0]=B01011000;  f5[0]=B01010101;  f6[0]=B01011100;  f7[0]=B00011101; break;
      case 2: f3[0]=B00010001;  f4[0]=B01011100;  f5[0]=B01010001;  f6[0]=B01010110;  f7[0]=B00010001; break;
      case 3: f3[0]=B00010001;  f4[0]=B01011100;  f5[0]=B01010001;  f6[0]=B01011100;  f7[0]=B00010001; break;
      case 4: f3[0]=B00010101;  f4[0]=B01010100;  f5[0]=B01010001;  f6[0]=B01011100;  f7[0]=B00011101; break;
      case 5: f3[0]=B00010001;  f4[0]=B01010110;  f5[0]=B01010001;  f6[0]=B01011100;  f7[0]=B00010001; break;
      case 6: f3[0]=B00010001;  f4[0]=B01010110;  f5[0]=B01010001;  f6[0]=B01010100;  f7[0]=B00010001; break;
      case 7: f3[0]=B00010001;  f4[0]=B01011100;  f5[0]=B01011011;  f6[0]=B01010110;  f7[0]=B00010111; break;
      case 8: f3[0]=B00010001;  f4[0]=B01010100;  f5[0]=B01010001;  f6[0]=B01010100;  f7[0]=B00010001; break;
      case 9: f3[0]=B00010001;  f4[0]=B01010100;  f5[0]=B01010001;  f6[0]=B01011100;  f7[0]=B00010001; break;
      case 10: f3[0]=B11010001;  f4[0]=B10010100;  f5[0]=B01010101;  f6[0]=B11010100;  f7[0]=B11010001; break;
      case 11: f3[0]=B11011101;  f4[0]=B10011000;  f5[0]=B01010101;  f6[0]=B11011100;  f7[0]=B11011101; break;
      case 12: f3[0]=B11010001;  f4[0]=B10011100;  f5[0]=B01010001;  f6[0]=B11010110;  f7[0]=B11010001; break;
      case 13: f3[0]=B11010001;  f4[0]=B10011100;  f5[0]=B01010001;  f6[0]=B11011100;  f7[0]=B11010001; break;
      case 14: f3[0]=B11010101;  f4[0]=B10010100;  f5[0]=B01010001;  f6[0]=B11011100;  f7[0]=B11011101; break;
      case 15: f3[0]=B11010001;  f4[0]=B10010110;  f5[0]=B01010001;  f6[0]=B11011100;  f7[0]=B11010001; break;
      case 16: f3[0]=B11010001;  f4[0]=B10010110;  f5[0]=B01010001;  f6[0]=B11010100;  f7[0]=B11010001; break;
      case 17: f3[0]=B11010001;  f4[0]=B10011100;  f5[0]=B01011011;  f6[0]=B11010110;  f7[0]=B11010111; break;
      case 18: f3[0]=B11010001;  f4[0]=B10010100;  f5[0]=B01010001;  f6[0]=B11010100;  f7[0]=B11010001; break;
      case 19: f3[0]=B11010001;  f4[0]=B10010100;  f5[0]=B01010001;  f6[0]=B11011100;  f7[0]=B11010001; break;
      case 20: f3[0]=B00010001;  f4[0]=B11010100;  f5[0]=B00010101;  f6[0]=B01110100;  f7[0]=B00010001; break;
      case 21: f3[0]=B00011101;  f4[0]=B11011000;  f5[0]=B00010101;  f6[0]=B01111100;  f7[0]=B00011101; break;
      case 22: f3[0]=B00010001;  f4[0]=B11011100;  f5[0]=B00010001;  f6[0]=B01110110;  f7[0]=B00010001; break;
      case 23: f3[0]=B00010001;  f4[0]=B11011100;  f5[0]=B00010001;  f6[0]=B01111100;  f7[0]=B00010001; break;};
    }
  }
  
void change_time()
{
  {
      if(status_change==1)
      {
        if(status_up==1)
        {
          status_up=0;
          time_hour++;
          if(time_hour==24)time_hour=0;
        }
        if(status_down==1)
        {
          status_down=0;
          time_hour--;
          if(time_hour==-1)time_hour=23;
        }
        right_side(time_hour);
        left_side(24,0);
        word_top(0);
        cube(f1,f2,f3,f4,f5,f6,f7,f8);  
      }
      if(status_change==2)
      {
        if(status_up==1)
        {
          status_up=0;
          time_minute++;
          if(time_minute==60)time_minute=0;
        }
        if(status_down==1)
        {
          status_down=0;
          time_minute--;
          if(time_minute==-1)time_minute=59;
        }
        right_side(time_minute);
        left_side(24,0);
        word_top(1);
        cube(f1,f2,f3,f4,f5,f6,f7,f8);  
      }
      if(status_change==3)
      {
        if(status_up==1)
        {
          status_up=0;
          time_day++;
          if(time_day==32)time_day=1;
        }
        if(status_down==1)
        {
          status_down=0;
          time_day--;
          if(time_day==0)time_day=31;
        }
        right_side(time_day);
        left_side(24,0);
        word_top(3);
        cube(f1,f2,f3,f4,f5,f6,f7,f8);  
      }
      if(status_change==4)
      {
        if(status_up==1)
        {
          status_up=0;
          time_month++;
          if(time_month==13)time_month=1;
        }
        if(status_down==1)
        {
          status_down=0;
          time_month--;
          if(time_month==0)time_month=12;
        }
        right_side(time_month);
        left_side(24,0);
        word_top(4);
        cube(f1,f2,f3,f4,f5,f6,f7,f8);  
      }
      if(status_change==5)
      {
        if(status_up==1)
        {
          status_up=0;
          time_year++;
          if(time_year==100)time_year=0;
        }
        if(status_down==1)
        {
          status_down=0;
          time_year--;
          if(time_year==-1)time_year=99;
        }
        right_side(time_year);
        left_side(20,0);
        word_top(2);
        cube(f1,f2,f3,f4,f5,f6,f7,f8);  
      }
      if(status_change==6)
      {
        if(status_up==1)
        {
          status_up=0;
          time_day_of_week++;
          if(time_day_of_week==7)time_day_of_week=0;
        }
        if(status_down==1)
        {
          status_down=0;
          time_day_of_week--;
          if(time_day_of_week==-1)time_day_of_week=6;
        }
        day_of_week(time_day_of_week);
        right_side(time_day_of_week);
        left_side(25,0);
        cube(f1,f2,f3,f4,f5,f6,f7,f8);  
      }
      if(status_reset==1)
      {
        status_setup=0;
        status_reset=0;
        time.settime(0, time_minute, time_hour, time_day, time_month, time_year, time_day_of_week);
      }
    }
  }
  
String change_programm()
{
  String x;
  bool d_0=false;
  bool d_1=false;
  d_1=change_digital(file_name_2);
  if(d_1==true)
  {
    d_0=change_digital(file_name_1);
  }
  if(d_0==true)
  {
    change_digital(file_name_0);
  }
  x=digital_to_word(file_name_0)+digital_to_word(file_name_1)+digital_to_word(file_name_2)+".bin";
  if(!SD.exists(x))
  {
    x="001.bin";
    file_name_0=0;
    file_name_1=0;
    file_name_2=1;
  }
  return(x);
}


bool change_digital(char &digital)
{
  bool x=false;
  switch(digital)
  {
    case 0: digital=1; break;
    case 1: digital=2; break;
    case 2: digital=3; break;
    case 3: digital=4; break;
    case 4: digital=5; break;
    case 5: digital=6; break;
    case 6: digital=7; break;
    case 7: digital=8; break;
    case 8: digital=9; break;
    case 9: digital=0; x=true; break;
  }
  return (x);
}

String digital_to_word(char digital)
{
  String x;
  switch(digital)
  {
    case 0: x="0"; break;
    case 1: x="1"; break;
    case 2: x="2"; break;
    case 3: x="3"; break;
    case 4: x="4"; break;
    case 5: x="5"; break;
    case 6: x="6"; break;
    case 7: x="7"; break;
    case 8: x="8"; break;
    case 9: x="9"; break;
  }
  return (x);
}


void f_mode()
{
  button_mode=1;
  noInterrupts();
}

void f_setup()
{
  button_setup=1;
  noInterrupts();
}

void cube(byte f1[8], byte f2[8], byte f3[8], byte f4[8], byte f5[8], byte f6[8], byte f7[8], byte f8[8])// функция прорисовки куба
{
    layer_column(f1,B00000001);
    layer_column(f2,B00000010);
    layer_column(f3,B00000100);
    layer_column(f4,B00001000);
    layer_column(f5,B00010000);
    layer_column(f6,B00100000);
    layer_column(f7,B01000000);
    layer_column(f8,B10000000);
    layer_column(f5,B00000000);
}

void layer_column(byte lc_column[8], byte lc_layer)// функчия выбора слоя и выполнение функции заполения столбцов
{
  // устанавливаем синхронизацию "защелки" на LOW
  digitalWrite(latch_layer, LOW);
  // выбираем слой
  shiftOut(data_layer, clock_layer, MSBFIRST, lc_layer);
  // выбираем столбцы
  column(lc_column);
  //"защелкиваем" регистр, тем самым устанавливая значения на выходах
  digitalWrite(latch_layer, HIGH);
}

void column(byte c_column[8])// функция заполнения столбцов
{
  // устанавливаем синхронизацию "защелки" на LOW
  digitalWrite(latch_column, LOW);
  // передаем последовательно на dataPin
  for(byte x=0; x<8; x++)
    {
      shiftOut(data_column, clock_column, MSBFIRST, c_column[x]); 
    }
  //"защелкиваем" регистр, тем самым устанавливая значения на выходах
  digitalWrite(latch_column, HIGH);
}

Вот ссылка на материалы - http://cxem.net/arduino/arduino210.php

b707
Offline
Зарегистрирован: 26.05.2017

 А есть уверенность. что оно вообще должно работать?  А то, судя по коду - писал настоящий %%%%  -  кто ж эффекты записывает через СВИТЧИ с 25 вариантами ...

Кстати, в скетче библиотека SDи куяа массивов... а памяти-то хватает?

 

DarkVoice
Offline
Зарегистрирован: 18.06.2018

Уверенности в работоспособности кода всё меньше и меньше, по этому и попросил помощи.

Памяти вроде как хватает.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DarkVoice пишет:

Памяти вроде как хватает.

на чём основано это заявление? Проверки проводились? Память мониторилась? Как?

DarkVoice
Offline
Зарегистрирован: 18.06.2018

ЕвгенийП пишет:

на чём основано это заявление? Проверки проводились? Память мониторилась? Как?

Проверки не проводились, слепая вера характеристикам и результатам компиляции.

На сколько мне известно, скетчи храняться в Flash-памяти, скетч занимает около 3 тыс. байт, когда объём Flash-памяти составляет 16 кБ

b707
Offline
Зарегистрирован: 26.05.2017

DarkVoice пишет:

Проверки не проводились, слепая вера характеристикам и результатам компиляции.

На сколько мне известно, скетчи храняться в Flash-памяти, скетч занимает около 3 тыс. байт, когда объём Flash-памяти составляет 16 кБ

По этим словам видно, что вы совершенно не в теме. Не надо фантазировать - откомпилируйте скетч и выложите диагностику, где указывается ращмер кода и данных.

Хотя если вам не интересно - можете не делать. Нам тут тем более :)

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DarkVoice пишет:

На сколько мне известно, скетчи храняться в Flash-памяти, скетч занимает около 3 тыс. байт, когда объём Flash-памяти составляет 16 кБ

Во-первых, не 16, а во-вторых, причёт тут вообще flash? Вы пользуете динамическую память, и что там у Вас творится в ram надо смотреть и проверять, а не слепо верить.