#include <Adafruit_NeoPixel.h>
#include <SPI.h>
#include "button.h"
button btn1(9);    // указываем пин кнопки включения/выключения света 
button btn2(12);    // указываем пин кнопки включения/выключения эффектов
boolean button_state; // текущее состояние ленты по кнопке свет вкл/выкл
boolean button_effect; // текущее состояние ленты по кнопке эффектов
#define PIN_PHOTO_SENSOR A0
int pirPin1 = 3;
int pirPin2 = 5;
#define LED_COUNT 16
#define LED_PIN 7

Adafruit_NeoPixel LED_Ring = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  pinMode(13, OUTPUT);   
  pinMode(pirPin1, INPUT);
  pinMode(pirPin2, INPUT);
  button_state=false;
  LED_Ring.begin(); 
}

void button_press(){
      button_state=!button_state;
      if (button_state==true){
        digitalWrite(13, HIGH);
        for (int i = 0; i < LED_COUNT; i++){
          LED_Ring.setPixelColor(i, LED_Ring.Color(255,255, 0));
          LED_Ring.show();
        };
      } else {
        digitalWrite(13, LOW);
        for (int i = 0; i < LED_COUNT; i++){
          LED_Ring.setPixelColor(i, LED_Ring.Color(0,0, 0));
          LED_Ring.show();
        };        
      };
      delay(1000);
}
// показываем всякие эффекты, пока снова не нажманута любая кнопка
void button_effect_press(){
  int randLed;
  int randR;
  int randG;
  int randB;
  while(true){
    if (btn1.click()) {break;};
    if (btn2.click()) {break;};
    randLed = random(0, LED_COUNT);
    randR = random(0, 255);
    randG = random(0, 255);
    randB = random(0, 255);
    LED_Ring.setPixelColor(randLed, LED_Ring.Color(randR,randG, randB));
    LED_Ring.show();
    delay(100);
  }
}  
void sleep(int ms){
  unsigned long time_old; 
  time_old = millis();
  while(true){
    if (btn1.click()) {button_press();};
    if ((millis()- time_old) >= ms){
      break;
    }
  };
}
void loop() {
  while(true){
    if (btn1.click()) {button_press();}; //нажата кнопка включения-выключения света
    if (btn2.click()) {delay(1000);button_effect_press();}; //нажата кнопка включения-выключения света

    int light_level = analogRead(PIN_PHOTO_SENSOR); // если >300, то считаем что и так светло
    light_level=100; // для отладки - потом убрать!

    int move1 = digitalRead(pirPin1);
    int move2 = digitalRead(pirPin2);
    if ((move1 == HIGH) or (move2 == HIGH)){
      if (button_state==false){  // если свет не включен кнопкой
        if (light_level<250){    // если на леснице темно
          for (int i = 0; i < LED_COUNT; i++){
            if (move1 == HIGH){
              LED_Ring.setPixelColor(i, LED_Ring.Color(255, 0, 0)); // Красный цвет.
            } else {
              LED_Ring.setPixelColor(LED_COUNT-i-1, LED_Ring.Color(255, 0, 0)); // Красный цвет.
            };
            LED_Ring.show();
            sleep(300);
            if (button_state==true){break;};
          };
          if (button_state==false){
            for (int i = 0; i < LED_COUNT; i++){
              LED_Ring.setPixelColor(i, LED_Ring.Color(0, 0, 200));
            };
            LED_Ring.show();
            sleep(6000);
            for (int i = 0; i < LED_COUNT; i++){
              if (move1 == HIGH){
                LED_Ring.setPixelColor(i, LED_Ring.Color(0, 0, 0)); // Красный цвет.
              } else {
                LED_Ring.setPixelColor(LED_COUNT-i-1, LED_Ring.Color(0, 0, 0)); // Красный цвет.
              };
              LED_Ring.show();
              sleep(300);
              if (button_state==true){break;};
            };              
          };
        }
      };
    };
  };

}