Помогите разобраться с кодом

Тема в разделе "Arduino & Shields", создана пользователем Wiper, 29 мар 2016.

  1. Wiper

    Wiper Нуб

    Код рабочий, но не получается добиться нужного эффекта!
    А именно имеется 3 канала, которые должны плавно зажигаться
    друг за другом и спустя 2 минуты плавно затухать, но вместе.
    Зажигаются нормально, а вот затухают почему-то с мерцанием!

    В чем может быть проблема?
    Я в этом деле новичек, так что сильно не ругайтесь.
     
  2. Wiper

    Wiper Нуб

    Вот сам код.

    Код (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. ostrov

    ostrov Гуру

    Почему при включении задержка между шагом 3мс, а при выключении 27мс? Попробуйте сделать тоже 3 и посмотрите что получится.
     
  4. Wiper

    Wiper Нуб

    Нужно чтобы включалось быстрее, а выключалась медленнее. Поэтому на включение 3 миллисекунда на выключения 27.
     
  5. Wiper

    Wiper Нуб

    Если физически отключают 2 канала и оставляю 1, то затухание происходит плавно, складывается такое впечатление как будто бы канал друг на друга дают наводку и затухание происходит с какими-то всплесками.