Помогите получить код зажатой кнопки с пульта по ИК приемнику

Дмитрий507

✩✩✩✩✩✩✩
9 Мар 2021
3
0
Добрый день столкнулся с такой ситуацией не могу получить код зажатой кнопки на пульте. Получаю только нули, хотя если нажать разово код приходит.
Скрин скана.png
Использую Библиотеку IRremote версии 3.0.3. Arduino Nano v3. Пульт обычный с китая. Приемник VS1838B. Получалось только получать код зажатой кнопки с библиотекой версии 2.х.х. Как реализовать прием зажатой кнопки на пульте в версии библиотеки IRremote 3.0.3?
Использую прием сигнала в этом скетче.

[/SPOILER]CODE lang="cpp" title="Управление реле с пульта" highlight="19"]#include "IRremote.h" //Библиотека версии 3.0.3
#include "BilDim.h"

#define pinIR 2 //Пин к которому подключен ИК приемник
#define kod1 1785214238 //Код одной нажатой кнопки на пульте
#define kod2 3877175040 //Код другой копки
#define kod3 4077715200 //Аналогично

RELE old1 (6, 1);
RELE old2 (7, 1);

void setup() {
Serial.begin(9600);
IrReceiver.begin(pinIR, ENABLE_LED_FEEDBACK);
}

void loop() {
if (IrReceiver.decode()) {
Serial.println(IrReceiver.decodedIRData.decodedRawData);
switch (IrReceiver.decodedIRData.decodedRawData) {
case (kod1) :
old1.rabotaRELE();
break;
case (kod2) :
old2.rabotaRELE();
break;
case (kod3) :
old1.rabotaRELE();
break;
}
delay(200);
IrReceiver.resume();
}
}[/CODE]
 

xof

★✩✩✩✩✩✩
24 Окт 2020
123
44
Получаю только нули
Скорее всего Вы получаете всё правильно. В данной ситуации (если я не ошибаюсь) если кнопка удерживается, то значение меняется на 0xfffff что значит REPEAT (повторение).
Так что либо используйте библиотеку где работает так как Вам хочется, либо допишите в скетч логику учёта последнего значения и если после него нули, значит использовать последнее значение.
 

Дмитрий507

✩✩✩✩✩✩✩
9 Мар 2021
3
0
Скорее всего Вы получаете всё правильно. В данной ситуации (если я не ошибаюсь) если кнопка удерживается, то значение меняется на 0xfffff что значит REPEAT (повторение).
Так что либо используйте библиотеку где работает так как Вам хочется, либо допишите в скетч логику учёта последнего значения и если после него нули, значит использовать последнее значение.
Конечно вряд ли так буду делать, да и плана в голове нет как сделать, но интересно как примерно это реализовывается, вы знаете?
 

xof

★✩✩✩✩✩✩
24 Окт 2020
123
44
вариантов масса. И зависит от того что должно происходить при зажатой кнопке.. и как быстро..
Но максимально просто и понятно вот так:

считанный код = читать код();
если (считанный код == 0)
{
считанный код = последний код;
}
иначе
{
последний код = считанный код;
}



Для примера в Вашем коде надо сделать
switch(читать код)
case 0:
считанный код = последний код;
ломать;
switch всё остальное
последний код = считанный код
 
Изменено:

Дмитрий507

✩✩✩✩✩✩✩
9 Мар 2021
3
0
вариантов масса. И зависит от того что должно происходить при зажатой кнопке.. и как быстро..
Но максимально просто и понятно вот так:

считанный код = читать код();
если (считанный код == 0)
{
считанный код = последний код;
}
иначе
{
последний код = считанный код;
}



Для примера в Вашем коде надо сделать
switch(читать код)
case 0:
считанный код = последний код;
ломать;
switch всё остальное
последний код = считанный код
Просто не понимаю как мне обозначить "это первый код" "второй", если при работе происходит захват первого значения и обработка с ним и только потом команда на прием следующего значения. Мне вот все кажется в библиотеке IRremote просто нужно где то изменить параметр. там масса настроек. Но у меня мало опыта и очень тяжело ориентироваться в библиотеке. Управление реле первый скетч написанный мной
 

xof

★✩✩✩✩✩✩
24 Окт 2020
123
44
Ну Вам тогда в платный раздел.
 

Vadimanys

✩✩✩✩✩✩✩
21 Апр 2021
1
0
Оформи код соответствующим тэгом
#include <IRremote.h>

int irPin = 3;

IRrecv IrReciver(irPin);

decode_results results;

void setup() {
Serial.begin(9600);
IrReciver.enableIRIn();
}

void loop() {
if (IrReciver.decode()) {
Serial.println( results.value, HEX );
IrReciver.resume();
}
}
Как получить код с пульта ??? Выдает нули . чтоне правильно сделано??