Переключение режимов RGB

Тема в разделе "Arduino & Shields", создана пользователем НекитОС, 17 апр 2016.

  1. Доброго времени суток! Пишу скетч для блока управления освещением дома, и все бы ничего, но вот добрался до балкона, решил сделать RGB (боже как стандартно), написал несколько режимов работы ленты и теперь хочу свободно между ними переключаться (сам выбирать режим и замыкать в цикл), но не знаю как написать это :( помогите, может кто сталкивался с подобным (да 100% кто- то сталкивался).

    Скетч обозначу так, потому что сам он огромный ОГОГО;)

    void loop() {
    //бла бла бла
    //бла бла

    //первый режим
    for (если, тогда, и еще это) {
    мигай вот так вот
    }

    //а это второй
    for (если, тогда, и еще это) {
    мигай вот так вот
    }
    //а это вот третий
    for (если, тогда, и еще это) {
    мигай вот так вот
    }

    //четвертый
    for (если, тогда, и еще это) {
    мигай вот так вот
    }

    }
     
  2. Tomasina

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

    Код (C++):
    #define RED_PIN     4
    #define GREEN_PIN   5
    #define BLUE_PIN    6
    #define BUTTON_PIN  8  // кнопка к пину и GND, подтяжка встроенная, параллельно контактам кнопки конденсатор 104
    enum {ALL_OFF, RED_ON, BLUE_ON, FADE, SPARKS, END}; // возможные эффекты, метка END всегда последняя
    byte CurrentEffect;


    void setup()
    {
      pinMode(RED_PIN, OUTPUT);
      pinMode(GREEN_PIN, OUTPUT);
      pinMode(BLUE_PIN, OUTPUT);
      pinMode(BUTTON_PIN, INPUT_PULLUP); // активируем подтяжку
      CurrentEffect = ALL_OFF;           // задаем эффект при первом включении
    }

    void loop()
    {
      readButton();
      effectManager();
    }


    void readButton()
    {
      if (!digitalRead(BUTTON_PIN)) CurrentEffect++;
      if (END == CurrentEffect) CurrentEffect = ALL_OFF; // закольцовываем эффекты
    }


    void effectManager()
    {
      switch(CurrentEffect)
      {
      case ALL_OFF:
        {
          digitalWrite (RED_PIN, LOW);
          digitalWrite (GREEN_PIN, LOW);
          digitalWrite (BLUE_PIN, LOW);
          break;
        }
      case FADE:
        {
          // for (если, тогда, и еще это)
          break;
        }
      case SPARKS:
        {
          // for (если, тогда, и еще это)
          break;
        }
      } // switch
    } // loop
     
    redven и НекитОС нравится это.
  3. Спасибо, огромное! Действительно хорошая идея) вечерком на железе обкатаю;)