Действие on/off надо делать не по кнопке, а по флагам:
- последнее срабатывание не мотало (light--, light++)
- отпущено раньше чем минимум 3 мотания
Соответственно, на условие мотать +/- с шагом надо добавить: получить минимум 3 кода этой кнопки, поставить флаг что это не однократная кнопка. Отличить нажимание от удерживания возможно только так, то есть однократное условие проверяет реально не саму кнопку а отпускание кнопки. Не позже определённого момента (в данном примере 3 срабатывания). Иначе мотать +/-.
А как сделать так чтобы при уменьшении яркости до минимума при удержании кнопки не включался опять канал?
ты изменил шаг на 5. а условие
не поправил на
в другую сторону аналогично
все равно не понял. я имею ввиду чтобы кнопка вкл. была яркость + а кнопка выкл. яркость - вот что !
byte переменная может принимать значения от 0 до 255
если например к 254 добавить 1 получим 255. еще раз и будет 0. возникает переполнение
и тоже самое когда 249+5=254. 254+5=3. началось сначала. вот такая математика
поэтому если неправильно настроил условия у тебя постоянно будет перескакивать
да неее ! я знаю не перескакивает просто я имею ввиду чтобы кнопка вкл. была яркость + а кнопка выкл. яркость - вот что
#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, у меня нечто подобное есть: http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-novichku?page=5#comment-89760
Действие on/off надо делать не по кнопке, а по флагам:
- последнее срабатывание не мотало (light--, light++)
- отпущено раньше чем минимум 3 мотания
Соответственно, на условие мотать +/- с шагом надо добавить: получить минимум 3 кода этой кнопки, поставить флаг что это не однократная кнопка. Отличить нажимание от удерживания возможно только так, то есть однократное условие проверяет реально не саму кнопку а отпускание кнопки. Не позже определённого момента (в данном примере 3 срабатывания). Иначе мотать +/-.