Ик диммер на двух кнопках
- Войдите на сайт для отправки комментариев
Здраствуйте форумчане! прошу помощи для новичка. Как сделать чтобы ик диммер работал от двух кнопок тоесть короткое нажатие вкл.выкл. длинное яркость +/- вот скетч если можно помогите!
#include
int RECV_PIN = 7;
IRrecv irrecv(RECV_PIN);
decode_results results;
int i;
void setup()
{
irrecv.enableIRIn(); // Start the receiver
pinMode(11, OUTPUT);
}
void loop() {
if (irrecv.decode(&results)) {
if(results.value==0x1 || results.value==0x801){
i=255;
}
if(results.value==0x4 || results.value==0x804){
i=0;
}
if(results.value==0x2 || results.value==0x802){
if(i < 255){
i+=5;
}
}
if(results.value==0x3 || results.value==0x803){
if(i > 0){
i-=5;
}
}
analogWrite(11, i);
irrecv.resume();
}
}
Очевидно что нужно определить нажатие, принятый код сохранить.
дальше нужно считать повторы кода если приняли много то с каждым следующим начинаем менять яркость(+ или - в зависимости от кода). таймаут сбрасывется каждый раз когда получаем код. Если таймаут достиг какогото числа то - это время бездействия то если приняли мало - это было короткое нажатие - выполняем действие вкл или выкл, далее сбросить переменные подсчета и принятого кода.
Уважаемый NeiroN ! а можно код по подробнее плиз !
Код нужно писать, а сейчас мне лень. Разберитесь сначала как работает ваш пульт - должен повторять код нажатой кнопки. Посмотрете в сериал какие коды приходят от пульта, какая периодичность их повтора. От этого будет зависеть конечная программа.
Пульт от телека горизонт протокол RC5 коды кнопок вкл.1 код повтора 801. выкл.2 код повтора 802.
в сериале так и пишет 1
801
2
802
http://www.sbprojects.com/knowledge/ir/rc5.php
Ну ктонибуть дайте код плиз ! причем тут коды кнопок яже исходник выложил пульт от горизонта ! протокол RC5.
пример из либы просто запусти и открой терминал. и скинь сюда то что в сериале будет только с комментариями какую кнопку нажимал и как только держал
только посмотри как правильно код вставлять
ок ! щя сделаю
01
#include <IRremote.h>
02
int
RECV_PIN = 7;
03
IRrecv irrecv(RECV_PIN);
04
decode_results results;
05
int
i;
06
void
setup
()
07
{
08
irrecv.enableIRIn();
// Start the receiver
09
pinMode(11, OUTPUT);
10
}
11
void
loop
() {
12
if
(irrecv.decode(&results)) {
13
if
(results.value==0x1 || results.value==0x801){
// кнопка вкл.
14
i=255;
15
}
16
if
(results.value==0x4 || results.value==0x804){
//кнопка выкл.
17
i=0;
18
}
19
if
(results.value==0x2 || results.value==0x802){
//яркость +
20
if
(i < 255){
21
i+=5;
22
}
23
}
24
if
(results.value==0x3 || results.value==0x803){
//яркость -
25
if
(i > 0){
26
i-=5;
27
}
28
}
29
analogWrite(11, i);
30
irrecv.resume();
31
}
32
}
Это на четырех кнопках. а как на двух ума не приложу !
по поводу сериала держишь кнопку яркости + идут 22222222222222222222222222.
а однократное нажатие 802.
коды состветствует соответствуют твоему пульту?
да да да!!!
какие кнопки будешь использовать?
этот код работает? как надо?
да в железе проверял все работает ! если две кнопки то тогда 1 вкл. 4 выкл.
идут 222222 в одну строку?
приложи код для проверки кнопок из примеров
01
2
02
2
//держишь кнопку
03
2
04
2
05
2
06
2
07
2
08
802
09
802
10
802
11
802
//держишь кнопку
12
802
13
802
14
2
15
2
16
2
17
2
18
802
//один раз нажали
19
2
//один раз нажали
20
802
понятно. или то или другое
завтра набросаю. сейчас времени нет
ок ! спасибо большое.
вроде должно получится что то вроде этого
допиливать конечно надо
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 = 0;
10
byte
licht = 0;
11
boolean flag = 0;
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
if
(millis()-time > 100 && flag == 1){
32
analogWrite(dimmer, button);
33
licht = button;
34
flag = 0;
35
}
36
else
{
37
if
(button == 255 && licht>0 && flag == 1){
38
licht--;
39
analogWrite(dimmer, licht);
40
flag = 0;
41
}
42
if
(button == 0 && licht<254 && flag == 1){
43
licht++;
44
analogWrite(dimmer, licht);
45
flag = 0;
46
}
47
}
48
if
(millis()-time > 1000) flag = 0;
49
}
Где-то я такой код уже видел...
не я не копипастил. взял только то что дал человек
кстати Gippopotam может предложишь как сделать код лучше?
ты ведь делаешь серьезные заказы, и код наверно совершенно по другому пишешь
интересно как бы ты такой код сделал
кстати Gippopotam может предложишь как сделать код лучше?
ты ведь делаешь серьезные заказы, и код наверно совершенно по другому пишешь
интересно как бы ты такой код сделал
Сарказм?
неа. с чего бы
Чевото не так работает.
Был дома на обеде щя работаю вечером выду на связь.
что конкретно не так. я же не экстрасенс
задержку думаю надо добавить
Здарово ! проблема в следующем: при включении светодиода удерживаем кнопку яркость + диод сразу резко тухнет не до конца и после
этого набирает яркость до максимума и так по кругу. а при удержании кнопки яркость - доходит до минимума и тоже по кругу.
видео сними
хорошо !
пробуй
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 = 0;
10
byte
licht = 0;
11
boolean flag = 0;
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
if
(millis()-time > 100 && flag == 1){
32
analogWrite(dimmer, button);
33
licht = button;
34
flag = 0;
35
}
36
else
{
37
if
(button == 0 && licht>0 && flag == 1){
38
licht--;
39
analogWrite(dimmer, licht);
40
flag = 0;
41
}
42
if
(button == 255 && licht<254 && flag == 1){
43
licht++;
44
analogWrite(dimmer, licht);
45
flag = 0;
46
}
47
}
48
if
(millis()-time > 1000) flag = 0;
49
}
работает только регулировка яркости правильно ! но вкл. и выкл. нет.
а если вкл выкл нажать что происходит?
ничего просто яркость регулируется.
ну время и желание будет может доделаю. сейчас не могу
хорошо !
про видео не забудь
Здарово ! я так подумал что толку видео снимать если работает только при удержании кнопок регулировка яркости которая бегает по кругу !
1
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
boolean flag ;
12
boolean mag ;
13
unsigned
long
time ;
14
15
16
void
setup
(){
17
irrecv.enableIRIn();
// Start the receiver
18
pinMode(dimmer, OUTPUT);
19
}
20
void
loop
(){
21
if
(irrecv.decode(&results)) {
22
time = millis();
23
if
(results.value==0x1 || results.value==0x801){
// кнопка вкл.
24
button = 255;
25
}
26
if
(results.value==0x4 || results.value==0x804){
//кнопка выкл.
27
button = 0;
28
}
29
irrecv.resume();
30
flag = 1;
31
mag = 1;
32
}
33
34
35
if
(button == 255 && licht>0 && mag == 1){
36
licht-=5;
37
analogWrite(dimmer, licht);
38
mag = 0;
39
}
40
41
if
(button == 0 && licht<254 && mag == 1){
42
licht+=5;
43
analogWrite(dimmer, licht);
44
mag = 0;
45
}
46
if
(millis()-time > 1000 && flag == 1){
47
analogWrite(dimmer, button);
48
licht = button;
49
}
50
}
51
Прошу помощи jeka_tm вот немного изменил код так работает только есть одно но : когда увеличиваю или уменьшаю яркость при отпускании кнопки на месте значение не астается а включается или выкл. канал. прошу помощи допилить этот код !
зачем добавил
1
mag
flag уже не используется местами
ну незнаю ! просто с flag работает точно также ! кстати видео снял только не знаю как его добавить сюда.
сюда только ссылка
а видос куда сохранить чтобы ссылку потом скопировать?
youtube например
загружаю на ютуб!
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 == 255 && licht>0 && flag == 1){
34
licht-=5;
35
analogWrite(dimmer, licht);
36
flag = 0;
37
}
38
39
if
(button == 0 && 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
Все разобрался ! работает ! есть чем проверить?
работает как надо?
могу проверить но зачем если работает
про время смотрю вообще все убрал. как отслеживать тогда?