Действие on/off надо делать не по кнопке, а по флагам:
- последнее срабатывание не мотало (light--, light++)
- отпущено раньше чем минимум 3 мотания
Соответственно, на условие мотать +/- с шагом надо добавить: получить минимум 3 кода этой кнопки, поставить флаг что это не однократная кнопка. Отличить нажимание от удерживания возможно только так, то есть однократное условие проверяет реально не саму кнопку а отпускание кнопки. Не позже определённого момента (в данном примере 3 срабатывания). Иначе мотать +/-.
А как сделать так чтобы при уменьшении яркости до минимума при удержании кнопки не включался опять канал?
ты изменил шаг на 5. а условие
1
licht>0
не поправил на
1
licht>4
в другую сторону аналогично
все равно не понял. я имею ввиду чтобы кнопка вкл. была яркость + а кнопка выкл. яркость - вот что !
byte переменная может принимать значения от 0 до 255
если например к 254 добавить 1 получим 255. еще раз и будет 0. возникает переполнение
и тоже самое когда 249+5=254. 254+5=3. началось сначала. вот такая математика
поэтому если неправильно настроил условия у тебя постоянно будет перескакивать
да неее ! я знаю не перескакивает просто я имею ввиду чтобы кнопка вкл. была яркость + а кнопка выкл. яркость - вот что
01
#include <IRremote.h>
02
03
#define dimmer 11
04
int
RECV_PIN = 7;
05
IRrecv irrecv(RECV_PIN);
06
decode_results results;
07
08
09
byte
button ;
10
byte
licht ;
11
byte
flag ;
12
unsigned
long
time ;
13
14
15
void
setup
(){
16
irrecv.enableIRIn();
// Start the receiver
17
pinMode(dimmer, OUTPUT);
18
}
19
void
loop
(){
20
if
(irrecv.decode(&results)) {
21
time = millis();
22
if
(results.value==0x1 || results.value==0x801){
//кнопка вкл.
23
button = 255;
24
}
25
if
(results.value==0x4 || results.value==0x804){
//кнопка выкл.
26
button = 0;
27
}
28
irrecv.resume();
29
flag = 1;
30
}
31
32
33
if
(button == 0 && licht>0 && flag == 1){
34
licht-=5;
35
analogWrite(dimmer, licht);
36
flag = 0;
37
}
38
39
if
(button == 255 && licht<255 && flag == 1){
40
licht+=5;
41
analogWrite(dimmer, licht);
42
flag = 0;
43
}
44
45
46
if
(millis()-time == 1000 && flag == 1){
47
analogWrite(dimmer, button);
48
flag = 0;
49
licht = button;
50
}
51
52
53
54
}
55
сейчас работает только яркость и все!
я взял твой переделанный код и просто поменял кнопки местами для регулировки яркости
попробуй загрузи себе и все поймешь !
не хочу
ладно все равно большое спасибо за помощь !
допиливай код как тебе уже будет удобно. удачи
rave0000, у меня нечто подобное есть: http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-novichku?page=5#comment-89760
Действие on/off надо делать не по кнопке, а по флагам:
- последнее срабатывание не мотало (light--, light++)
- отпущено раньше чем минимум 3 мотания
Соответственно, на условие мотать +/- с шагом надо добавить: получить минимум 3 кода этой кнопки, поставить флаг что это не однократная кнопка. Отличить нажимание от удерживания возможно только так, то есть однократное условие проверяет реально не саму кнопку а отпускание кнопки. Не позже определённого момента (в данном примере 3 срабатывания). Иначе мотать +/-.