Arduino uno ir + пду

Wikly
Offline
Зарегистрирован: 20.01.2015

Всем привет, такое дело: Есть дуня, ик приемник, пульт ду, лед лента одноцветная, транзистор нпн.

задача: с одной кнопки пду осуществить несколько режимов работы лед ленты. а именно: вкл, резкое мигание, плавное мигание, выключение. 

на данный момент реализовано вкл по наростающей и выкл так же.

подскажите знающие люди примерный код реализации.

зарание спасибо.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А какой код уже есть? 

Wikly
Offline
Зарегистрирован: 20.01.2015

скетч на работе, завтра отпишу. 

на одну кнопку пульта смог повесить вкл и выкл, через проверку флага (к примеру int on = 0) при нажатии кнопки на пду проверяется этот флаг если = 0 то вкл, если = 1 то выкл. а как на кнопку повесить 3-4 режима (при чем привкл режима мигания лед ленты - лента должна мигать постоянно до нажатия этой же кнопки пду).

полагаю что можно реализовать так же через флаги. но как это в коде пока додуматься не могу.

Wikly
Offline
Зарегистрирован: 20.01.2015
void loop() {
if (irrecv.decode(&results)) 
  {
    int res = (results.value);
    Serial.println(results.value);
    if(results.value==16755030)// 
    {
     if (lamp1_on == 0)
      {
       lamp1_on = 1;
       digitalWrite(lamp1, HIGH);
      }
      else if (lamp1_on == 1)
      {
       lamp1_on = 0;
       digitalWrite(lamp1, LOW);
      }
    }
    else if(results.value==16767270)// 
    {
   if (lamp2_on == 0)
      {
       lamp2_on = 1;
       digitalWrite(lamp2, HIGH);
      }
      else if (lamp2_on == 1)
      {
       lamp2_on = 0;
       digitalWrite(lamp2, LOW);
      }
    }
    else if(results.value==16750950)// код вкл. выкл. лед ленты
    {

      if (led_on == 0)
      {
       brightness = 0; 
        while (brightness < 255) {
        brightness = (brightness + 1) % 256;
        analogWrite(led, brightness);
        delay(10);
       }
       led_on = 1;
        Serial.println(led_on);
      }
      else if (led_on == 1)
      {
       brightness = 255; 
        while (brightness != 0) {
        brightness = (brightness - 1) % 256;
        analogWrite(led, brightness);
        delay(10);
       }
       led_on = 0;
       Serial.println(led_on);
      }
      
    }
 
    irrecv.resume();
    delay(100);
  }
}

 

Radjah
Offline
Зарегистрирован: 06.08.2014

http://arduino.ru/Reference/SwitchCase

lamp1_on, lamp2_on можно использовать как параметры digitalWrite в 07-30. Заметно код упростит.

35-53 тоже можно уменьшить, если led_on приспособить под вычисление уровня яркости.

Чтобы режим переключать, запоминай предыдущее состояние. Например по кнопке менять значение переменной, а в лупе по конкретному значению делать конкретное действие.