Включение/выключение света с регулировкой яркости (Помогите добавить каналы)

Deffi
Offline
Зарегистрирован: 23.09.2015

Всем доброго времени суток. На просторах инета нашёл скетч включения/выключения света с регулировкй яркости, но он управлялся с пульта. Немного подправил для управления с кнопки. Работает. Теперь нужно сделать несколько каналов, что-бы каждая кнопка, управляла своим светом. Управлять буду светодиодным освещением. Сам пытался, но не получается. Я только начал изучать ардуино. Кое что выходит, но не всё...

 

Сам код

	int ledPin = 10;    // Выход ШИМ на диммер
int powerPin = 9; // Вход с кнопки

uint8_t pwmLevel = 255;
boolean pwmStat  = false;
boolean pwmInc   = true;

uint32_t ms, ms1 = 0;
boolean press_flag = false;
uint16_t press_cnt = 0;

void setup()
{
 
  pinMode(ledPin, OUTPUT);
  pinMode(powerPin, INPUT);

}

void loop()
{
  ms = millis();
  // Получаем сигнал от кнопки
  if (digitalRead(powerPin) == HIGH) {
    
      press_flag = true;
    }
    
  if ( ( ms - ms1 ) > 200 || ms < ms1 ) {
    // Если нажата клавиша
    if ( press_flag ) {
      press_cnt++;
      // Если лампа включена
      if ( pwmStat ) {
        // Инвертируем флаг уменьшения/увеличения
        if ( press_cnt == 5 ) {
          pwmInc = !pwmInc;
        }//pres_cnt = 0
        // Изменям значение диммера
        else if ( press_cnt > 5 ) {
          if ( pwmInc ) {
            if ( pwmLevel < 239 )pwmLevel += 16;
            else pwmLevel = 255;
          }//pwmInc
          else        {
            if ( pwmLevel > 50 )pwmLevel -= 16;
            else pwmLevel = 34;
          }// else pwmInc
        }
        Serial.print("Mode=");
        Serial.print(pwmInc);
        Serial.print(" level=");
        Serial.print(pwmLevel);
        Serial.print(" count=");
        Serial.println(press_cnt);
        analogWrite(ledPin, pwmLevel);
      }

    }
    else {
      // Короткое (менее 1 сек) нажатие клавиши
      if ( press_cnt > 0 && press_cnt < 5 ) {
        // Включение/отключение лампы
        pwmStat = !pwmStat;
        if ( pwmStat ) {
          digitalWrite(powerPin, HIGH);
          analogWrite(ledPin, pwmLevel);
        }
        else  {
          analogWrite(ledPin, 0);
          digitalWrite(powerPin, LOW);
        }
        Serial.print("Press=");
        Serial.print(pwmStat);
        Serial.print(" level=");
        Serial.print(pwmLevel);
        Serial.print(" count=");
        Serial.println(press_cnt);
      }

      press_cnt = 0;
    }
    ms1 = ms;
    press_flag = false;
  }
}

 

Ещё хочется что-бы одна дополнительная кнопка гасила всё что включено. И что-бы свет включался и выключался плавно.

Но основное что-бы было хотя-бы три канала.

pcb
Offline
Зарегистрирован: 02.04.2015

В разделе "Предлагаю работу" нужно начинать с суммы денег.

Deffi
Offline
Зарегистрирован: 23.09.2015

Вопрос решён. Тему можно закрывать.