Как заменить delay для радуги на RGB

Тема в разделе "Посоветуйте детальки", создана пользователем Юриус, 3 июн 2019.

  1. Юриус

    Юриус Нерд

    Подскажите, как в данном скетче заменить delay на millis. Чтобы не было простоя и можно было его вставить в брльшой скетч где выполняется еще несколько задач. Так же заменить for.


    Код (C++):
    int redPin = 3;
    int greenPin = 6;
    int bluePin = 5;

    //  RGB модуль с общим анодом

    int r = 0;         // Красный горит
    int b = 255;.  // Синий потушен
    int g = 255;.  // Зелёный потушен

    void setup()
    {
      pinMode(redPin, OUTPUT);
      pinMode(greenPin, OUTPUT);
      pinMode(bluePin, OUTPUT);
    }

    void loop()
    {
      for (int e=1;  e<=765; e++) {
        if(e<=255) {r++;  b--;}         // Красный тухнет, синий разгорается      
        if(e>255 && e<=510) {b++;  g--;}// Синий тухнет, зелёный разгорается
        if(e>510) {g++;  r--;}          // Зелёный тухнет, красный разгорается
       
        analogWrite(redPin, r);
        analogWrite(greenPin, g);
        analogWrite(bluePin, b);
       
        delay(5); // чем больше значение, тем меньше скорость
      }
    }
     
     

    Вложения:

  2. Asper Daffy

    Asper Daffy Иксперд

    От редактора зависит. В большинстве Ctrl+H, а ардуино-IDE - Ctrl+F. Дальше пишешь что на что заменить и давишь кнопку "Заменить все".

    Работать не будет, но тебе ж надо заменить, а не переделать программу, так что как-то так.
     
    Daniil, parovoZZ и DetSimen нравится это.
  3. Юриус

    Юриус Нерд

    Вы не поняли. Я спрашивал как переделать скетч.
     
  4. Tomasina

    Tomasina Сушитель лампочек Модератор

    Код (C++):
    const byte redPin = 3;
    const byte greenPin = 6;
    const byte bluePin = 5;

    //  RGB модуль с общим анодом
    int r = 0;   // Красный горит
    int b = 255; // Синий потушен
    int g = 255; // Зелёный потушен

    void setup()
    {
      pinMode(redPin, OUTPUT);
      pinMode(greenPin, OUTPUT);
      pinMode(bluePin, OUTPUT);
    }


    void ledManager()
    {
      static unsigned long timestamp = millis();
      static int e = 1;  // static запрещает изменять переменную при выходе из ledManager

      if (millis() - timestamp > 5000)  // замена delay(5)
      {
       // запоминаем текущее время (оно понадобится в следующем цикле)
        timestamp = millis();

        if (e <= 255)
        {
          r++;   // Красный тухнет, синий разгорается
          b--;
        }
        if (e > 255 && e <= 510)
        {
          b++;   // Синий тухнет, зелёный разгорается
          g--;
        }
        if (e > 510)
        {
          g++;   // Зелёный тухнет, красный разгорается
          r--;
        }

        analogWrite(redPin, r);
        analogWrite(greenPin, g);
        analogWrite(bluePin, b);

        e++;
        if (e > 765) e = 1;
      } // конец бывшего цикла for
    }


    void task2()
    {
    }


    void task3()
    {
    }


    void loop()
    {
      ledManager();
      task2();
      task3();
    }
     
    Юриус нравится это.
  5. Юриус

    Юриус Нерд

    Спасибо. Я вот в тупик зашёл, не проучалось. Сегодня вечерком проверю.
     
  6. Asper Daffy

    Asper Daffy Иксперд

    Неправда. Ты спрашивал
    Так что это не я неправильно понял, а ты неправильно спросил.
     
    Daniil и DetSimen нравится это.