Создание диммера без детектора нуля
- Войдите на сайт для отправки комментариев
Пт, 02/09/2016 - 11:56
Добрый день вечер кому как форумчане ! помогите как соединить два кода вместе чтобы получить ик диммер управляемый двумя кнопкоми пульта. алгоритм такой ! кратковременное нажатие вкл. выкл. светик а долгое + или - яркость ! вот два кода.......
Добрый день вечер кому как форумчане ! помогите как соединить два кода вместе чтобы получить ик диммер управляемый двумя кнопкоми пульта. алгоритм такой ! кратковременное нажатие вкл. выкл. светик а долгое + или - яркость ! вот два кода.......
Да, сильный код :)
#define BUTTON 2 #define RELE_1 4 #define RELE_2 7 #define DELAY 1000 void setup() { pinMode(BUTTON, INPUT); digitalWrite(BUTTON, HIGH); pinMode(RELE_1, OUTPUT); pinMode(RELE_2, OUTPUT); } void loop() { static uint32_t smillis = 0; static bool flag = 0; if(!digitalRead(BUTTON)) { if(!smillis) smillis = millis(); if(!flag && millis()-smillis > DELAY) { digitalWrite(RELE_2, !digitalRead(RELE_2)); flag = 1; } } if(smillis && digitalRead(BUTTON)) { if(millis()-smillis <= DELAY && millis()-smillis > 50) digitalWrite(RELE_1, !digitalRead(RELE_1)); smillis = 0; flag = 0; } }#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(); } }А что это там за "#include" в первой строке?
И вообще, kalbas0000, Вы же не сами писали эти, прости господи, коды? Поверьте, это не коды - это бред сивой кобылы и объединять их - пустая трата времени.
вот выкладываю что помог человек! но работает както не правильно. Где косяк помогите если сможете плиз !
#include <IRremote.h> #define dimmer 11 int RECV_PIN = 7; IRrecv irrecv(RECV_PIN); decode_results results; byte button = 0; byte licht = 0; boolean flag = 0; unsigned long time; void setup(){ irrecv.enableIRIn(); // Start the receiver pinMode(dimmer, OUTPUT); } void loop(){ if (irrecv.decode(&results)) { time = millis(); if(results.value==0xFFCF30){// кнопка вкл. button = 255; } if(results.value==0xFF2FD0){//кнопка выкл. button = 0; } irrecv.resume(); flag = 1; } if(millis()-time > 100 && flag == 1){ analogWrite(dimmer, button); licht = button; flag = 0; } else { if(button == 255 && licht>0 && flag == 1){ licht--; analogWrite(dimmer, licht); flag = 0; } if(button == 0 && licht<254 && flag == 1){ licht++; analogWrite(dimmer, licht); flag = 0; } } if(millis()-time > 1000) flag = 0; }kalbas0000, ну поймите Вы, зто бред.
Ну, вот смотрите, первый пример бреда.
В строке 12 описана переменная time.
Допустим. Вы запустили этот, прости Господи, код. Он начал работать.
Проверка в строке 20 ничего не дала. т.к. сигнал пока ещё не пришёл.
Отлично, программа перебралась на строку 31 и хочет выполнить проверку
но, простите, а чему у Вас равна перменная time? Вы ей хоть какое-то значение присвоили?
Ну и вообще. пройдитесь по логике этой программы и подумайте. а что она собственно делает.
Ребят ! есть готовый рабочий скетч ик диммера только он работает от 3х кнопок одна вкл. выкл. а две регулировка яркости. вопрос ! реально замутить все это дело только от двух кнопок ? за ранее спасибо !
#include <IRremote.h> #define RECV_PIN 7 #define OUT1 9 #define POWER 0x2F5807F // кнопка вкл. выкл. #define KEY1 0xFF2FD0 // яркость + #define KEY2 0xFFCF30 // яркость - byte flag1, flag2 = 0; uint32_t val; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { irrecv.enableIRIn(); } void loop(){ if (irrecv.decode(&results)){ if (results.value != 0xFFFFFFFF){ val = results.value; } if (val == KEY1){ if (flag1 > 0) flag1-=5; analogWrite(OUT1, flag1); } if (val == KEY2){ if (flag1 < 255) flag1+=5; analogWrite(OUT1, flag1); } if (results.value == POWER){ if (flag1 != 0 && flag2 != 0){ analogWrite(OUT1, 0); flag1 = 0; flag2 = 0; } else{ analogWrite(OUT1, 255); flag1 = 255; flag2 = 255; } } irrecv.resume(); } }От каких двух, типа "пока одну держишь" яркость нарастает, а пока другую держишь - понижается. Так, что-ли?
нет ! допустим нажали на пультике кратковременно + светодиод горит нажали кратковременно - светик потух . А если удерживать + яркость плавно растет ну и с - тож самое плавно понижается !
Если "удерживать долговременно", то этот код не переделывается. Новый нужен. Дело в том, что пока Вы держите кнопку нажатой, у Вас нет постоянного "сигнала", что она нажата. Вместо этого Вы полстоянно получаете последовательность "нажата"/"отжата" и эту последовательность нужно отрабатывать.
Вчера только это исследовали. Посмотрите тему, начиная с 16-го поста (можете и сначала - невредно).