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