ИК управление реле
- Войдите на сайт для отправки комментариев
Пнд, 24/04/2017 - 17:22
Приветствую. Помогите чайнику разобраться. Есть кусок кода управления реле ИК пультом.
#include <IRremote.h> // подключаем библиотеку
IRrecv irrecv(2); // пин IR приемника
decode_results results;
void setup() // процедура setup
{
irrecv.enableIRIn(); // запускаем прием
pinMode(8, OUTPUT);
}
void loop()
{
if (irrecv.decode(&results)) // читаем
{
// включаем если получен сигнал
if (results.value == 0xFF02FD)
digitalWrite(8, HIGH);
}
}
Научите как изменить код чтобы работал алгоритм : держишь кнопку - вкл, отпустил - выкл. нужна работа 3 выходов от трёх кнопок
Между строками 20 и 21 явно не хватает resume
Это не так просто, как Вам, возможно кажется. При удержании кнопки, Вы будете снова и снова получать коды повторения. Вам нужно их обрабатывать, а если в течение заданного интервала код не пришёл - выполнять действие по "отпусканию" кнопки
Между строками 20 и 21 явно не хватает resume
Это не так просто, как Вам, возможно кажется. При удержании кнопки, Вы будете снова и снова получать коды повторения. Вам нужно их обрабатывать, а если в течение заданного интервала код не пришёл - выполнять действие по "отпусканию" кнопки
я по этому и не справился. а если чтоб при нажатии пульта происходило включение на пол-секунды. объясню для чего это нужно. собрал часы на ГРИ ИН14. управление тремя тактовыми кнопками. хочу прикрутить на ардуино про мини пульт.
я по этому и не справился.
Вы не поэтому не справились, а потому что даже не попытались справиться - даже не попробовали.
Могу подсказать с чего начать:
напишите программу. которая просто печатает любой полученный с пульта код в сериал и ждёт следующего, чтобы и его напечатать и так бесконечно. Запустите, нажимайте пульт, держите, отпускайте, смотрите, что приходит и думайте. Посмотрите, что приходит, поймёте как решить задачу.
ну это я знаю. первый раз проходит код кнопки, а потом идёт защита от дребезга
ну это я знаю. первый раз проходит код кнопки, а потом идёт защита от дребезга
Не знаете. Это не защита от дребезга, а код повтора. Который означает, что нажатая кнопка удерживается.
Сделайте так, как написал ЕвгенийП в посте #3
а потом идёт защита от дребезга
Перестаньте бредить
ну это я знаю.
Ну, я же Вам сказал "сделайте. посмотрите и подумайте - решение придёт".
Вы не хотите делать, т.к. и так всё знаете. Ну, знаете, так и решайте проблему, за чем дело-то стало?
я новичёк, спрашиваю совета. мог и не так выразится. чего сразу нервничать ? у Вас сразу всё получалось ?
правильно я понимаю, что нужно на отключение прописать команду 0хFFFFFFF которая указывает удержание кнопки ?
Вы сделали то, что сказал? Если сделали, давайте сюда лог из сериала (скопипастите). Если нет, то решайте свою проблему сами, раз Вы лучше знаете что нужно делать. а что нет.
0xFF629D
0xFFFFFFFF
0xFFFFFFFF
0xFFFFFFFF
0xFFFFFFFF
0xFFFFFFFF
0xFFFFFFFF
0xFFFFFFFF
0xFFFFFFFF
0xFFFFFFFF
0xFFFFFFFF
0xFFFFFFFF
так ?
если сделать вот так то очень похоже на щелчёк механической кнопки.
irrecv.enableIRIn(); pinMode(8, OUTPUT); } void loop() // { if (irrecv.decode(&results)) { if (results.value == 0xFF629D) { digitalWrite(8, HIGH); } delay(20); if (results.value == 0xFF629D) { digitalWrite(8, LOW); } irrecv.resume(); } }что бы два канала добавить нужно последовательно ещё два раза прописать с другими кодами ?
0xFF629D
0xFFFFFFFF
0xFFFFFFFF
0xFFFFFFFF
0xFFFFFFFF
0xFFFFFFFF
0xFFFFFFFF
0xFFFFFFFF
0xFFFFFFFF
0xFFFFFFFF
0xFFFFFFFF
0xFFFFFFFF
так ?
Нет. Я же Вам писал (Вы вообще читаете?) "Запустите, нажимайте пульт, держите, отпускайте". Вот в этом месте где Вы отпустили кнопку? Сделайте подобный лог с пометками "здесь нажал", "здесь отпустил". И в каждой строке, в плюс к коду лучше печатать значения millis(), чтобы понятен был масштаб времени. Смысл этой работы - всё видеть! А что видно на Вашем кусочке?
Только мне то это сразу выкладывать не надо. Сами сначала подумайте, а уж если никак, то выкладывайте.
что бы два канала добавить нужно последовательно ещё два раза прописать с другими кодами ?
Давайте, Вы сначала один сделаете. А там глядишь и вопросв поубавится.
получилось у меня вот так. коряво, но вроде работает. правда на пульт реагирует через раз. грешу на подключение датчика ик без должной обвязки
#include <IRremote.h> // библиотека для ИК int RECV_PIN = 11; // pin ИК приемника IRrecv irrecv(RECV_PIN); // объект получения сигнала decode_results results; // переменная хранящая результат int relay1 = 8; // pin кнопки меньше int relay2 = 7; // pin кнопки ОК int relay3 = 9; // pin кнопки больше void setup() { irrecv.enableIRIn(); // включаем ИК-приемник pinMode(relay1, OUTPUT); // - выход pinMode(relay2, OUTPUT); // - выход pinMode(relay3, OUTPUT); // - выход } void loop() { if (irrecv.decode(&results)) { // если есть сигнал if (results.value == 0xFF22DD) { digitalWrite(relay1, HIGH); // нажатие delay (200); digitalWrite(relay1, LOW); // оттпускание } irrecv.resume(); // получаем следующее значение } if (irrecv.decode(&results)) { // если есть сигнал if (results.value == 0xFF02FD) { digitalWrite(relay2, HIGH); // нажатие delay (200); digitalWrite(relay2, LOW); // отпускание } irrecv.resume(); // получаем следующее значение } if (irrecv.decode(&results)) { // если есть сигнал if (results.value == 0xFFC23D) { digitalWrite(relay3, HIGH); // нажатие delay (200); digitalWrite(relay3, LOW); // отпускание } irrecv.resume(); // получаем следующее значение } }