Ик диммер на двух кнопках

rave0000
Offline
Зарегистрирован: 03.12.2014

А как сделать так чтобы при уменьшении яркости до минимума при удержании кнопки не включался опять канал?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ты изменил шаг на 5. а условие 

licht>0

не поправил на 

licht>4

в другую сторону аналогично

rave0000
Offline
Зарегистрирован: 03.12.2014

все равно не понял. я имею ввиду чтобы кнопка вкл. была яркость + а кнопка выкл. яркость - вот что !

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

byte переменная может принимать значения от 0 до 255

если например к 254 добавить 1 получим 255. еще раз и будет 0. возникает переполнение

и тоже самое когда 249+5=254. 254+5=3. началось сначала. вот такая математика

поэтому если неправильно настроил условия у тебя постоянно будет перескакивать

rave0000
Offline
Зарегистрирован: 03.12.2014

да неее ! я знаю не перескакивает просто  я имею ввиду чтобы кнопка вкл. была яркость + а кнопка выкл. яркость - вот что

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013
#include <IRremote.h>

#define dimmer 11
int RECV_PIN = 7;
IRrecv irrecv(RECV_PIN);
decode_results results;


byte button ;
byte licht ;
byte flag ;
unsigned long time ;


void setup(){
  irrecv.enableIRIn(); // Start the receiver
  pinMode(dimmer, OUTPUT);
}
void loop(){
  if (irrecv.decode(&results)) {
    time = millis();
    if(results.value==0x1 || results.value==0x801){//кнопка вкл.
      button = 255;
    }
    if(results.value==0x4 || results.value==0x804){//кнопка выкл.
      button = 0;
    }
    irrecv.resume();
    flag = 1;
  }
  
     
    if(button == 0 && licht>0 && flag == 1){
      licht-=5;
      analogWrite(dimmer, licht);
      flag = 0;
    }
      
    if(button == 255 && licht<255 && flag == 1){
      licht+=5;
      analogWrite(dimmer, licht);
      flag = 0;
    }
     

    if(millis()-time == 1000 && flag == 1){
    analogWrite(dimmer, button);
    flag = 0;
    licht = button;
  }
    


}
   

 

rave0000
Offline
Зарегистрирован: 03.12.2014

сейчас работает только яркость и все!

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

я взял твой переделанный код и просто поменял кнопки местами для регулировки яркости

rave0000
Offline
Зарегистрирован: 03.12.2014

попробуй загрузи себе и все поймешь !

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

не хочу

rave0000
Offline
Зарегистрирован: 03.12.2014

ладно все равно большое спасибо за помощь !

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

допиливай код как тебе уже будет удобно. удачи

std
Offline
Зарегистрирован: 05.01.2012

rave0000, у меня нечто подобное есть: http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-novichku?page=5#comment-89760

Действие on/off надо делать не по кнопке, а по флагам:

- последнее срабатывание не мотало (light--, light++)

- отпущено раньше чем минимум 3 мотания

Соответственно, на условие мотать +/- с шагом надо добавить: получить минимум 3 кода этой кнопки, поставить флаг что это не однократная кнопка. Отличить нажимание от удерживания возможно только так, то есть однократное условие проверяет реально не саму кнопку а отпускание кнопки. Не позже определённого момента (в данном примере 3 срабатывания). Иначе мотать +/-.