Код рабочий, но не получается добиться нужного эффекта! А именно имеется 3 канала, которые должны плавно зажигаться друг за другом и спустя 2 минуты плавно затухать, но вместе. Зажигаются нормально, а вот затухают почему-то с мерцанием! В чем может быть проблема? Я в этом деле новичек, так что сильно не ругайтесь.
Вот сам код. Код (C++): #define LED1 3 // 1 канал светодиода, подключен к 3 пину ARDUINO #define LED2 5 // 2 канал светодиода, подключен к 5 пину ARDUINO #define LED3 6 // 3 канал светодиода, подключен к 6 пину ARDUINO #define LEDon 13 // Светодиодный индикатор на 13 пине, включается когда срабатывает датчик движения #define DayNight 500 // Парог срабатывания датчика освещенности #define timeON 3 // Скорость плавного включения светодиодов #define timeOFF 27 // Скорость плавного выключения светодиодов #define delayON 120000 // Время задержки на выключение, если нет сигнала с датчика движения int Move = A0; // Датчик движения, подключен к пину A0 на ARDUINO int Foto = A1; // Датчик освещенности, подключен к пину A1 на ARDUINO int i = 0; int on = 0; int off = 1; unsigned long timeroff; int L = 0; int N = 0; void setup() { pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); pinMode(LEDon, OUTPUT); pinMode(Move, INPUT); pinMode(Foto, INPUT); } void loop() { int val1=digitalRead(Move); delay(10); int val2=analogRead(Foto); if (val1==1) { digitalWrite(LEDon, HIGH); } else if (val1==0) { digitalWrite(LEDon, LOW); } if (val1==1&&on==0&&L==1) { for (i = i; i < 256; i++) { analogWrite(LED1, i); analogWrite(LED2, i); analogWrite(LED3, i); delay(timeON); } on=1;off=0; L=0; N=1; } if (val2<200 && N==0) { analogWrite(LED1, 1); delay(150); } if (val2>300 && N==0) { analogWrite(LED1, 0); delay(150); } if (val1==1&&on==0&&L==0&&val2<800) { for (i = 0; i < 256; i++) { analogWrite(LED1, i); delay(timeON); if (i==255) { for (i = 0; i < 256; i++) { analogWrite(LED2, i); delay(timeON); if (i==255) { for (i = 0; i < 256; i++) { analogWrite(LED3, i); delay(timeON);} } } } } on=1;off=0;N=1;} else if (val1==1&&on==1) { off=0;timeroff=0; } else if (val1==0&&val2<800&&timeroff==0) { timeroff=millis(); } else if (val1==0&&off==0&&millis()-timeroff>delayON) { /* digitalWrite(LED1, LOW); digitalWrite(LED2, LOW); digitalWrite(LED3, LOW); delay(10);*/ for (i = 255; i >= 0; i--) { analogWrite(LED1, i); analogWrite(LED2, i); analogWrite(LED3, i); delay(timeOFF); int val1=digitalRead(Move); int val2=analogRead(Foto); N=0; if (val1==1) { digitalWrite(LEDon, HIGH); } else if (val1==0) { digitalWrite(LEDon, LOW); } /* if(i==1) { analogWrite(LED2, 0); analogWrite(LED3, 0); if(val2>300) { analogWrite(LED1, 0); } break; }*/ if(digitalRead(Move)==HIGH && val2<800) { L=1; break; } } off=1;on=0;timeroff=0; } }
Почему при включении задержка между шагом 3мс, а при выключении 27мс? Попробуйте сделать тоже 3 и посмотрите что получится.
Нужно чтобы включалось быстрее, а выключалась медленнее. Поэтому на включение 3 миллисекунда на выключения 27.
Если физически отключают 2 канала и оставляю 1, то затухание происходит плавно, складывается такое впечатление как будто бы канал друг на друга дают наводку и затухание происходит с какими-то всплесками.