#include #include // библиотека для ИК byte IR = 11; // pin ИК приемника IRrecv irrecv(IR); // создаем объект получения сигнала с заданного порта decode_results results; // переменная хранящая результат byte X = 0; //начальный режим работы/переменная выбора режима byte S = 0; //начальная яркость slowmo, используется при включении ленты byte YS=0; //начальная яркость slowmo byte fade=1; //шаг изменения яркости ленты slowmo byte Z = 33; //пауза delay для slowmo и стробоскопа byte A=0; //переменная для срабатывания защиты залипания/отключения будильника byte B=0; //переменная для переключения режима мерцания/стробоскопа long previousMillis = 0; //переменная для хранения миллисек (IND) long millisalarm = 0; //точка отсчета миллисек для срабатывания будильника byte buz = EEPROM.read(0); //пин пьезо хранится в EEPROM равен buz=5, либо buz=10 - без звука byte save=0; //устанавливаем маркер на сохранение конфигурации RGB в выбранную кнопку 1-9 byte IND=18; byte INDGND=19; byte SW1=17; //лампочка 1 byte SW2=16; //лампочка 2 byte SW3=15; //лампочка 3 byte SW4=14; //лампочка 4 byte SW5=8; //лампочка 5 byte VCC1=2; // +питания 1 byte VCC2=4; // +питания 2 byte white = 9; // white led byte WLED = 255; //начальная яркость ленты byte red=5; // red led byte green=6; // green led byte blue=10; // blue led byte RLED=250; //яркость red led byte GLED=250; //яркость green led byte BLED=250; //яркость blue led byte RLED1=1; //шаг изменения яркости red byte GLED1=2; //шаг изменения яркости green byte BLED1=3; //шаг изменения яркости blue byte RLED2=3; //шаг изменения яркости red byte GLED2=1; //шаг изменения яркости green byte BLED2=2; //шаг изменения яркости blue byte RLED3=1; //шаг изменения яркости red byte GLED3=3; //шаг изменения яркости green byte BLED3=7; //шаг изменения яркости blue byte RLED4=1; //шаг изменения яркости red byte GLED4=1; //шаг изменения яркости green byte BLED4=1; //шаг изменения яркости blue byte gr=0; //маркер активации green byte rd=0; //маркер активации red byte bl=0; //маркер активации blue byte C=3; //маркер куда подавать VCC byte bright=255; //яркость для RGB byte D=0; //изменение яркости в каждом цикле byte SMART=0; //автоцвет byte E=0; // маркер лампочек byte RGB=0; // rgb smsrt int AB=0; //задержка для beep void setup() { irrecv.enableIRIn(); // включаем ИК-приемник pinMode(IND, OUTPUT); pinMode(INDGND, OUTPUT); pinMode(white, OUTPUT); pinMode(VCC1, OUTPUT); pinMode(VCC2, OUTPUT); pinMode(red, OUTPUT); pinMode(green, OUTPUT); pinMode(blue, OUTPUT); pinMode(3, OUTPUT); pinMode(SW1, OUTPUT); pinMode(SW2, OUTPUT); pinMode(SW3, OUTPUT); pinMode(SW4, OUTPUT); pinMode(SW5, OUTPUT); digitalWrite(VCC1, HIGH); digitalWrite(VCC2, HIGH); digitalWrite(blue, HIGH); //включаем синюю ленту slow(); //плавный розжиг белой ленты digitalWrite(SW1, HIGH); // delay(200); // digitalWrite(SW2, HIGH); // delay(200); // digitalWrite(SW3, HIGH); // Включаем все лампочки по очереди delay(200); // digitalWrite(SW4, HIGH); // delay(200); // digitalWrite(SW5, HIGH); // digitalWrite(white, LOW); //выключаем ленту digitalWrite(blue, LOW); //выключаем ленту digitalWrite(VCC2, LOW); // выключаем +питания 2 digitalWrite(INDGND, LOW); } void loop() { if (irrecv.decode(&results)) // если есть сигнал { digitalWrite(IND, LOW); delay(10); if (results.value == 0xE0E0F00F) // кнопка Mute// переназначет пин пищалки на пин индикатора работы (мигалка) теперь нет звука при нажатиях кнопок { if (buz == 3) //выключает пьезо { beep(10,2); delay(500); beep(10,2); buz=18; } else {buz = 3; //включает пьезо beep(20,1);} EEPROM.write(0, buz); //записываем в епром ячейка 0 значение пина пьезо } if (results.value == 0xE0E0E21D) // кнопка Play// включаем лампочки, смотри 638 -684 строки, если нажать повторно то включится только 3 лампы, затем 2 и одна по кругу { beep(20,1); E++; delay(100); } if (results.value == 0xE0E09E61) //SMART// плавная смена цвета, всего 4 режима строки 543-583 { beep(15,1); SMART++; rd=1; gr=1; bl=1; D=0; digitalWrite(red, HIGH); delay(200); digitalWrite(red, LOW); digitalWrite(green, HIGH); delay(200); digitalWrite(green, LOW); digitalWrite(blue, HIGH); delay(200); digitalWrite(blue, LOW); RLED=200; //яркость red led GLED=20; //яркость green led BLED=50; //яркость blue led } if (results.value == 0xE0E036C9) // red// включает красную ленту с последней настройкой яркости (после отключения питания сбрасывается) { beep(15,1); bright=RLED; rd=1; D=1; } if (results.value == 0xE0E028D7) // green// включает зеленую ленту с последней настройкой яркости (после отключения питания сбрасывается) { beep(15,1); bright=GLED; gr=1; D=2; } if (results.value == 0xE0E06897) // blue// включает синюю ленту с последней настройкой яркости (после отключения питания сбрасывается) { beep(15,1); bright=BLED; bl=1; D=3; } if (results.value == 0xE0E0E01F) // vol+// прибавляет 15 к яркости активного цвета (котрый включили последним) {beep(15,1); bright=bright+15;} if (results.value == 0xE0E0D02F) // vol-// отнимает 5 от яркости активного цвета (котрый включили последним) {beep(15,2); bright=bright-5;} if (results.value == 0xE0E048B7) // ch+// прибавляет 1 к яркости активного цвета (котрый включили последним) { beep(15,3); bright=bright+1;} if (results.value == 0xE0E008F7) // ch-// отнимает 1 от яркости активного цвета (котрый включили последним) { beep(15,4); bright=bright-1;} if (results.value == 0xE0E0629D) // кнопка Stop// выключает абсолютно все { beep(8,7); digitalWrite(SW1, LOW); delay(200); digitalWrite(SW2, LOW); delay(200); digitalWrite(SW3, LOW); delay(200); digitalWrite(SW4, LOW); // тушим люстру delay(200); digitalWrite(SW5, LOW); analogWrite(white, 0); //тушим светодиодную ленту X=0; //тушим стробоскоп и плавное мерцание A=0; S=0; //начальная яркость slowmo B=0; C=0; rd=0; gr=0; bl=0; SMART=0; digitalWrite(red, LOW); digitalWrite(blue, LOW); digitalWrite(green, LOW); E=0; RGB=0; save=0; } if (results.value == 0xE0E0926D) // кнопка Rec// включаем белую ленту { beep(15,1); slow(); // плавно зажигаем ленту X=1; A++; C=3; // включаем + питание 2 } if (results.value == 0xE0E052AD) // кнопка паузы// переключение режимов работы белой ленты { beep(15,1); if (X == 0 || X == 1 || X == 2) { X = 3; //включить плавное мерцание YS=1; delay(200); } if (B == 1) { X = 2; //лента стробоскоп delay(50); B=0; beep(10,4); } } if (results.value == 0xE0E0A25D) // кнопка перемотка назад// уменьшаем яркость белой ленты, если включен режим плавного мерцания, то регулировка скорости мерцания {beep(15,2); if(X > 1) { if (Z > 5) {Z= Z-5;} else {A=6;} } else {WLED = WLED-7;} delay(20); } if (results.value == 0xE0E012ED) // кнопка перемотка вперед// увеличиваем яркость белой ленты, если включен режим плавного мерцания, то регулировка скорости мерцания { beep(15,1); if(X > 1) {Z= Z+5;} else {WLED = WLED+15;} delay(20); } if (results.value == 0xE0E016E9) //кнопка ОК// переключаем +12в, либо на белую ленту, либо на RGB (недопускает одновременной работы белой ленты и RGB на верху люстры, т.к. БП не потянет нагрузку { beep(15,1); C++;} if (results.value == 0xE0E020DF) //кнопка 1// ячейка хранения пользовательского цвета { beep(10,1); if (save == 1) { EEPROM.write(1, RLED); EEPROM.write(2, GLED); EEPROM.write(3, BLED); save=0; beep(10,2); delay(50); beep(10,3); } else { rd=1; gr=1; bl=1; RLED=EEPROM.read(1); GLED=EEPROM.read(2); BLED=EEPROM.read(3); beep(10,4); delay(50); beep(15,1);} } if (results.value == 0xE0E0A05F) //кнопка 2// ячейка хранения пользовательского цвета { beep(10,1); if (save == 1) { EEPROM.write(4, RLED); EEPROM.write(5, GLED); EEPROM.write(6, BLED); save=0; beep(10,2); delay(50); beep(10,3); } else { rd=1; gr=1; bl=1; RLED=EEPROM.read(4); GLED=EEPROM.read(5); BLED=EEPROM.read(6); beep(10,4); delay(50); beep(15,1);} } if (results.value == 0xE0E0609F) //кнопка 3// ячейка хранения пользовательского цвета { beep(10,1); if (save == 1) { EEPROM.write(7, RLED); EEPROM.write(8, GLED); EEPROM.write(9, BLED); save=0; beep(10,2); delay(50); beep(10,3); } else { rd=1; gr=1; bl=1; RLED=EEPROM.read(7); GLED=EEPROM.read(8); BLED=EEPROM.read(9); beep(10,4); delay(50); beep(15,1);} } if (results.value == 0xE0E010EF) //кнопка 4// ячейка хранения пользовательского цвета { beep(10,1); if (save == 1) { EEPROM.write(10, RLED); EEPROM.write(11, GLED); EEPROM.write(12, BLED); save=0; beep(10,2); delay(50); beep(10,3); } else { rd=1; gr=1; bl=1; RLED=EEPROM.read(10); GLED=EEPROM.read(11); BLED=EEPROM.read(12); beep(10,3);} } if (results.value == 0xE0E0906F) //кнопка 5// ячейка хранения пользовательского цвета { beep(10,1); if (save == 1) { EEPROM.write(13, RLED); EEPROM.write(14, GLED); EEPROM.write(15, BLED); save=0; beep(10,2); delay(50); beep(10,3); } else { rd=1; gr=1; bl=1; RLED=EEPROM.read(13); GLED=EEPROM.read(14); BLED=EEPROM.read(15); beep(10,3);} } if (results.value == 0xE0E050AF) //кнопка 6// ячейка хранения пользовательского цвета { beep(10,1); if (save == 1) { EEPROM.write(16, RLED); EEPROM.write(17, GLED); EEPROM.write(18, BLED); save=0; beep(10,2); delay(50); beep(10,3); } else { rd=1; gr=1; bl=1; RLED=EEPROM.read(16); GLED=EEPROM.read(17); BLED=EEPROM.read(18); beep(10,3);} } if (results.value == 0xE0E030CF) //кнопка 7// ячейка хранения пользовательского цвета { beep(10,1); if (save == 1) { EEPROM.write(19, RLED); EEPROM.write(20, GLED); EEPROM.write(21, BLED); save=0; beep(10,2); delay(50); beep(10,3); } else { rd=1; gr=1; bl=1; RLED=EEPROM.read(19); GLED=EEPROM.read(20); BLED=EEPROM.read(21); beep(5,5); delay(50); beep(8,3); delay(50); beep(15,2); delay(50); beep(20,1);} } if (results.value == 0xE0E0B04F) //кнопка 8// ячейка хранения пользовательского цвета { beep(10,1); if (save == 1) { EEPROM.write(22, RLED); EEPROM.write(23, GLED); EEPROM.write(24, BLED); save=0; beep(10,2); delay(50); beep(10,3); } else { rd=1; gr=1; bl=1; RLED=EEPROM.read(22); GLED=EEPROM.read(23); BLED=EEPROM.read(24); beep(5,5); delay(50); beep(8,3); delay(50); beep(15,2); delay(50); beep(20,1);} } if (results.value == 0xE0E0708F) //кнопка 9// ячейка хранения пользовательского цвета { beep(10,1); if (save == 1) //сохраняем цвет в епром { EEPROM.write(25, RLED); EEPROM.write(26, GLED); EEPROM.write(27, BLED); save=0; beep(10,2); delay(50); beep(10,3); } else { rd=1; gr=1; bl=1; RLED=EEPROM.read(25); GLED=EEPROM.read(26); BLED=EEPROM.read(27); beep(5,5); delay(50); beep(8,3); delay(50); beep(15,2); delay(50); beep(20,1);} } if (results.value == 0xE0E08877) //кнопка 0// чтобы настроить свой цвет необходимо включить все три цвета RGB, настроить яркость каждого, а затем нажать эту кнопку, люстра начнет пищать, теперь выбираем ячейку куда сохранить цвет. {save=1; beep(20,1);} digitalWrite(IND, HIGH); irrecv.resume(); // получаем следующее значение с датчика IR } ////////////////////////////////////отдельные условия после приема и обработки сигнала/////////////////////////// if (C == 1) { digitalWrite (VCC1, LOW); digitalWrite(VCC2, HIGH); C++;} //переключаем питание на другую ленту if (C == 3) {C=0; digitalWrite (VCC2, LOW); digitalWrite (VCC1, HIGH);} if (X == 1){ analogWrite(white, WLED);} // зажигаем ленту (необходимо для изменения яркости) if (X == 2) // стробоскоп { analogWrite(white, WLED); delay(Z/3); analogWrite(white, 0); delay(Z); } if (X == 3) // плавное мерцание ленты { B=1; analogWrite(white, YS); YS=YS+fade; if (YS == 0 || YS == WLED) {fade = -fade ;} delay(Z/2); // делаем паузу для достижения плавного наращивания/убывания яркости } if (A > 5) // защита от залипания кнопок пульта и сброс будильника { digitalWrite(white, HIGH); delay(100); digitalWrite(white, LOW); A=0; } if (rd == 1) { analogWrite(red, RLED);} //зажигаем red if (gr == 1) { analogWrite(green, GLED);} //зажигаем green if (bl == 1) { analogWrite(blue, BLED);} //зажигаем blue if (D == 1) {RLED=bright;} if (D == 2) {GLED=bright;} if (D == 3) {BLED=bright;} if (SMART == 1) //smart режим1 { RLED=RLED+RLED1; BLED=BLED+BLED1; GLED=GLED+GLED1; delay(40); if (RLED < 2 || RLED > 252) {RLED1 = -RLED1 ;} //изменение яркости каждого канала RGB if (BLED < 4 || BLED > 250) {BLED1 = -BLED1 ;} if (GLED < 3 || GLED > 250) {GLED1 = -GLED1 ;} } if (SMART == 2) //smart режим2 { RLED=RLED+RLED2; //изменение яркости каждого канала RGB BLED=BLED+BLED2; //изменение яркости каждого канала RGB GLED=GLED+GLED2; //изменение яркости каждого канала RGB delay(40); if (RLED < 2 || RLED > 252) {RLED2 = -RLED2 ;} //изменение яркости каждого канала RGB if (BLED < 4 || BLED > 250) {BLED2 = -BLED2 ;} if (GLED < 3 || GLED > 100) {GLED2 = -GLED2 ;} } if (SMART == 3) //smart режим 3 { RLED=RLED+RLED3; BLED=BLED+BLED3; GLED=GLED+GLED3; delay(70); if (RLED < 2 || RLED > 252) {RLED1 = -RLED3 ;} //изменение яркости каждого канала RGB if (BLED < 4 || BLED > 250) {BLED1 = -BLED3 ;} if (GLED < 8 || GLED > 150) {GLED1 = -GLED3 ;} } if (SMART == 4) //smart режим 4 { RLED=0; GLED=0; BLED=0; SMART=0; RGB=1; } if (RGB==1) { if (RLED < 254) { RLED++; delay (20);} else {RGB=2; delay(500);} } if (RGB == 2) { if (GLED < 255) { GLED++; delay(20);} else {RGB=3; delay(200);} } if (RGB==3) { if (RLED > 0) { RLED--; delay (20);} else {RGB=4; delay(200);} } if (RGB==4) { if (BLED < 255) { BLED++; delay (20);} else {RGB=5; delay(200);} } if (RGB==5) { if (GLED > 0) { GLED--; delay (20);} else {RGB=6; delay(200);} } if (RGB==6) { if (RLED < 255) { RLED++; delay (20);} else {RGB=7; delay(500);} } if (RGB==7) { if (BLED > 0) { BLED--; delay (20);} else {RGB=2; delay(500);} } if (E == 1) { digitalWrite(SW1, HIGH); // delay(200); // digitalWrite(SW2, HIGH); // delay(200); // digitalWrite(SW3, HIGH); // Включаем все лампочки по очереди delay(200); // digitalWrite(SW4, HIGH); // delay(200); // digitalWrite(SW5, HIGH); } if (E == 2) { digitalWrite(SW2, LOW); // digitalWrite(SW4, LOW); // Включаем 3 лампочки } if (E == 3) { digitalWrite(SW3, LOW); // Включаем 1 лампочку delay(200); // digitalWrite(SW5, LOW); } if (E == 4) { digitalWrite(SW1, LOW); // // Включаем 2 лампочку delay(200); // digitalWrite(SW2, HIGH); // } if (E == 5) { digitalWrite(SW2, LOW); // // Включаем 3 лампочку delay(200); // digitalWrite(SW3, HIGH); // } if (E == 6) { digitalWrite(SW3, LOW); // // Включаем 4 лампочку delay(200); // digitalWrite(SW4, HIGH); // } if (E == 7) { digitalWrite(SW4, LOW); // // Включаем 5 лампочку delay(200); // digitalWrite(SW5, HIGH); // } if (E>8) {E=1;} if (millis() - previousMillis > 3000) //проверка работоспособности (мигает раз в 3 секунды) { digitalWrite(IND, LOW); // if (millis() - previousMillis > 3030) // { previousMillis=millis(); // digitalWrite(IND, HIGH); // } // } if (save == 1) { beep(5,1); delay(200);} } void slow() //плавный розжиг ленты { while(S < WLED) { analogWrite(white, S); delay(4); // пауза delayms мс S++; } } void beep(byte delayms, byte tonebeep) //просто пищалка с изменяемой тональностью { while(AB < delayms) {digitalWrite(buz, HIGH); delay(1); digitalWrite(buz, LOW); delay(tonebeep); AB++;} AB=0; }