#include #define ringpin A0 #define greenbutton A6 #define redbutton A7 #define leddatapin 12 #define startpin 2 #define countpin 4 #define leasetime 180000 CRGB led[countpin]; uint8_t time=0; unsigned long lefttimes[countpin]; unsigned long lastmills,currentmills; int nen=0; void setup() { //Инициализируем светодиоды FastLED.addLeds(led, countpin); //Инициализируем розетки и светодиоды for (int i=0; i0) { led[i].r=quadwave8(time); led[i].b=0; led[i].g=0; } if (lefttimes[i]>30000) { led[i].r=quadwave8(time)/2; led[i].b=0; led[i].g=quadwave8(time)/2; } if (lefttimes[i]>120000) led[i]=CRGB::Green;//green } FastLED.show(); } //Обновление состояния розеток void pins() { currentmills=millis(); for (int i=0; i(currentmills-lastmills)) { lefttimes[i]=lefttimes[i]-(currentmills-lastmills); } else { if (lefttimes[i]>0) { lefttimes[i]=0; digitalWrite(i+startpin,HIGH); nen--; } } } lastmills=currentmills; } //Добавление времени или включение новой розетки void enablepin() { if (nen0); digitalWrite(nen+startpin, LOW); lefttimes[nen]=leasetime; led[nen]=CRGB::Green; nen++; FastLED.show(); } else //Добавление времени для минимальной розетки { int mini=0; for(int i=1; i0)) mini=i; } lefttimes[mini]=lefttimes[mini]+leasetime; } } //Если пришёл звонок void checkring() { if (digitalRead(ringpin)==HIGH) { enablepin(); digitalWrite(greenbutton,HIGH); delay(200); digitalWrite(greenbutton,LOW); delay(3500); digitalWrite(redbutton,HIGH); delay(200); digitalWrite(redbutton,LOW); } } void loop() { pins(); //обновление состояния розеток leds(); //обновление состояния светодиодов checkring(); //проверяем пришёл ли звонок delay(30); //Задержка 30 мс }