//2024.11.28 - СветоЭффекты на Arduino Nano

//===================
//Переменные для реализации случайного алгоритма зажигания светодиодов
long Led_N_min = 1;  //Начальный номер комбинации светодиодов
long Led_N_max = 36; //Конечный номер комбинации светодиодов
int DT_RND_min = 1;  //Номер 1-го светодиода
int DT_RND_max = 5;  //Номер 5-го светодиода
//-------------------------------
long Led_rnd = 1;    //Случайный номер комбинации светодиодов
int DT_rnd = 1;      //Случайное время свечения комбинации светодиодов
//===================

//===================
//Подключение светодиодов
int Rpin = 12;  //Красный
int Gpin = 11;  //Зеленый
int Bpin = 10;  //Синий
int Ypin = 9;   //Желтый
int Wpin = 8;   //Белый
//===================


void setup() 
{
  //-------------------------------
  pinMode(13, OUTPUT); //встроенный светодиод
  pinMode(Rpin, OUTPUT);
  pinMode(Gpin, OUTPUT);
  pinMode(Bpin, OUTPUT);
  pinMode(Ypin, OUTPUT);
  pinMode(Wpin, OUTPUT);
  //-------------------------------
  //-------------------------------
  //Тест на проверку работоспособности при включении питания
  digitalWrite(13, LOW);
  digitalWrite(Rpin, LOW);
  digitalWrite(Gpin, LOW);
  digitalWrite(Bpin, LOW);
  digitalWrite(Ypin, LOW);
  digitalWrite(Wpin, LOW);
  delay(500);
  digitalWrite(13, HIGH);
  digitalWrite(Rpin, HIGH);
  digitalWrite(Gpin, HIGH);
  digitalWrite(Bpin, HIGH);
  digitalWrite(Ypin, HIGH);
  digitalWrite(Wpin, HIGH);
  delay(500);
  //-------------------------------  
}

void loop() 
{
  //--------------------------
  //Погасить все светодиоды
  digitalWrite(13, LOW);
  digitalWrite(Rpin, LOW);
  digitalWrite(Gpin, LOW);
  digitalWrite(Bpin, LOW);
  digitalWrite(Ypin, LOW);
  digitalWrite(Wpin, LOW);
  //--------------------------
  //--------------------------
  //Получить случайный номер комбинации светодиодов
  Led_rnd = random(Led_N_min, Led_N_max+1);
  if (Led_rnd < Led_N_min) {Led_rnd < Led_N_min; }
  if (Led_rnd > Led_N_max) {Led_rnd < Led_N_max; }  
  //--------------------------
  //--------------------------
  //Получить случайную величину времени свечения комбинации светодиодов
  DT_rnd =  random(DT_RND_min, DT_RND_max+1);
  if (DT_rnd < 1) { DT_rnd = 1; }
  //--------------------------
  
  //***********************************************************
  //Реализация алгоритма (свечение соответствующей комбинации светодиодов)
  if (Led_rnd <= 1) 
  { 
    digitalWrite(Rpin, HIGH); 
  }
  if (Led_rnd == 2) 
  { 
    digitalWrite(Gpin, HIGH); 
   }
  if (Led_rnd == 3) 
  { 
    digitalWrite(Bpin, HIGH); 
  }
  if (Led_rnd == 4) 
  { 
    digitalWrite(Ypin, HIGH); 
  }
  if (Led_rnd == 5) 
  { 
    digitalWrite(Wpin, HIGH); 
  }
  if (Led_rnd == 6) 
  { 
    //+R +G +B +Y +W
    digitalWrite(Rpin, HIGH); 
    digitalWrite(Gpin, HIGH); 
    digitalWrite(Bpin, HIGH); 
    digitalWrite(Ypin, HIGH); 
    digitalWrite(Wpin, HIGH); 
  }
  if (Led_rnd == 7) 
  { 
    //+R +G +B +Y -W
    digitalWrite(Rpin, HIGH); 
    digitalWrite(Gpin, HIGH); 
    digitalWrite(Bpin, HIGH); 
    digitalWrite(Ypin, HIGH); 
    digitalWrite(Wpin, LOW); 
  }
  if (Led_rnd == 8) 
  { 
    //+R +G +B -Y +W
    digitalWrite(Rpin, HIGH); 
    digitalWrite(Gpin, HIGH); 
    digitalWrite(Bpin, HIGH); 
    digitalWrite(Ypin, LOW); 
    digitalWrite(Wpin, HIGH); 
  }
  if (Led_rnd == 9) 
  { 
    //+R +G +B -Y -W
    digitalWrite(Rpin, HIGH); 
    digitalWrite(Gpin, HIGH); 
    digitalWrite(Bpin, HIGH); 
    digitalWrite(Ypin, LOW); 
    digitalWrite(Wpin, LOW); 
  }
  if (Led_rnd == 10) 
  { 
    //+R +G -B +Y +W
    digitalWrite(Rpin, HIGH); 
    digitalWrite(Gpin, HIGH); 
    digitalWrite(Bpin, LOW); 
    digitalWrite(Ypin, HIGH); 
    digitalWrite(Wpin, HIGH);     
  }
  if (Led_rnd == 11) 
  { 
    //+R +G -B +Y -W
    digitalWrite(Rpin, HIGH); 
    digitalWrite(Gpin, HIGH); 
    digitalWrite(Bpin, LOW); 
    digitalWrite(Ypin, HIGH); 
    digitalWrite(Wpin, LOW); 
  }
  if (Led_rnd == 12) 
  { 
    //+R +G -B -Y +W
    digitalWrite(Rpin, HIGH); 
    digitalWrite(Gpin, HIGH); 
    digitalWrite(Bpin, LOW); 
    digitalWrite(Ypin, LOW); 
    digitalWrite(Wpin, HIGH); 
  }
  if (Led_rnd == 13) 
  { 
    //+R +G -B -Y -W
    digitalWrite(Rpin, HIGH); 
    digitalWrite(Gpin, HIGH); 
    digitalWrite(Bpin, LOW); 
    digitalWrite(Ypin, LOW); 
    digitalWrite(Wpin, LOW); 
  }
  if (Led_rnd == 14) 
  { 
    //+R -G +B +Y +W
    digitalWrite(Rpin, HIGH); 
    digitalWrite(Gpin, LOW); 
    digitalWrite(Bpin, HIGH); 
    digitalWrite(Ypin, HIGH); 
    digitalWrite(Wpin, HIGH); 
  }
  if (Led_rnd == 15) 
  { 
    //+R -G +B +Y -W
    digitalWrite(Rpin, HIGH); 
    digitalWrite(Gpin, LOW); 
    digitalWrite(Bpin, HIGH); 
    digitalWrite(Ypin, HIGH); 
    digitalWrite(Wpin, LOW); 
  }
  if (Led_rnd == 16) 
  { 
    //+R -G +B -Y +W
    digitalWrite(Rpin, HIGH); 
    digitalWrite(Gpin, LOW); 
    digitalWrite(Bpin, HIGH); 
    digitalWrite(Ypin, LOW); 
    digitalWrite(Wpin, HIGH); 
  }
  if (Led_rnd == 17) 
  { 
    //+R -G +B -Y -W
    digitalWrite(Rpin, HIGH); 
    digitalWrite(Gpin, LOW); 
    digitalWrite(Bpin, HIGH); 
    digitalWrite(Ypin, LOW); 
    digitalWrite(Wpin, LOW); 
  }
  if (Led_rnd == 18) 
  { 
    //+R -G -B +Y +W
    digitalWrite(Rpin, HIGH); 
    digitalWrite(Gpin, LOW); 
    digitalWrite(Bpin, LOW); 
    digitalWrite(Ypin, HIGH); 
    digitalWrite(Wpin, HIGH); 
  }
  if (Led_rnd == 19) 
  { 
    //+R -G -B +Y -W
    digitalWrite(Rpin, HIGH); 
    digitalWrite(Gpin, LOW); 
    digitalWrite(Bpin, LOW); 
    digitalWrite(Ypin, HIGH); 
    digitalWrite(Wpin, LOW); 
  }
  if (Led_rnd == 20) 
  { 
    //+R -G -B -Y +W
    digitalWrite(Rpin, HIGH); 
    digitalWrite(Gpin, LOW); 
    digitalWrite(Bpin, LOW); 
    digitalWrite(Ypin, LOW); 
    digitalWrite(Wpin, HIGH); 
  }
  if (Led_rnd == 21) 
  { 
    //+R -G -B -Y -W
    digitalWrite(Rpin, HIGH); 
    digitalWrite(Gpin, LOW); 
    digitalWrite(Bpin, LOW); 
    digitalWrite(Ypin, LOW); 
    digitalWrite(Wpin, LOW); 
  }
  if (Led_rnd == 22) 
  { 
     //-R +G +B +Y +W
    digitalWrite(Rpin, LOW); 
    digitalWrite(Gpin, HIGH); 
    digitalWrite(Bpin, HIGH); 
    digitalWrite(Ypin, HIGH); 
    digitalWrite(Wpin, HIGH); 
  }
  if (Led_rnd == 23) 
  { 
    //-R +G +B +Y -W
    digitalWrite(Rpin, LOW); 
    digitalWrite(Gpin, HIGH); 
    digitalWrite(Bpin, HIGH); 
    digitalWrite(Ypin, HIGH); 
    digitalWrite(Wpin, LOW); 
  }
  if (Led_rnd == 24) 
  { 
    //-R +G +B -Y +W
    digitalWrite(Rpin, LOW); 
    digitalWrite(Gpin, HIGH); 
    digitalWrite(Bpin, HIGH); 
    digitalWrite(Ypin, LOW); 
    digitalWrite(Wpin, HIGH); 
  }
  if (Led_rnd == 25) 
  { 
    //-R +G +B -Y -W
    digitalWrite(Rpin, LOW); 
    digitalWrite(Gpin, HIGH); 
    digitalWrite(Bpin, HIGH); 
    digitalWrite(Ypin, LOW); 
    digitalWrite(Wpin, LOW); 
  }
  
  if (Led_rnd == 26) 
  { 
    //-R +G -B +Y +W
    digitalWrite(Rpin, LOW); 
    digitalWrite(Gpin, HIGH); 
    digitalWrite(Bpin, LOW); 
    digitalWrite(Ypin, HIGH); 
    digitalWrite(Wpin, HIGH); 
  }
  if (Led_rnd == 27) 
  { 
    //-R +G -B +Y -W
    digitalWrite(Rpin, LOW); 
    digitalWrite(Gpin, HIGH); 
    digitalWrite(Bpin, LOW); 
    digitalWrite(Ypin, HIGH); 
    digitalWrite(Wpin, LOW); 
  }
  if (Led_rnd == 28) 
  { 
    //-R +G -B -Y +W
    digitalWrite(Rpin, LOW); 
    digitalWrite(Gpin, HIGH); 
    digitalWrite(Bpin, LOW); 
    digitalWrite(Ypin, LOW); 
    digitalWrite(Wpin, HIGH); 
  }
  if (Led_rnd == 29) 
  { 
    //-R +G -B -Y -W
    digitalWrite(Rpin, LOW); 
    digitalWrite(Gpin, HIGH); 
    digitalWrite(Bpin, LOW); 
    digitalWrite(Ypin, LOW); 
    digitalWrite(Wpin, LOW); 
  }
  if (Led_rnd == 30) 
  { 
    //-R -G +B +Y +W
    digitalWrite(Rpin, LOW); 
    digitalWrite(Gpin, LOW); 
    digitalWrite(Bpin, HIGH); 
    digitalWrite(Ypin, HIGH); 
    digitalWrite(Wpin, HIGH); 
  }
  if (Led_rnd == 31) 
  { 
    //-R -G +B +Y -W
    digitalWrite(Rpin, LOW); 
    digitalWrite(Gpin, LOW); 
    digitalWrite(Bpin, HIGH); 
    digitalWrite(Ypin, HIGH); 
    digitalWrite(Wpin, LOW); 
  }
  if (Led_rnd == 32) 
  { 
    //-R -G +B -Y +W
    digitalWrite(Rpin, LOW); 
    digitalWrite(Gpin, LOW); 
    digitalWrite(Bpin, HIGH); 
    digitalWrite(Ypin, LOW); 
    digitalWrite(Wpin, HIGH); 
  }
  if (Led_rnd == 33) 
  { 
    //-R -G +B -Y -W
    digitalWrite(Rpin, LOW); 
    digitalWrite(Gpin, LOW); 
    digitalWrite(Bpin, HIGH); 
    digitalWrite(Ypin, LOW); 
    digitalWrite(Wpin, LOW);     
  }  
  if (Led_rnd == 34) 
  { 
    //-R -G -B +Y +W
    digitalWrite(Rpin, LOW); 
    digitalWrite(Gpin, LOW); 
    digitalWrite(Bpin, LOW); 
    digitalWrite(Ypin, HIGH); 
    digitalWrite(Wpin, HIGH); 
  }
  if (Led_rnd == 35) 
  { 
    //-R -G -B +Y -W
    digitalWrite(Rpin, LOW); 
    digitalWrite(Gpin, LOW); 
    digitalWrite(Bpin, LOW); 
    digitalWrite(Ypin, HIGH); 
    digitalWrite(Wpin, LOW); 
  }
  if (Led_rnd == 36) 
  { 
    //-R -G -B -Y +W
    digitalWrite(Rpin, LOW); 
    digitalWrite(Gpin, LOW); 
    digitalWrite(Bpin, LOW); 
    digitalWrite(Ypin, LOW); 
    digitalWrite(Wpin, HIGH); 
  }
  if (Led_rnd == 37) 
  { 
    //-R -G -B -Y -W
    digitalWrite(Rpin, LOW); 
    digitalWrite(Gpin, LOW); 
    digitalWrite(Bpin, LOW); 
    digitalWrite(Ypin, LOW); 
    digitalWrite(Wpin, LOW); 
  }
  delay(DT_rnd*1000); // Время свечения
  //***********************************************************
}