Вопрос по программированию Ардуино
- Войдите на сайт для отправки комментариев
Втр, 21/06/2022 - 22:31
Здравствуйте. Подскажите, пожалуйста, как дописать в этот код режим удержания кнопки? То есть, при нажатии кнопки сигнал есть, при отпускании сигнала нет
#include "IRremote.h" IRrecv irrecv(6); // указываем вывод, к которому подключен приемник decode_results results; int in1 = 2; int in2 = 3; int in3 = 4; int in4 = 5; byte ad = 0; void setup() { irrecv.enableIRIn(); pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); } void loop() { if ( irrecv.decode( &results )) { // если данные пришли switch ( results.value ) { if (results.value ==0xE0E048B7){ if (ad != 0){ digitalWrite(in1, 1); digitalWrite(in2, 0); digitalWrite(in3, 1); digitalWrite(in4, 0);}} case 0xE0E008F7: digitalWrite(in1, 0); digitalWrite(in2, 1); digitalWrite(in3, 0); digitalWrite(in4, 1); break; case 0xE0E058A7: digitalWrite(in1, 0); digitalWrite(in2, 0); digitalWrite(in3, 0); digitalWrite(in4, 0); break; case 0xE0E0D02F: digitalWrite(in1, 1); digitalWrite(in2, 0); digitalWrite(in3, 0); digitalWrite(in4, 0); break; case 0xE0E0E01F: digitalWrite(in1, 0); digitalWrite(in2, 0); digitalWrite(in3, 1); digitalWrite(in4, 0); break; } irrecv.resume(); // принимаем следующую команду } }
КОД ВОТ ЭТОТ
А где тут сигнал?
Извиняюсь, не сигнал
У меня с ик датчиком соединены моторы
Я имел ввиду, что бы при удержании кнопки на пульте срабатывал ряд условий:( к примеру)
Если нажал и держишь кнопку, моторы крутятся, если кнопку отпустил, то моторы останавливаются
Для начала не грех бы выяснить, что передаёт Ваш пульт при удержании кнопки...
При удержании кнопки выводит:
запомнить последнюю пришедшую команду и при приходе "FFFFFFFF" повторять ее
Последняя пришедшая команда это к примеру строчка 61?
if (results.value != 0xFFFFFFFF) { lastCommand = results.value; }
И в этом же условии я прописываю то, что хочу?
А вы подумайте - можно ли обойтись без "прописывания в условии".
По мне так - осталось поменять одну строчку в исходнике.
Поменять так? Через условие?
Через условие?
Сами думать упорно не хотите? обязательно надо чтобы старший по головке погладил и сказал "все верно"?
Что значит "через условие"? А не через условие - это как?
Если пишу вот так, то вообще ничего не работает
Логично. У Вас, когда приходит символ повтора, ничего и не делается. Надо всё наоборот.
Если получили значение с кодом кнопки, то делать ничего не надо, только его запомнить. А вот если получили код повтора, то в зависимости от последней ззапомненной команды выполнять те или иные действия.
Ну и irrecv.resume(); не на месте стоит. Почему он только в случае одной конкретной кнопки вызывается? Всегда должен.
Не надо в моей строке местами переменные переставлять.
Просто поразмышляйте над ним: если принятый код не является кодом повтора, то последней командой считается вновь принятый код.
Пока прилетает ffffff - в lastCommand продолжает лежать последний код и он - не "повтор".
Как дальше поступить с командой? Подсказываю ещё раз: решение в изменении одной строке первоначального кода.
Я правильно понимаю? Нужно использовать millis, то есть найти время с момента получения последнего кода повтора
Вам какое действие необходимо сделать, опираясь на полученный код? В какой строке осуществляется выбор действия?
Я сделал, большое спасибо за помощь!